[M] Change in dart/sdk[main]: [analyzer_plugin] Fixes writing recursive type parameter

0 views
Skip to first unread message

Felipe Morschel (Gerrit)

unread,
Dec 19, 2025, 10:49:08 AM (2 days ago) Dec 19
to dart-analys...@google.com, rev...@dartlang.org

Felipe Morschel has uploaded the change for review

Commit message

[analyzer_plugin] Fixes writing recursive type parameter
Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329

Change information

Files:
  • M pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
  • M pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
Change size: M
Delta: 2 files changed, 51 insertions(+), 19 deletions(-)
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: newchange
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 1
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
unsatisfied_requirement
open
diffy

Samuel Rawlins (Gerrit)

unread,
Dec 19, 2025, 11:01:47 AM (2 days ago) Dec 19
to Felipe Morschel, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Brian Wilkerson and Felipe Morschel

Samuel Rawlins voted and added 1 comment

Votes added by Samuel Rawlins

Code-Review+1

1 comment

Patchset-level comments
File-level comment, Patchset 1:
Samuel Rawlins . resolved

Thanks!

Open in Gerrit

Related details

Attention is currently required from:
  • Brian Wilkerson
  • Felipe Morschel
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 2
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-Attention: Brian Wilkerson <brianwi...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Comment-Date: Fri, 19 Dec 2025 16:01:44 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Samuel Rawlins (Gerrit)

unread,
Dec 19, 2025, 12:04:24 PM (2 days ago) Dec 19
to Felipe Morschel, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Brian Wilkerson and Felipe Morschel

Samuel Rawlins voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Brian Wilkerson
  • Felipe Morschel
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 3
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-Attention: Brian Wilkerson <brianwi...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Comment-Date: Fri, 19 Dec 2025 17:04:21 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Brian Wilkerson (Gerrit)

unread,
Dec 19, 2025, 12:34:13 PM (2 days ago) Dec 19
to Felipe Morschel, Samuel Rawlins, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Felipe Morschel and Samuel Rawlins

Brian Wilkerson added 4 comments

File pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
Line 482, Patchset 3 (Latest): @soloTest
Brian Wilkerson . unresolved

You'll need to remove this.

File pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
Line 1119, Patchset 2: var typeParameters = {
Brian Wilkerson . unresolved

It would be good to document the reason for this code because it isn't obvious, IMO.

I think the idea is that if we ever run into a type argument that's a type parameter, we add it to the list of known type parameters so that if we encounter it again we'll stop recursing.

Let me know if I'm wrong.

If so, it feels imprecise and confusing to pretend that a type parameter in an argument list is in scope when it isn't actually in scope. This feels like brittle code, but I can't construct a counter example, so I can't prove that it won't work in all cases.

(The more common solution, at least in our code bases, would be to keep a second list containing all of the types we've looked at to get to the current `type`, and use that to detect when we've recursed. I don't know whether that's necessary here, but it seems easier to reason about that approach.)

Line 1648, Patchset 2: if (argument.element == element) {
Brian Wilkerson . unresolved

Similarly this code could use a comment.

In this case I'm less convinced that it's a valid approach. It catches the case where the bound of a type parameter is the same as the type we're trying to write, but if the circularity is indirect rather than direct, then I think this code will miss it. For example
```dart
class A<S extends B<S>> {}
class B<T extends A<T>> {}
```
(although I suspect that that won't actually exhibit the bug I think I'm seeing, it's just to try to make my comments more concrete).

I'm not sure how to prevent recursion in this case, but the first thing that comes to mind is to keep a stack of the type parameters whose bound we have had to use so that if we ever need to get the bound of a type parameter we can check to see whether we've already done so and at that point we can abort. (Though I suspect that the right place to recover from the recursion is at the point where we're writing out the bound the first time, so the method that finds circularities probably needs to be outside the methods that actually write the type.)

Please let me know if this actually is guaranteed to catch all forms of recursion.

File pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
Line 473, Patchset 3 (Latest): int offset = 0,
Brian Wilkerson . unresolved

I took me a minute to understand why we need this.

But given that we do, it seems like either (a) this should be required so that all clients are forced to pass the right offset, or (b) we should remove this API and force clients to specify the offset via `addInsertion` or `addReplacement`.

I think I'd prefer the latter, even though I know that removing the API is a breaking change (which means deprecating it first and then removing it later), but I haven't looked into the implications of doing so.

Open in Gerrit

Related details

Attention is currently required from:
  • Felipe Morschel
  • Samuel Rawlins
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 3
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Attention: Samuel Rawlins <sraw...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 17:34:09 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Felipe Morschel (Gerrit)

unread,
Dec 19, 2025, 1:02:39 PM (2 days ago) Dec 19
to Erik Ernst, Samuel Rawlins, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Brian Wilkerson, Erik Ernst and Samuel Rawlins

Felipe Morschel voted and added 4 comments

Votes added by Felipe Morschel

Auto-Submit+1

4 comments

File pkg/analysis_server/test/src/services/correction/fix/add_type_annotation_test.dart
Brian Wilkerson . resolved

You'll need to remove this.

Felipe Morschel

Thanks for cathing it!

File pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
Line 1119, Patchset 2: var typeParameters = {
Brian Wilkerson . unresolved

It would be good to document the reason for this code because it isn't obvious, IMO.

I think the idea is that if we ever run into a type argument that's a type parameter, we add it to the list of known type parameters so that if we encounter it again we'll stop recursing.

Let me know if I'm wrong.

If so, it feels imprecise and confusing to pretend that a type parameter in an argument list is in scope when it isn't actually in scope. This feels like brittle code, but I can't construct a counter example, so I can't prove that it won't work in all cases.

(The more common solution, at least in our code bases, would be to keep a second list containing all of the types we've looked at to get to the current `type`, and use that to detect when we've recursed. I don't know whether that's necessary here, but it seems easier to reason about that approach.)

Felipe Morschel

I think the idea is that if we ever run into a type argument that's a type parameter, we add it to the list of known type parameters so that if we encounter it again we'll stop recursing.

Yes, we already did that for `FunctionType`s but not for `InterfaceType`s so I'm doing the same here.

The more common solution...

I saw that somewhere and I thought about doing this but it felt a little too inconsistent given we did the same above. I'm open to do that if you prefer though.

I can't construct a counter example, so I can't prove that it won't work in all cases.

Since I asked for your help at the other comment, could you please take a look at this too @eer...@google.com? Thanks!

Line 1648, Patchset 2: if (argument.element == element) {
Brian Wilkerson . unresolved

Similarly this code could use a comment.

In this case I'm less convinced that it's a valid approach. It catches the case where the bound of a type parameter is the same as the type we're trying to write, but if the circularity is indirect rather than direct, then I think this code will miss it. For example
```dart
class A<S extends B<S>> {}
class B<T extends A<T>> {}
```
(although I suspect that that won't actually exhibit the bug I think I'm seeing, it's just to try to make my comments more concrete).

I'm not sure how to prevent recursion in this case, but the first thing that comes to mind is to keep a stack of the type parameters whose bound we have had to use so that if we ever need to get the bound of a type parameter we can check to see whether we've already done so and at that point we can abort. (Though I suspect that the right place to recover from the recursion is at the point where we're writing out the bound the first time, so the method that finds circularities probably needs to be outside the methods that actually write the type.)

Please let me know if this actually is guaranteed to catch all forms of recursion.

Felipe Morschel

I tried thinking of ways to represent that too but for your example, we get `type_argument_not_matching_bounds` because we need to represent that `S extends A` too and `T extends B` too but we currently can't do that.

So if we could come up with a test case for this I would definitely feel more comfortable writing a more complex approach here.

Maybe @eer...@google.com can think of something?

File pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
Brian Wilkerson . resolved

I took me a minute to understand why we need this.

But given that we do, it seems like either (a) this should be required so that all clients are forced to pass the right offset, or (b) we should remove this API and force clients to specify the offset via `addInsertion` or `addReplacement`.

I think I'd prefer the latter, even though I know that removing the API is a breaking change (which means deprecating it first and then removing it later), but I haven't looked into the implications of doing so.

Felipe Morschel

Yeah, I wasn't sure if you'd prefer to keep this or to deprecate it, so I vouched for the less breaking version.
I'm fine with deprecating it.

Open in Gerrit

Related details

Attention is currently required from:
  • Brian Wilkerson
  • Erik Ernst
  • Samuel Rawlins
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 3
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Brian Wilkerson <brianwi...@google.com>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Attention: Samuel Rawlins <sraw...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 18:02:36 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Comment-In-Reply-To: Brian Wilkerson <brianwi...@google.com>
satisfied_requirement
unsatisfied_requirement
open
diffy

Brian Wilkerson (Gerrit)

unread,
Dec 19, 2025, 1:19:11 PM (2 days ago) Dec 19
to Felipe Morschel, Erik Ernst, Samuel Rawlins, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Erik Ernst, Felipe Morschel and Samuel Rawlins

Brian Wilkerson added 2 comments

File pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
Line 1648, Patchset 2: if (argument.element == element) {
Brian Wilkerson . unresolved

Similarly this code could use a comment.

In this case I'm less convinced that it's a valid approach. It catches the case where the bound of a type parameter is the same as the type we're trying to write, but if the circularity is indirect rather than direct, then I think this code will miss it. For example
```dart
class A<S extends B<S>> {}
class B<T extends A<T>> {}
```
(although I suspect that that won't actually exhibit the bug I think I'm seeing, it's just to try to make my comments more concrete).

I'm not sure how to prevent recursion in this case, but the first thing that comes to mind is to keep a stack of the type parameters whose bound we have had to use so that if we ever need to get the bound of a type parameter we can check to see whether we've already done so and at that point we can abort. (Though I suspect that the right place to recover from the recursion is at the point where we're writing out the bound the first time, so the method that finds circularities probably needs to be outside the methods that actually write the type.)

Please let me know if this actually is guaranteed to catch all forms of recursion.

Felipe Morschel

I tried thinking of ways to represent that too but for your example, we get `type_argument_not_matching_bounds` because we need to represent that `S extends A` too and `T extends B` too but we currently can't do that.

So if we could come up with a test case for this I would definitely feel more comfortable writing a more complex approach here.

Maybe @eer...@google.com can think of something?

Brian Wilkerson

I'm aware that it's invalid code, but our tools have to work with invalid code all the time (otherwise they can get stuck in infinite loops 😊), so the fact that there are errors in the code doesn't necessarily mean that it's a bad test case.

File pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
Line 473, Patchset 3: int offset = 0,
Brian Wilkerson . resolved

I took me a minute to understand why we need this.

But given that we do, it seems like either (a) this should be required so that all clients are forced to pass the right offset, or (b) we should remove this API and force clients to specify the offset via `addInsertion` or `addReplacement`.

I think I'd prefer the latter, even though I know that removing the API is a breaking change (which means deprecating it first and then removing it later), but I haven't looked into the implications of doing so.

Felipe Morschel

Yeah, I wasn't sure if you'd prefer to keep this or to deprecate it, so I vouched for the less breaking version.
I'm fine with deprecating it.

Brian Wilkerson

I looked into it a little more. We're using it in 7 places, and in all of those we're using it to decide whether to add an edit (insertion or replacement).

IIRC, calling `addInsertion` or `addReplacement` and then not providing any text will still create an edit, and in the case of `addReplacement` it will effectively be a deletion.

Given that, I'm now convinced that we really do need this method. I'd still prefer that we require an offset because I believe that doing so will help prevent bugs.

Open in Gerrit

Related details

Attention is currently required from:
  • Erik Ernst
  • Felipe Morschel
  • Samuel Rawlins
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 4
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Attention: Samuel Rawlins <sraw...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 18:19:09 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Brian Wilkerson <brianwi...@google.com>
Comment-In-Reply-To: Felipe Morschel <g...@fmorschel.dev>
unsatisfied_requirement
open
diffy

Samuel Rawlins (Gerrit)

unread,
Dec 19, 2025, 2:25:34 PM (2 days ago) Dec 19
to Felipe Morschel, Erik Ernst, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Erik Ernst and Felipe Morschel

Samuel Rawlins voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Erik Ernst
  • Felipe Morschel
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 4
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Comment-Date: Fri, 19 Dec 2025 19:25:32 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Samuel Rawlins (Gerrit)

unread,
Dec 20, 2025, 11:24:45 AM (yesterday) Dec 20
to Felipe Morschel, Erik Ernst, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Brian Wilkerson, Erik Ernst and Felipe Morschel

Samuel Rawlins voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Brian Wilkerson
  • Erik Ernst
  • Felipe Morschel
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 5
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Brian Wilkerson <brianwi...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Comment-Date: Sat, 20 Dec 2025 16:24:42 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Felipe Morschel (Gerrit)

unread,
Dec 20, 2025, 12:14:45 PM (yesterday) Dec 20
to Samuel Rawlins, Erik Ernst, Commit Queue, Brian Wilkerson, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Brian Wilkerson, Erik Ernst and Samuel Rawlins

Felipe Morschel voted and added 1 comment

Votes added by Felipe Morschel

Auto-Submit+1

1 comment

Patchset-level comments
File-level comment, Patchset 6 (Latest):
Felipe Morschel . resolved

Thanks for the bots, @sraw...@google.com! I've fixes the problem and ran all DAS and analyzer_plugin tests locally. Everything seems to be working fine now.

Open in Gerrit

Related details

Attention is currently required from:
  • Brian Wilkerson
  • Erik Ernst
  • Samuel Rawlins
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 6
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Brian Wilkerson <brianwi...@google.com>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Attention: Samuel Rawlins <sraw...@google.com>
Gerrit-Comment-Date: Sat, 20 Dec 2025 17:14:42 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
unsatisfied_requirement
open
diffy

Brian Wilkerson (Gerrit)

unread,
Dec 20, 2025, 12:37:04 PM (yesterday) Dec 20
to Felipe Morschel, Brian Wilkerson, Samuel Rawlins, Erik Ernst, Commit Queue, dart-analys...@google.com, rev...@dartlang.org
Attention needed from Erik Ernst, Felipe Morschel and Samuel Rawlins

Brian Wilkerson voted

Code-Review+1
Commit-Queue+1
Open in Gerrit

Related details

Attention is currently required from:
  • Erik Ernst
  • Felipe Morschel
  • Samuel Rawlins
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I2370adbf51b709e8860fcc12b6678cde504f1329
Gerrit-Change-Number: 469201
Gerrit-PatchSet: 6
Gerrit-Owner: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Brian Wilkerson <brianwi...@google.com>
Gerrit-Reviewer: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Reviewer: Samuel Rawlins <sraw...@google.com>
Gerrit-CC: Erik Ernst <eer...@google.com>
Gerrit-Attention: Felipe Morschel <g...@fmorschel.dev>
Gerrit-Attention: Erik Ernst <eer...@google.com>
Gerrit-Attention: Samuel Rawlins <sraw...@google.com>
Gerrit-Comment-Date: Sat, 20 Dec 2025 17:37:01 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy
Reply all
Reply to author
Forward
0 new messages