Skip to content

[tool] Complete context runner elimination and migrate AppContext usages to ToolContext - #190797

Merged
auto-submit[bot] merged 202 commits into
flutter:masterfrom
bkonyi:di/26-context-elimination
Nov 3, 2026
Merged

auto-submit[bot] merged 202 commits into
flutter:masterfrom
bkonyi:di/26-context-elimination

Conversation

@bkonyi

@bkonyi bkonyi commented Aug 8, 2026 •

Copy link
Copy Markdown
Contributor

Completes the elimination of runInContext and ambient AppContext lookups across flutter_tools by migrating remaining commands, runners, and toolchain classes to explicit ToolContext dependency 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

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [Tree Hygiene] wiki page, which explains my responsibilities.
  • I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
  • I signed the [CLA].
  • I listed at least one issue that this PR fixes in the description above.
  • I updated/added relevant documentation (doc comments with ///).
  • I added new tests to check the change I am making, or this PR is [test-exempt].
  • All existing and new tests are passing.

@bkonyi
bkonyi requested review from a team as code owners August 8, 2026 10:50
@bkonyi
bkonyi requested review from mboetger and removed request for a team August 8, 2026 10:50
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Aug 8, 2026
@github-actions github-actions Bot added platform-ios iOS applications specifically tool Affects the "flutter" command-line tool. See also t: labels. platform-macos Building on or for macOS specifically platform-windows Building on or for Windows specifically platform-linux Building on or for Linux specifically a: desktop Running on desktop team-android Owned by Android platform team team-ios Owned by iOS platform team team-macos Owned by the macOS platform team team-windows Owned by the Windows platform team team-linux Owned by the Linux platform team labels Aug 8, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@bkonyi
bkonyi marked this pull request as draft August 8, 2026 16:38
@bkonyi
bkonyi removed request for a team and mboetger August 8, 2026 16:41
@bkonyi
bkonyi force-pushed the di/26-context-elimination branch 4 times, most recently from 0203d5d to 6a3c58c Compare August 11, 2026 19:49
bkonyi added 15 commits October 28, 2026 23:06
# 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
@github-actions github-actions Bot removed platform-macos Building on or for macOS specifically platform-windows Building on or for Windows specifically platform-linux Building on or for Linux specifically labels Oct 30, 2026
@bkonyi
bkonyi marked this pull request as ready for review October 30, 2026 19:25
@bkonyi
bkonyi requested a review from chingjun October 30, 2026 19:25

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@bkonyi bkonyi added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 3, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Nov 3, 2026
Merged via the queue into flutter:master with commit faa0c75 Nov 3, 2026
24 of 25 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 3, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Nov 3, 2026
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
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: desktop Running on desktop CICD Run CI/CD platform-ios iOS applications specifically team-android Owned by Android platform team team-ios Owned by iOS platform team team-linux Owned by the Linux platform team team-macos Owned by the macOS platform team team-windows Owned by the Windows platform team tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants