Repository navigation
[tool] Complete context runner elimination and migrate AppContext usages to ToolContext - #190797
Conversation
There was a problem hiding this comment.
Code Review
This pull request refactors the flutter_tools package to support dependency injection and context-free environments by introducing ToolContext, AndroidContext, AppleContext, and ToolDependencies to manage dependencies instead of relying on global context lookups. Review feedback highlights several instances where fallback mechanisms to globals or legacy context are missing or could throw UnsupportedError in context-free environments, particularly in commands like doctor, emulators, build, packages, update-packages, upgrade, and create. Additional suggestions include ensuring the correct filesystem is passed to getRepoPackages in analyze, using LocalFileSystem.instance in daemon, and simplifying the constructor in build_ios.
0203d5d to
6a3c58c
Compare
# Conflicts: # packages/flutter_tools/lib/src/macos/macos_device.dart # packages/flutter_tools/lib/src/project.dart # packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart # packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart # packages/flutter_tools/test/commands.shard/permeable/create_test.dart # packages/flutter_tools/test/general.shard/macos/macos_project_migration_test.dart # packages/flutter_tools/test/general.shard/project_test.dart
# Conflicts: # packages/flutter_tools/lib/src/commands/build_ios.dart
# Conflicts: # packages/flutter_tools/lib/executable.dart # packages/flutter_tools/lib/src/commands/analyze.dart # packages/flutter_tools/lib/src/flutter_application_package.dart # packages/flutter_tools/lib/src/ios/mac.dart # packages/flutter_tools/lib/src/project.dart # packages/flutter_tools/lib/src/project_validator.dart # packages/flutter_tools/test/commands.shard/hermetic/android_analyze_test.dart # packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart # packages/flutter_tools/test/general.shard/application_package_test.dart # packages/flutter_tools/test/general.shard/macos/application_package_test.dart # packages/flutter_tools/test/integration.shard/web_plugin_registrant_test.dart
…e-refactor # Conflicts: # packages/flutter_tools/lib/src/commands/build_ios.dart
# Conflicts: # packages/flutter_tools/lib/src/commands/build_ios.dart # packages/flutter_tools/lib/src/isolated/devfs_web.dart # packages/flutter_tools/test/general.shard/ios/mac_test.dart
There was a problem hiding this comment.
Code Review
This pull request refactors flutter_tools to improve dependency injection by introducing ToolContext and FlutterProjectFactory, replacing static global access with explicit dependency injection for Logger, FileSystem, and Config. The reviewer identified several issues where private fields were being initialized directly as named constructor parameters, which violates style guidelines and causes accessibility issues.
Roll Flutter from fcfb4f203eae to 934720261be0 (38 revisions) flutter/flutter@fcfb4f2...9347202 2026-11-03 [email protected] Roll Skia from 5bceaa033999 to c733ad3e37cb (5 revisions) (flutter/flutter#195872) 2026-11-03 [email protected] Roll Skia from 34d2bf479385 to 5bceaa033999 (9 revisions) (flutter/flutter#195864) 2026-11-03 [email protected] fix: prefer pointer events over semantics tap for mouse clicks on web (flutter/flutter#191529) 2026-11-03 [email protected] [VPAT] Expose a semantics text field value while it is not being edited (flutter/flutter#195445) 2026-11-03 [email protected] [Impeller] Make a GL context current before constructing an AiksContext without a surface (flutter/flutter#195629) 2026-11-03 [email protected] [flutter_tools] Eliminate globals.dart from project.dart (flutter/flutter#194066) 2026-11-03 [email protected] [tool] Complete context runner elimination and migrate AppContext usages to ToolContext (flutter/flutter#190797) 2026-11-03 [email protected] [web] Unify font collections between CanvasKit and Skwasm (flutter/flutter#195539) 2026-11-03 [email protected] [Android] Replay predictive back state for retained engines (flutter/flutter#192286) 2026-11-03 [email protected] [vulkan]: Adds depth/stencil synchronization for subpasses (flutter/flutter#195689) 2026-11-03 [email protected] [web] Honor requested upscaling in instantiateImageCodecWithSize and ImageDescriptor.instantiateCodec (flutter/flutter#195836) 2026-11-03 [email protected] Roll Skia from 866b61ca92c9 to 34d2bf479385 (9 revisions) (flutter/flutter#195848) 2026-11-03 [email protected] Roll Fuchsia Test Scripts from xl1LWBuppzu-BnOzV... to B6zarykZp6PKWRueg... (flutter/flutter#195847) 2026-11-03 [email protected] Remove unused ffi (flutter/flutter#195710) 2026-11-02 [email protected] Revert: [Android] Let the raster thread use every core of a chip without little cores (flutter/flutter#195838) 2026-11-02 [email protected] Run 10 impeller iOS benchmarks as one devicelab task (flutter/flutter#195661) 2026-11-02 [email protected] Use named uniforms instead of setFloat in StretchEffect (flutter/flutter#195372) 2026-11-02 [email protected] [flutter_tools] Report when the browser disconnects during a web test run (flutter/flutter#192198) 2026-11-02 [email protected] fix: Resolve memory leak in image_list example (flutter/flutter#189526) 2026-11-02 [email protected] Only run the common local engine configurations in presubmit (flutter/flutter#195688) 2026-11-02 [email protected] Update gcloud_version to version [email protected] (flutter/flutter#195769) 2026-11-02 [email protected] [Impeller] Order the Vulkan copy-texture-to-texture layout transition after the copy (flutter/flutter#195814) 2026-11-02 [email protected] [Impeller] Order the Vulkan ResizeTexture layout transition after its blit (flutter/flutter#195721) 2026-11-02 [email protected] [web] Fix CanvasKit fragment shader uniforms being freed or mutated after recording (flutter/flutter#195718) 2026-11-02 [email protected] Roll Fuchsia Linux SDK from MqypI6RNyVZ_FLUE-... to T_-6-6X1lDMghhAvX... (flutter/flutter#195809) 2026-11-02 [email protected] [Android] Log why Impeller falls back to OpenGLES (flutter/flutter#194764) 2026-11-02 [email protected] Roll Skia from 3f35fb6e591b to 866b61ca92c9 (11 revisions) (flutter/flutter#195802) 2026-11-02 [email protected] Roll Skia from 3f35fb6e591b to 866b61ca92c9 (11 revisions) (flutter/flutter#195802) 2026-11-02 [email protected] Only run the common local engine configurations in presubmit (flutter/flutter#195688) 2026-11-02 [email protected] Balance tool_integration_tests subshards by expected duration (flutter/flutter#195628) 2026-11-02 [email protected] [web_paragraph] Map code units without a cluster to a cluster (flutter/flutter#195384) 2026-11-02 [email protected] [web] Hide synthetic autofill inputs from assistive technology (flutter/flutter#195618) 2026-11-02 [email protected] Roll Packages from 3742a4e to 3f34a6f (8 revisions) (flutter/flutter#195795) 2026-11-02 [email protected] [web] Unskip web tests that pass on CanvasKit and Skwasm: platform_view_test, route_notification_messages_test (flutter/flutter#195605) 2026-11-02 [email protected] Roll Skia from e5ad3868b8db to 3f35fb6e591b (1 revision) (flutter/flutter#195789) 2026-11-02 [email protected] Roll Skia from f5215e74aa16 to e5ad3868b8db (3 revisions) (flutter/flutter#195779) 2026-11-02 [email protected] Roll Skia from e43478a2f9f8 to f5215e74aa16 (1 revision) (flutter/flutter#195776) 2026-11-01 [email protected] Roll Fuchsia Linux SDK from kW0A0xxNkqf38ljm4... to MqypI6RNyVZ_FLUE-... (flutter/flutter#195768) If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
Completes the elimination of
runInContextand ambientAppContextlookups acrossflutter_toolsby migrating remaining commands, runners, and toolchain classes to explicitToolContextdependency injection.Stacked on #194066 (
di/29b-2-project).Fork diff: bkonyi/flutter@di/29b-2-project...di/26-context-elimination
Part of #47161
Pre-launch Checklist
///).