Elements. Perform mixin inference on InterfaceElementImpl, not on Previously, mixin inference data was collected for each interface fragment individually, including augmentations. This data was then combined, which required managing separate information for the declaration and each augmentation, as well as handling substitutions between them. This change refactors the mixin inference process to be associated with the whole `InterfaceElementImpl` rather than individual fragments. The `TypesBuilder` now collects all fragments that have a `with` clause for a given element. A single `_MixinsInference` instance then iterates through these fragments and performs inference for each one within the context of the whole element. This is orchestrated by the new `_addFragmentWithClause` method, which gathers all relevant fragments (both declarations and augmentations) under their parent element. This new approach simplifies the logic significantly: - It removes the need for the previous complex logic that handled augmentations separately in `_inferDeclaration`. Augmentations are now treated uniformly with the base declaration. - It allows for the removal of redundant calls to the old `_updatedAugmented` function for declarations like `extension` and `mixin` that do not support mixins themselves. This refactoring makes the mixin inference logic cleaner and easier to follow, especially with the presence of augmentations, while preserving the existing functionality. The functionality is the same. Change-Id: Iaef78af37e76eeb82e2600112fcc2b483cce5bad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442284 Reviewed-by: Paul Berry <paulberry@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com> https://dart.googlesource.com/sdk/+/9e5e16cb3c71687a7b1f36037714ecf050620f7a
Monorepo is:
With depot_tools installed and on your path, create a directory for your monorepo checkout and run these commands to create a gclient solution in that directory:
mkdir monorepo cd monorepo gclient config --unmanaged https://dart.googlesource.com/monorepo gclient sync -D
This gives you a checkout in the monorepo directory that contains:
monorepo/ DEPS - the DEPS used for this gclient checkout commits.json - the pinned commits for Dart, flutter/engine, and flutter/flutter tools/ - scripts used to create monorepo DEPS engine/src/ - the flutter/buildroot repo flutter/ - the flutter/engine repo out/ - the build directory, where Flutter engine builds are created third_party/ - Flutter dependencies checked out by DEPS dart/ - the Dart SDK checkout. third_party - Dart dependencies, also used by Flutter flutter/ - the flutter/flutter repo
Flutter's instructions for building the engine are at Compiling the engine
They can be followed closely, with a few changes:
goma_ctl ensure_start is sufficient.Example build commands that work on linux:
MONOREPO_PATH=$PWD if [[ ! $PATH =~ (^|:)$MONOREPO_PATH/flutter/bin(:|$) ]]; then PATH=$MONOREPO_PATH/flutter/bin:$PATH fi export GOMA_DIR=$(dirname $(command -v gclient))/.cipd_bin goma_ctl ensure_start pushd engine/src flutter/tools/gn --goma --no-prebuilt-dart-sdk --unoptimized --full-dart-sdk autoninja -C out/host_debug_unopt popd
The Flutter commands used to build and run apps will use the locally built Flutter engine and Dart SDK, instead of the one downloaded by the Flutter tool, if the --local-engine option is provided.
For example, to build and run the Flutter spinning square sample on the web platform,
MONOREPO_PATH=$PWD cd flutter/examples/layers flutter --local-engine=host_debug_unopt \ -d chrome run widgets/spinning_square.dart cd $MONOREPO_PATH
To build for desktop, specify the desktop platform device in flutter run as -d macos or -d linux or -d windows. You may also need to run the command
flutter create --platforms=windows,macos,linux
on existing apps, such as sample apps. New apps created with flutter create already include these support files. Details of desktop support are at Desktop Support for Flutter
Tests in the Flutter source tree can be run with the flutter test command, run in the directory of a package containing tests. For example:
MONOREPO_PATH=$PWD cd flutter/packages/flutter flutter test --local-engine=host_debug_unopt cd $MONOREPO_PATH
Please file an issue or email the dart-engprod team with any problems with or questions about using monorepo.
We will update this documentation to address them.
flutter commands may download the engine and Dart SDK files for the configured channel, even though they will be using the local engine and its SDK.gclient sync needs to be run in an administrator session, because some installed dependencies create symlinks.