Skip to content

Add public buildModeFor overloads and wire Flutter dependencies through the new DSL - #3

Closed
reidbaker-agent wants to merge 332 commits into
agp-internal-utilsfrom
agp-buildmode-deps
Closed

Add public buildModeFor overloads and wire Flutter dependencies through the new DSL#3
reidbaker-agent wants to merge 332 commits into
agp-internal-utilsfrom
agp-buildmode-deps

Conversation

@reidbaker-agent

@reidbaker-agent reidbaker-agent commented Jul 22, 2026

Copy link
Copy Markdown
Owner

This is PR 3 of 11 in the AGP 9.1.0 / public gradle-api/ newdsl migration stack.

This PR introduces public buildModeFor overloads supporting modern ApplicationBuildType, LibraryBuildType, and DynamicFeatureBuildType, and wires Flutter dependencies through the new AGP 9.1.0 DSL.

Depends on flutter#190957 (PR 2).


Standard review context for this pr stack

This is PR is part of an 11 pr stack to migrate the "newdsl" gradle-api specifically in agp 9.1.0.
The complete stack has passed presubmits, postsubmits, and customer tests: https://flutter-dashboard.appspot.com/#/build?repo=flutter&branch=experimental/agp-gradle-api

All of the code was LLM authored. A mix of manual prompting, automatic prompting, several models and adversarial review. The combined sessions are enough that I cannot include relevant prompts like I have been doing on other prs.

If you want to review the pr stack you can find it here. These prs will be abandoned/closed as prs land into flutter/flutter.

  1. Add AGP public-API migration docs (contributor doc + breaking-change page draft) #1 (branch: agp-api-doc)
  2. Remove AGP-internal imports from VersionFetcher and migrate compileSdk/ndk reads to the public DSL #2 (branch: agp-internal-utils)
  3. Add public buildModeFor overloads and wire Flutter dependencies through the new DSL #3 (branch: agp-buildmode-deps)
  4. Replace the plugin build-type copy with initWith on the public DSL #4 (branch: agp-plugin-buildtypes)
  5. Delete getLegacyAndroidExtension and migrate the NDK fallback to the public DSL #5 (branch: agp-ndk-fallback)
  6. Register the Flutter compile task lazily from the variant API for app projects #6 (branch: agp-assets-onvariants)
  7. Migrate the flutter-apk copy and per-ABI versionCode to the variant API #7 (branch: agp-apk-copy-versioncode)
  8. Unify add-to-app module wiring on the variant API and drop host-project cross-wiring #8 (branch: agp-add-to-app)
  9. Move aar_init_script off legacy AGP APIs #9 (branch: agp-aar-script)
  10. Flip the newDsl default: drop the opt-out from templates and migrate it away #10 (branch: agp-newdsl-flip)
  11. Compile the Flutter Gradle Plugin against the gradle-api artifact only #11 (branch: agp-gradle-api)

This work is urgent in the sense that we are worried that android will publish agp 10 with no opt out but not so urgent that we are willing to break flutter users because we didn't review or understand the code because we were in a rush.

Breaking changes are expected as part of this work. There are patterns the android team explicitly does not want apps to use and apis that have no equivalent.

As part of the effort to ensure this work does not slip into ai slop, prs from this stack will be reviewed by me (@reidbaker) before asking for review. Then we will have 2 android expert reviewers also review every pr.


Agent authored description.
This is PR 3 of 11 in the AGP 9.1.0 / public gradle-api migration stack (flutter#180137, flutter#166550).

  • Introduces buildModeFor overloads supporting modern AGP BuildType DSL objects (ApplicationBuildType, DynamicFeatureBuildType, LibraryBuildType).
  • Extracts domain model CompileSdkVersion with invariant validation (apiLevel xor previewCodename).
  • Standardizes non-temporal type aliases across the Gradle plugin (ModelBuildType, DslBuildType, InternalDslBuildType).
  • Updates addFlutterDependencies and PluginHandler to iterate AgpCommonExtensionWrapper.buildTypes.
  • Configures build.gradle.kts with multi-AGP test capability (-PagpVersion=) and bytecode check (:validateNoCommonExtensionInBytecode).
  • Adds full test coverage for wrapper 4-way dispatch, CompileSdkVersion, build mode resolution, and dependency wiring under both AGP 8.11.1 and 9.1.0.

Pre-launch Checklist

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • I read the [AI contribution guidelines] and understand my responsibilities, or I am not using AI tools.
  • 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].
  • I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
  • All existing and new tests are passing.

DanTup and others added 19 commits August 5, 2026 16:52
…DAP clients (flutter#190455)

This is functionality from the legacy DAPs that was missed when
migrating to the SDK. Some kinds of errors (such as Overflow errors)
includes nodes to deep-link into DevTools. By forwarding these to the
IDE, instead of just a text link the IDE can show a toast notification
with a button to open the embedded version of DevTools.

This is part of the work to fix
Dart-Code/Dart-Code#6134. There are some
additional fixes required elsewhere, but once those are resolved, this
will result in a notification like this:

<img width="533" height="226" alt="image"
src="https://github.com/user-attachments/assets/8989a67f-3ac2-4d87-b583-f56704ca8872"
/>

Clicked "Inspect Widget" will open the embedded Inspector on the correct
widget.


## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…d non-ASCII font rendering (flutter#180235)

# Separate ARM64 Linux Desktop and Embedded engine builds to fix CJK and
non-ASCII font rendering

## Problem

On ARM64 Linux desktop environments (GNOME, KDE, etc.), **Chinese
characters and other non-ASCII text render as squares** in Flutter
applications. This affects production applications like Ubuntu App
Center which uses Flutter on ARM64.

### Root Cause

The ARM64 Linux engine builds (`linux_arm_host_engine`) were missing the
`--enable-fontconfig` flag, unlike x64 Linux builds which have it.
Without fontconfig support, the Flutter GTK engine cannot discover and
load system fonts properly on desktop Linux distributions.

### Why This Wasn't Caught Earlier

The same build configuration was used for both:
- **Desktop environments** (GNOME/KDE with GTK) - requires fontconfig
- **Embedded/IoT systems** (headless or custom UI) - doesn't need
fontconfig

This conflation meant adding fontconfig would unnecessarily bloat
embedded deployments.

---

## Solution

This PR **separates ARM64 Linux builds into two distinct
configurations**, following the same architecture pattern as x64 Linux:

### 1. Desktop Builds (NEW: `linux_arm_host_desktop_engine`)
- **Target**: GNOME/KDE desktop environments
- **Includes**: `--enable-fontconfig` for proper font rendering
- **Builds**: `flutter_gtk` library for profile/debug/release modes
- **Use case**: Desktop applications (App Center, desktop Flutter apps)

### 2. Embedded/IoT Builds (MODIFIED: `linux_arm_host_engine`)
- **Target**: Headless or custom UI embedded systems
- **Excludes**: fontconfig dependency (not needed)
- **Builds**: embedder library, artifacts, Dart SDK, Impeller SDK
- **Use case**: Raspberry Pi, embedded Linux, IoT devices

---

## Changes Made

1. **Created**:
`engine/src/flutter/ci/builders/linux_arm_host_desktop_engine.json`
   - New builder configuration for ARM64 desktop
   - Adds `--enable-fontconfig` to all build modes
   - Produces `flutter_gtk` libraries

2. **Modified**:
`engine/src/flutter/ci/builders/linux_arm_host_engine.json`
   - Now focuses on embedded/IoT builds only
   - Removed `flutter_gtk` targets (moved to desktop config)
   - Removed `--enable-fontconfig` (not needed for embedded)
   - Removed profile/release configs (only build embedder in debug)

3. **Modified**: `engine/src/flutter/.ci.yaml`
   - Registered new `linux_arm_host_desktop_engine` builder
   - Same CI configuration as existing ARM64 builder

---

## Testing & Verification

### ✅ Manual Testing
- **Platform**: Ubuntu 25.10 on ARM64 (Parallels VM on Apple M4)
- **Application**: Ubuntu App Center (Snap package)
- **Flutter Version**: 3.38.1

**Before** (Official ARM64 build without fontconfig):
- Chinese characters display as squares (□□□)
- All CJK and non-Latin text affected

**After** (Custom build with fontconfig):
- Chinese characters render correctly using system fonts
- All text displays properly

### Test Commands Used
```bash
# Compile custom engine with fontconfig
./flutter/tools/gn --runtime-mode release --enable-fontconfig \
  --target-os linux --linux-cpu arm64 --no-goma
ninja -C out/linux_release_arm64

# Verify fontconfig linking
readelf -d out/linux_release_arm64/libflutter_linux_gtk.so | grep fontconfig
# Output: libfontconfig.so.1

# Replace engine in App Center snap (via mount)
sudo mount --bind custom_libflutter_linux_gtk.so \
  /snap/snap-store/current/bin/lib/libflutter_linux_gtk.so

# Launch App Center - Chinese text now renders correctly
snap-store
```

---

## Architecture Benefits

✅ **Decoupling**: Desktop and embedded builds are now independent
✅ **No Breaking Changes**: Embedded builds remain unchanged (same
targets, no fontconfig)
✅ **Transparent**: Flutter Tool and VS Code don't need modifications
✅ **Consistency**: Follows the same pattern as x64 Linux architecture
✅ **Minimal Impact**: Only adds new builds, doesn't modify existing ones

---

## Downstream Impact

### Who Benefits
- ARM64 Linux desktop users (Ubuntu, Fedora, Debian on ARM)
- Applications using Flutter GTK on ARM64 (App Center, custom desktop
apps)
- Developers targeting ARM64 desktop environments

### Who Is NOT Affected
- Embedded/IoT users (they continue using `linux_arm_host_engine` as
before)
- x64 Linux users (already have fontconfig)
- Mobile platforms (Android, iOS)
- Windows/macOS platforms

---

## Related Issues

Fixes flutter#139293 flutter#90951

---

## Checklist

- [x] I read the [Contributor
Guide](https://github.com/flutter/flutter/blob/master/CONTRIBUTING.md)
and followed the process outlined there for submitting PRs.
- [x] I read the [Tree
Hygiene](https://github.com/flutter/flutter/wiki/Tree-hygiene) wiki
page, which explains my responsibilities.
- [x] I read and followed the [Flutter Style
Guide](https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo).
- [x] I signed the CLA.
- [x] I listed at least one issue that this PR fixes in the description
above. (Fixes flutter#139293)
- [x] I updated/added relevant documentation (comments in JSON files).
- [x] I added new tests to check the change I am making, or this PR is
test-exempt. (CI infrastructure change)
- [x] All existing and new tests are passing. (JSON syntax verified)

---

## Core Reviewers
@flutter/engine-ci @flutter/linux-desktop

---

## Screenshots

### Before (Without Fontconfig)
Chinese text displays as squares in Ubuntu App Center on ARM64:
```
标题: □□□□□
描述: □□□□□□□□
```

### After (With Fontconfig)
Chinese text renders correctly:
```
标题: 应用中心
描述: 发现和安装应用程序
```

*(Actual screenshots can be added to the PR after creation)*

---

## Additional Context

This issue was discovered while investigating font rendering problems in
Ubuntu App Center on ARM64 systems. The fix has been verified to work
with Flutter 3.38.1 on Ubuntu 25.10 ARM64.

The architecture follows the principle of **separation of concerns**:
desktop applications need system font integration via fontconfig, while
embedded systems typically use bundled fonts and don't need this
dependency.

---------

Co-authored-by: John McDole <codefu@google.com>
Co-authored-by: Jason Simmons <jason-simmons@users.noreply.github.com>
…lutter#188901)

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Fixes flutter#177509

This updates `flutter_tools` UTF-8 error detection so that a valid
`U+FFFD` replacement character is not mistaken for malformed UTF-8.

Previously, `Utf8Decoder` decoded bytes with `allowMalformed: true` and
then treated any decoded string containing `U+FFFD` as evidence that the
original bytes were malformed. That incorrectly rejects valid UTF-8
input such as `EF BF BD`, which is the legitimate encoding of `U+FFFD`.

This PR changes the decoder to use a strict UTF-8 decoder when
`reportErrors` is enabled. If strict decoding succeeds, the decoded
string is returned as-is. If strict decoding throws `FormatException`,
the input is decoded again with `allowMalformed: true` only to preserve
the existing `ToolExit` diagnostic message and source bytes.

The permissive `reportErrors: false` path is unchanged and continues to
decode malformed bytes with replacement characters.

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

<!-- 
If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.
-->

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

---------

Co-authored-by: Ben Konyi <bkonyi@google.com>
…ller tests on Mac Minis used by CI (flutter#189813)" (flutter#190560)

This reverts commit 285bf67.

This was an experiment that tried to reduce the frequency of flakes when
running Impeller OpenGLESSDF rendering tests. It is obsolete now that
these tests were disabled by
flutter#190469
Enables Gradle CI Cache for single test target. 

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.
…r#190622)

flutter/packages@3498b9d...b1424e2

2026-08-05 saurabhmirajkar000@gmail.com [go_router] Document regex
constraints for path parameters (flutter/packages#12281)
2026-08-04 fluttergithubbot@gmail.com Sync release-cupertino_ui-0.0.3 to
main (flutter/packages#12367)
2026-08-04 43054281+camsim99@users.noreply.github.com
[camera_android_camerax] Fix video recording after backgrounding app
(flutter/packages#12145)
2026-08-04 jmccandless@google.com [material_ui and cupertino_ui] Remove
workspaces and fix CI (flutter/packages#12351)
2026-08-04 fluttergithubbot@gmail.com Sync release-material_ui-0.0.3 to
main (flutter/packages#12352)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
… test command (flutter#189193) (flutter#190541)

Fixes flutter#189193

In `TestCommand`, `--tags` (`-t`) and `--exclude-tags` (`-x`) were
registered using `addOption(...)` instead of `addMultiOption(...)`. This
scalar option definition retained only the last CLI occurrence when
passed multiple times (`-t a -t b` became `'b'`). Additionally, default
comma splitting in `package:args` mangled composite boolean selector
expressions (`||`, `&&`, `!`) before forwarding arguments to
`package:test`.

This PR migrates `--tags` and `--exclude-tags` to `addMultiOption(...,
splitCommas: false)` in `TestCommand` and updates `FlutterTestRunner` to
forward all `--tags` and `--exclude-tags` values sequentially to `dart
test`.

## Testing
- Added hermetic regression test `passes boolean selectors and multiple
tags/exclude-tags through to package:test` in
`packages/flutter_tools/test/commands.shard/hermetic/test_test.dart`.
The `snippets` test fails with one error on HEAD. Apparently it's not
run on CI.

This PR fixes the failure by removing the test case that verifies
`--no-format-output`. The CLI option was removed in
https://github.com/flutter/flutter/pull/161347/changes .

A deadcode parameter is also removed.

This PR also adds this test to CI.

## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…ation_golden_test (flutter#190581)

Part of flutter#190301

Renames the specific primitive_shape_test to a more generic
engine_integration_golden_test.

The original lib/main.dart of the test is renamed
lib/primitive_shape_main.dart. We anticipate adding further tests with
their own main.dart in lib/, and importing and using each one in
integration_test/engine_integration_golden_test.dart.

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

*Replace this paragraph with a description of what this PR is changing
or adding, and why. Consider including before/after screenshots.*

*List which issues are fixed by this PR. You must list at least one
issue. An issue is not required if the PR fixes something trivial like a
typo.*

*If you had to change anything in the [flutter/tests] repo, include a
link to the migration guide as per the [breaking change policy].*

## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…ing. (flutter#189192)

When attempting to test multiple integration tests, the
`DesktopLogReader` would cause a failure because
`DesktopLogReader._inputController` was closed, so a new process
couldn't use it.

`DesktopLogReader` now keeps a persistent log reader per device that
isn't closed on process termination, which fixes the issue for
integration tests. However, `ProtocolDiscovery` requires the stream to
close to detect that a launched process exited without providing a VM
Service. This introduces `SingleLaunchLogReader`, which is specifically
used for VM discovery, to satisfy that requirement.

This is in line with how Android deals with the same issue.

refs: flutter#135673

## Pre-launch Checklist

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

---------

Co-authored-by: Ben Konyi <bkonyi@google.com>
…ostics (flutter#190112)

Fix impellerc crash on Windows when paths contain Unicode characters,
and improve diagnostics by capturing stdout/stderr and adding helpful
hints.

Fixes flutter#190233
…#190379)

Related to flutter#189899.

`RenderPass` memoizes its built pipeline behind a dirty flag, but the
fixed-function setters all assign through `GetPipelineDescriptor`, which
dirties unconditionally. Callers re-send the same cull mode, winding
order, primitive type, and polygon mode ahead of most draws, and rebind
the same pipeline, so the memo was being invalidated on nearly every
draw. These setters now compare before assigning and leave the state
clean when nothing changed.
Reverts: [Enable Gradle cache for a single test
target](flutter#190474)

Initiated by: @mboetger

Reason for reverting: broke the tree with spaces.

Original PR Author: @mboetger

Reviewed By: @jtmcdole

The original PR description is provided below:

Enables Gradle CI Cache for single test target. 

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.
…irement (flutter#183835)

This changes flutter web's detection of wasm compatibility to be the
expression emitted by dart2wasm.

The expression was generated by passing `--require-js-string-builtin` to
the dart2wasm compiler. Newer versions of browsers all support the
`js-string` builtins nowadays. Apps running on browsers without
`js-string` builtin support will not run in a performant way, so we'd
not want to run the wasm version on them anyway.

This is a preparation for dart2wasm to require the `js-string` builtin
by default (i.e. we'll remove the `--require-js-string-builtin` flag and
also remove the polyfill for `js-string` builtins). See [0]

[0] https://dart-review.googlesource.com/c/sdk/+/488840

For reference of Safari testing on Dart:
* [cl/347283](https://dart-review.googlesource.com/c/sdk/+/347283),
[cl/348601](https://dart-review.googlesource.com/c/sdk/+/348601),
[cl/348560](https://dart-review.googlesource.com/c/sdk/+/348560),
[cl/371542](https://dart-review.googlesource.com/c/sdk/+/371542) added
JavaScriptCore testing (command line version of Safari's JS engine)
* [cl/426461](https://dart-review.googlesource.com/c/sdk/+/426461),
[cl/501501](https://dart-review.googlesource.com/c/sdk/+/501501),
[cl/501480](https://dart-review.googlesource.com/501480) added / will
add Safari browser testing to Dart CI

Co-authored-by: Mouad Debbar <mdebbar@google.com>
Testing CI stability without --disable-dev-shm-usage flag.
Migrates the platform_view example to import material_ui. 

Related to flutter#190093.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.
…or real (flutter#190494)

Marking types and type members internal prevents the swift compiler from
marking the corresponding symbols (in the case of `@objc`, both the
Swift and Objc symbols) visible.

~Unfortunately since the CI is still on Swift 6.2, so the `
-emit-clang-header-min-access` flag is not available. As a result the
`engine/src/out/host_debug_unopt_arm64/gen/flutter/shell/platform/darwin/common/test_utils_swift/test_utils_swift.h`
file swift compiler emits doesn't actually include the interface of
`StringOutputWriter` since it's internal. The only workaround I found
was to manually add the interface.~ Adding a bridging header fixed that.

With these changes, when I build the iOS `Flutter.framework` with
`enable-testing` set to false, the only visible swift symbols are from a
class marked `@usableFromInline` (`_FlutterTraceScope`). And as gemini
suggested I removed the `@inlinable` from that class. So no Swift
symbols or internal objc symbols:

```bash
nm -gUm out/ios_debug_sim_unopt_arm64/Flutter.framework/Flutter 
00000000038d64b0 (__DATA,__common) external _FlutterEndOfEventStream
00000000038d64a8 (__DATA,__common) external _FlutterMethodNotImplemented
00000000037d5838 (__DATA_CONST,__const) external _FlutterSemanticsUpdateNotification
00000000037d5848 (__DATA_CONST,__const) external _FlutterViewControllerHideHomeIndicator
00000000037d5850 (__DATA_CONST,__const) external _FlutterViewControllerShowHomeIndicator
00000000037d5840 (__DATA_CONST,__const) external _FlutterViewControllerWillDealloc
00000000019bc8c4 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyBufferToTexture
00000000019bc9a8 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToBuffer
00000000019bca50 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_CopyTextureToTexture
00000000019bc410 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Initialize
00000000019bc5b0 (__TEXT,__text) external _InternalFlutterGpu_CommandBuffer_Submit
00000000019c6df8 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultColorFormat
00000000019c7048 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultDepthStencilFormat
00000000019c7004 (__TEXT,__text) external _InternalFlutterGpu_Context_GetDefaultStencilFormat
00000000019c7174 (__TEXT,__text) external _InternalFlutterGpu_Context_GetMaxSamplerAnisotropy
00000000019c708c (__TEXT,__text) external _InternalFlutterGpu_Context_GetMinimumUniformByteAlignment
00000000019c70f4 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsFramebufferRenderMipmap
00000000019c7134 (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsManuallyMippedTextures
00000000019c70cc (__TEXT,__text) external _InternalFlutterGpu_Context_GetSupportsOffscreenMSAA
00000000019c6c30 (__TEXT,__text) external _InternalFlutterGpu_Context_InitializeDefault
00000000019c71b4 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureCompression
00000000019c7230 (__TEXT,__text) external _InternalFlutterGpu_Context_SupportsTextureFormat
00000000019c9ca8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Flush
00000000019c9720 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Initialize
00000000019c99f8 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
00000000019c9c48 (__TEXT,__text) external _InternalFlutterGpu_DeviceBuffer_Overwrite
00000000019cc474 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Begin
00000000019cc6ec (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindIndexBufferDevice
00000000019cc4cc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindPipeline
00000000019ccb6c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTexture
00000000019cceb8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindTextureIndexed
00000000019cc7fc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDevice
00000000019ccac4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindUniformDeviceIndexed
00000000019cc598 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_BindVertexBufferDevice
00000000019ccf54 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_ClearBindings
00000000019cd660 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Draw
00000000019cd6d4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_DrawIndexed
00000000019cbf98 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_Initialize
00000000019cc0e4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorAttachment
00000000019ccf78 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEnable
00000000019ccfbc (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetColorBlendEquation
00000000019cd4b0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetCullMode
00000000019cd0e8 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthCompareOperation
00000000019cc2f0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthStencilAttachment
00000000019cd0ac (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetDepthWriteEnable
00000000019cd5f4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPolygonMode
00000000019cd51c (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetPrimitiveType
00000000019cd168 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetScissor
00000000019cd3b4 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilConfig
00000000019cd148 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetStencilReference
00000000019cd2a0 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetViewport
00000000019cd588 (__TEXT,__text) external _InternalFlutterGpu_RenderPass_SetWindingOrder
00000000019d6208 (__TEXT,__text) external _InternalFlutterGpu_RenderPipeline_Initialize
00000000019e4898 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_GetShader
00000000019e4190 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithAsset
00000000019e44d8 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_InitializeWithBytes
00000000019e43a0 (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithAsset
00000000019e473c (__TEXT,__text) external _InternalFlutterGpu_ShaderLibrary_ReinitializeWithBytes
00000000019dc244 (__TEXT,__text) external _InternalFlutterGpu_Shader_DebugIsDirty
00000000019dc170 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformMemberOffset
00000000019dc0d0 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructIndex
00000000019dc04c (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformStructSize
00000000019dc120 (__TEXT,__text) external _InternalFlutterGpu_Shader_GetUniformTextureIndex
00000000019f2f64 (__TEXT,__text) external _InternalFlutterGpu_Surface_AcquireNextFrame
00000000019f2ff0 (__TEXT,__text) external _InternalFlutterGpu_Surface_DiscardFrame
00000000019f312c (__TEXT,__text) external _InternalFlutterGpu_Surface_GetBackingTextureCount
00000000019f3030 (__TEXT,__text) external _InternalFlutterGpu_Surface_GetCurrentImage
00000000019f2d4c (__TEXT,__text) external _InternalFlutterGpu_Surface_Initialize
00000000019f2f90 (__TEXT,__text) external _InternalFlutterGpu_Surface_PresentFrame
00000000019f3054 (__TEXT,__text) external _InternalFlutterGpu_Surface_Resize
00000000019f7650 (__TEXT,__text) external _InternalFlutterGpu_Texture_AsImage
00000000019f7674 (__TEXT,__text) external _InternalFlutterGpu_Texture_ImageTextureInfo
00000000019f7214 (__TEXT,__text) external _InternalFlutterGpu_Texture_Initialize
00000000019f7aec (__TEXT,__text) external _InternalFlutterGpu_Texture_InitializeFromImage
00000000019f75a0 (__TEXT,__text) external _InternalFlutterGpu_Texture_Overwrite
000000000388da18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterAppDelegate
0000000003890a20 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBasicMessageChannel
0000000003890bb0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryCodec
00000000038909d0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterBinaryMessengerRelay
000000000388dae0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackCache
000000000388da90 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterCallbackInformation
000000000388db58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterDartProject
000000000388dd88 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngine
000000000388df18 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroup
000000000388def0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEngineGroupOptions
0000000003890a70 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterError
0000000003890b60 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterEventChannel
000000000388df68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterHeadlessDartRunner
0000000003890c50 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMessageCodec
0000000003890ca0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterJSONMethodCodec
0000000003890ac0 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodCall
0000000003890b10 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterMethodChannel
000000000388e4b8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginAppLifeCycleDelegate
000000000388e5a8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterPluginSceneLifeCycleDelegate
000000000388e558 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterSceneDelegate
0000000003890d68 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMessageCodec
0000000003890db8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardMethodCodec
0000000003890ea8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReader
0000000003890d40 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardReaderWriter
0000000003890e08 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardTypedData
0000000003890e58 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStandardWriter
0000000003890c00 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterStringCodec
000000000388e828 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextInputView
000000000388eaa8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterTextureRegistryRelay
000000000388ebe8 (__DATA,__objc_data) external _OBJC_CLASS_$_FlutterViewController
000000000388da40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterAppDelegate
0000000003890a48 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBasicMessageChannel
0000000003890bd8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryCodec
00000000038909f8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterBinaryMessengerRelay
000000000388dab8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackCache
000000000388da68 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterCallbackInformation
000000000388db80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterDartProject
000000000388de00 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngine
000000000388df40 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroup
000000000388dec8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEngineGroupOptions
0000000003890a98 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterError
0000000003890b88 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterEventChannel
000000000388df90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterHeadlessDartRunner
0000000003890c78 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMessageCodec
0000000003890cc8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterJSONMethodCodec
0000000003890ae8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodCall
0000000003890b38 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterMethodChannel
000000000388e4e0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginAppLifeCycleDelegate
000000000388e5d0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterPluginSceneLifeCycleDelegate
000000000388e580 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterSceneDelegate
0000000003890d90 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMessageCodec
0000000003890de0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardMethodCodec
0000000003890ed0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReader
0000000003890ef8 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardReaderWriter
0000000003890e30 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardTypedData
0000000003890e80 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStandardWriter
0000000003890c28 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterStringCodec
000000000388e968 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextInputView
000000000388ead0 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterTextureRegistryRelay
000000000388ec10 (__DATA,__objc_data) external _OBJC_METACLASS_$_FlutterViewController
00000000022b91c0 (__TEXT,__const) external _kDartSnapshotData
0000000001eb0440 (__TEXT,__text) external _kDartSnapshotText
0000000002dd0e40 (__TEXT,__const) external _kPlatformStrongDill
00000000037b76a0 (__TEXT,__const) external _kPlatformStrongDillSize
```
## Pre-launch Checklist

- [ ] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [ ] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [ ] 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
cbracken and others added 23 commits August 14, 2026 21:39
`et` performs formatting by diffing the repo file against the output of
the formatter for that file, which it passes to stdin (`-`). This
results in `git diff` outputting the "to" path as `-`. `et` then tries
to rewrite that `-` to the repo path.

For users with certain git settings such as `diff.mnemonicPrefix` or
`diff.noprefix` the diff path prefixes emitted in the two-line ---/+++
file pair will differ from the default `a/` and `b/`, which the existing
`et format` code assumes. The end result is a (silent) failure to
rewrite the "to" path, with the result that when we apply the diff, the
file is rewritten to a file named `-` at the root of the repo.

We now explicitly pass git diff `--src-prefix` and `--dst-prefix` flags,
which override git diff settings such as `diff.mnemonicPrefix`,
`diff.noprefix`, `diff.srcPrefix` and `diff.dstPrefix`.

I've extracted the diff job construction into a method that we reuse
where needed and added some paranoid error checking to ensure we
actually rewrite the path correctly.

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above, or I don't feel like filing one.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…90971)

BoxConstraints.lerp has the signature   

```dart
static BoxConstraints? lerp(BoxConstraints? a, BoxConstraints? b, double t)
```

Overshooting curves, such as `Curves.easeOutBack`, extrapolate t outside
of the range 0.0 to 1.0. Without normalizing, the results can be
invalid, causing crashes.

This PR normalizes the returned `BoxConstraints`.

Fixes [AnimatedContainer throws Exception when animating height with
easeOutBack curve.](flutter#37559)
flutter#191125)

Migrates `verifyTabooDocumentation` from `dev/bots/analyze.dart` to an
AST-based `AnalysisRule` (`TabooDocumentation`) in
`dev/flutter_analyzer_plugin`.

## Changes
- Implements `TabooDocumentation` in
`dev/flutter_analyzer_plugin/lib/src/rules/taboo_documentation.dart`.
- Adds unit tests in
`dev/flutter_analyzer_plugin/test/taboo_documentation_test.dart`.
- Registers `TabooDocumentation` in
`dev/flutter_analyzer_plugin/lib/main.dart`.
- Removes `verifyTabooDocumentation` and `'taboo'` from
`dev/bots/analyze.dart` and `dev/bots/test/analyze_test.dart`.
…1145)

https://skia.googlesource.com/skia.git/+log/e0ecec6708b8..b09fcee5f9a9

2026-08-14
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).
2026-08-14 jmbetancourt@google.com [skcapture] Structure captures to
group draws by recording

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com on the
revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…r#191146)

https://dart.googlesource.com/sdk.git/+log/609ae67507a4..ad45e1b32109

2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com
Version 3.14.0-134.0.dev
2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com
Version 3.14.0-133.0.dev
2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com
Version 3.14.0-132.0.dev
2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com
Version 3.14.0-131.0.dev
2026-08-14 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com
Version 3.14.0-130.0.dev

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/dart-sdk-flutter
Please CC dart-vm-team@google.com,jimgraham@google.com on the revert to
ensure that a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/b09fcee5f9a9..653397c6be15

2026-08-14 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from f98a3773ade5 to b0be4f8861ed (14 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com on the
revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
As of flutter#180531 the Xcode minimum
is Xcode 15. Remove dead code that checked < 15.

## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
LicenseEntryWithLineBreaks recognized CRLF at paragraph boundaries, but
addLine() did not strip the trailing carriage return when collecting
hard-wrapped lines within a paragraph. As a result, CRLF-terminated
license text kept `\r` characters in LicenseParagraph.text and rendered
differently from the equivalent LF text.

Drop a trailing `\r` in addLine() so a CRLF line ending is treated the
same as an LF line ending. Add a test covering reflow and paragraph
splitting with CRLF input.

Fixes flutter#189313

## Local validation

- `flutter test test/foundation/licenses_test.dart` passed.
- `flutter analyze --flutter-repo lib/src/foundation/licenses.dart
test/foundation/licenses_test.dart` passed.
- `git diff --check` passed.

I also ran the full `flutter test` locally. It failed due to unrelated
golden pixel diffs outside this change; the new `licenses_test.dart`
case passed during that run.

## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…ssellation scaling (flutter#191102)

`Tessellator::StrokedCircle` delegated to `GenerateStrokedCircle`
whenever `half_width > 0`, but that generator zig-zags between an inner
and an outer circle and asserts `half_width < radius`, since the inner
radius goes negative once the stroke is at least as wide as the radius.
That case should render as a filled circle whose radius reaches the
outer edge of the stroke.

We were hitting this when enabling construction lines during debugging.
With `debugPaintSizeEnabled` set, `RenderSliver.debugPaint` draws a
circle of radius 2.0 with a stroke width of 4.0, so toggling
construction lines on in unopt builds triggered this `FML_DCHECK`:

```
[FATAL:flutter/impeller/tessellator/tessellator.cc(755)] Check failed: data.half_width > 0 && data.half_width < data.radii.width.
```

`GenerateStrokedArc` had the same issue but didn't assert: the inner
radii went negative and the inner edge folded back through the centre of
the oval, producing a self-intersecting strip. We now clamp to the
centre.

Also fixed a small bug in stroked circle division count scaling.
`Tessellator::StrokedCircle` computes its quadrant divisions based on
the radius. The radius in this case should be the circle radius + the
stroke half-width to get the outer radius of the resulting filled
circle.

The effect would be under-tessellation of the outer edge that gets worse
with increasing half-width. This tosses a pair of brackets on to scale
the whole thing.

Fixes: flutter#190597

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->


## Pre-launch Checklist

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

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

If this change needs to override an active code freeze, provide a
comment explaining why. The code freeze workflow can be overridden by
code reviewers. See pinned issues for any active code freezes with
guidance.

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…... (flutter#191152)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter
Please CC jimgraham@google.com,zra@google.com on the revert to ensure
that a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/653397c6be15..22fdd3bee587

2026-08-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from b0be4f8861ed to 9c1420718b16 (4 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,jmbetancourt@google.com,kjlubick@google.com on the
revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…analyzer_plugin (flutter#191127)

Migrates `verifyIssueLinks` and `verifyRepositoryLinks` from
`dev/bots/analyze.dart` to AST-based `AnalysisRule`s in
`dev/flutter_analyzer_plugin`.

## Changes
- Implements `IssueLinkSyntax` in
`dev/flutter_analyzer_plugin/lib/src/rules/issue_link_syntax.dart`.
- Implements `RepositoryLinkSyntax` in
`dev/flutter_analyzer_plugin/lib/src/rules/repository_link_syntax.dart`.
- Adds unit tests in
`dev/flutter_analyzer_plugin/test/issue_link_syntax_test.dart` and
`dev/flutter_analyzer_plugin/test/repository_link_syntax_test.dart`.
- Registers both rules in `dev/flutter_analyzer_plugin/lib/main.dart`.
- Removes `verifyIssueLinks`, `verifyRepositoryLinks`, `'issue-links'`,
and `'repository-links'` from `dev/bots/analyze.dart` and
`dev/bots/test/analyze_test.dart`.
… runner (flutter#190734)

Part of the tool extensibility prototype effort.

Implements the generic JSON-RPC protocol framing, capability handshake,
and isolate runner infrastructure for Flutter tool extensions:
- `ToolExtensionEntryPoint`, `ToolExtensionService`,
`ToolExtensionRunner` in `package:flutter_tools_extension`.
- Host-side `ExtensionManager` and `ExtensionDiscovery` in
`package:flutter_tools`.

Part of flutter#190746
Part of flutter#190755

## Pre-launch Checklist

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
…dart (flutter#191128)

Removes the legacy `dev/bots/custom_rules/` folder and `private-lints`
validation in `dev/bots/analyze.dart` now that all rules have been
migrated to `dev/flutter_analyzer_plugin`.

## Changes
- Deletes `dev/bots/custom_rules/` directory and all legacy rule
implementations.
- Removes `_verifyPrivateLints` and `'private-lints'` from
`dev/bots/analyze.dart`.
- Removes obsolete tests from `dev/bots/test/analyze_test.dart`.
- Updates documentation reference in
`packages/flutter/lib/src/widgets/framework.dart`.
…le path (flutter#191159)

## Description

This PR optimizes static analysis performance in
`dev/flutter_analyzer_plugin` by early-exiting in
`registerNodeProcessors` based on file path for rules that only target
specific files:
- `IssueLinkSyntax`: Early exits for unit tests (`_test.dart`) and the
rule's definition file (`issue_link_syntax.dart`), removing
`_shouldSkip()` from the visitor.
- `IntegrationTestTimeouts`: Early exits for non-integration-test files
(files not containing `test_driver` or `test.dart`), removing the
redundant per-invocation file path check in `visitMethodInvocation`.
- `NoBadImportsInFlutter`: Early exits for files not in
`packages/flutter/lib/src/`, removing redundant path checks in
`visitImportDirective`.

This avoids unnecessary AST visitor registration and listener callbacks
across non-applicable files in the repository.

Addresses feedback from @srawlins in flutter#191127.

## Related Issues
- Follow-up to flutter#191127

## Tests
- All existing tests in `dev/flutter_analyzer_plugin/test/` continue to
pass.
…... (flutter#191172)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/fuchsia-linux-sdk-flutter
Please CC jimgraham@google.com,zra@google.com on the revert to ensure
that a human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/22fdd3bee587..62fadc19be71

2026-08-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll SKP
CIPD package from 572 to 573

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,kjlubick@google.com,robertphillips@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/62fadc19be71..95a3bf341a38

2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
vulkan-deps from 9c1420718b16 to 8ab3e1d4c253 (1 revision)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,kjlubick@google.com,robertphillips@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
)

https://skia.googlesource.com/skia.git/+log/95a3bf341a38..d40f20074be1

2026-08-17
recipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com
Roll recipe dependencies (trivial).

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,kjlubick@google.com,robertphillips@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…lutter#190624)

Replaces 17 identical occurrences of boilerplate
`BuildSwiftPackageUtils` dependency injection constructor blocks with a
single file-local factory helper.

* Adds top-level private `_createTestUtils` helper using named required
parameters to match suite idioms.
* Removes over 140 lines of duplicate test setup code while maintaining
100% test behavior parity.

## Pre-launch Checklist

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
)

https://skia.googlesource.com/skia.git/+log/d40f20074be1..88b2a86a3eeb

2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll
debugger-app-base from 9c5025e806af to 908aa7ccc3a9

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,kjlubick@google.com,robertphillips@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…1195)

https://skia.googlesource.com/skia.git/+log/88b2a86a3eeb..d07795eebb11

2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE
from fff51488e419 to 60ccf9a219bd (7 revisions)
2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Skia
Infra from ba16fbcff21e to 57107b5a16cb (10 revisions)
2026-08-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn
from 086c465ef70e to a8db5510cc0e (14 revisions)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/skia-flutter-autoroll
Please CC
jimgraham@google.com,kjlubick@google.com,robertphillips@google.com on
the revert to ensure that a human
is aware of the problem.

To file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry
To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…gh the new DSL

Phase P2 of the AGP public-API migration (flutter#180137,
flutter#166550):

- buildModeFor gains a (buildTypeName, isDebuggable) core overload and a
  new-DSL BuildType overload. Application and dynamic-feature build
  types use their public isDebuggable flag; library build types have no
  public debuggable signal at DSL scope, so the conventional "debug"
  name is used for them. The legacy com.android.builder.model.BuildType
  overload remains for the variant-scope call sites that migrate in
  later phases.
- addFlutterDependencies (engine/embedding deps) now takes a new-DSL
  BuildType, and FlutterPlugin registers it via the wrapper's buildTypes
  container instead of the legacy BaseExtension.
- PluginHandler's three dependency-wiring loops (per-build-type Api
  wiring, embedding deps, plugin-to-plugin deps) iterate the wrapper
  container. The build-type copy block still uses the legacy container
  and internal.dsl.BuildType; that is phase P3.
- build.gradle.kts accepts -PagpVersion= so CI can compile and test the
  plugin against the AGP 9 line in addition to the default (the public
  DSL is not binary-compatible between AGP 8 and 9 everywhere), and a
  new validateNoCommonExtensionInBytecode task fails the build if any
  compiled main class references CommonExtension (the known-broken
  type that AgpCommonExtensionWrapper exists to avoid).
- android_run_flutter_gradle_plugin_tests_test.dart gains a second test
  running the suite with -PagpVersion=<templateAndroidGradlePluginVersion>.
- PluginHandlerTest no longer depends on exhausted-iterator mock
  behavior; the wrapper container returns a fresh iterator per call.

Verification note: FGP unit tests could not be executed in this sandbox
(network policy blocks dl.google.com); run 'gradle test' and
'gradle -PagpVersion=9.1.0 test' in packages/flutter_tools/gradle in CI.

Revert-safe until P3 lands.
# Conflicts:
#	packages/flutter_tools/gradle/build.gradle.kts
@reidbaker-agent

Copy link
Copy Markdown
Owner Author

okorohelijah pushed a commit to okorohelijah/flutter that referenced this pull request Aug 17, 2026
…90957)

This is PR 2 of 11 in the AGP 9.1.0 / public `gradle-api`/ newdls
migration stack.

This PR extracts some common utilities used in the Flutter Gradle Plugin
to internal functions, to be used in upcoming PRs in this stack. It also
introduces a typesafe CompileSdkVersion that handles comparisons between
api versions and preview versions which are strings.

First attempt was here flutter#190949
this pr includes my feedback from that first review. The first attempt
did not follow the pattern of having the agent account open the pr
because of rebase shenanigans that ended up touching freeze.yml.

---
Standard review context for this pr stack

This is PR is part of an 11 pr stack to migrate the "newdsl"
`gradle-api` specifically in agp 9.1.0.
The complete stack has pass pre submits, post submits and customer
tests.
https://flutter-dashboard.appspot.com/#/build?repo=flutter&branch=experimental/agp-gradle-api

All of the code was LLM authored. A mix of manual prompting, automatic
prompting, several models and adversarial review. The combined sessions
are enough that I cannot include relevant prompts like I have been doing
on other prs.

If you want to review the pr stack you can find it here. These prs will
be abandoned/closed as prs land into flutter/flutter.
1. reidbaker-agent#1 (branch:
agp-api-doc)
2. reidbaker-agent#2 (branch:
agp-internal-utils)
3. reidbaker-agent#3 (branch:
agp-buildmode-deps)
4. reidbaker-agent#4 (branch:
agp-plugin-buildtypes)
5. reidbaker-agent#5 (branch:
agp-ndk-fallback)
6. reidbaker-agent#6 (branch:
agp-assets-onvariants)
7. reidbaker-agent#7 (branch:
agp-apk-copy-versioncode)
8. reidbaker-agent#8 (branch:
agp-add-to-app)
9. reidbaker-agent#9 (branch:
agp-aar-script)
10. reidbaker-agent#10 (branch:
agp-newdsl-flip)
11. reidbaker-agent#11 (branch:
agp-gradle-api)

This work is urgent in the sense that we are worried that android will
publish agp 10 with no opt out but not so urgent that we are willing to
break flutter users because we didn't review or understand the code
because we were in a rush.

Breaking changes are expected as part of this work. There are patterns
the android team explicitly does not want apps to use and apis that have
no equivalent.

As part of the effort to ensure this work does not slip into ai slop,
prs from this stack will be reviewed by me (@reidbaker) before asking
for review. Then we will have 2 android expert reviewers also review the
every pr.

--- 
Agent authored description. 
This is PR 2 of 11 in the AGP 9.1.0 / public `gradle-api` migration
stack.

This PR extracts some common utilities used in the Flutter Gradle Plugin
to internal functions, to be used in upcoming PRs in this stack.

## Pre-launch Checklist

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

---------

Co-authored-by: reidbaker-agent <reidbaker@google.com>
Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.