Version 2.18.0-237.0.dev

Merge commit '414d5d3836fcc8b6c63d36ad5d6b9d0930688a65' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index 7b208f1..347694c 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -197,9 +197,6 @@
   /// Applies [patch] to this declaration.
   void applyPatch(Builder patch);
 
-  /// Returns the number of patches that was finished.
-  int finishPatch();
-
   /// Return `true` if this builder is a duplicate of another with the same
   /// name. This is `false` for the builder first declared amongst duplicates.
   bool get isDuplicate;
@@ -295,11 +292,5 @@
   }
 
   @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-    unsupported("${runtimeType}.finishPatch", charOffset, fileUri);
-  }
-
-  @override
   bool get isDuplicate => next != null;
 }
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index be3c4cf..c0848ae 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1996,7 +1996,7 @@
         }
       }
 
-      debugLibrary.build(lastGoodKernelTarget.loader.coreLibrary,
+      debugLibrary.buildOutlineNodes(lastGoodKernelTarget.loader.coreLibrary,
           modifyTarget: false);
       Expression compiledExpression = await lastGoodKernelTarget.loader
           .buildExpression(
diff --git a/pkg/front_end/lib/src/fasta/kernel/augmentation_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/augmentation_lowering.dart
new file mode 100644
index 0000000..67ba682
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/kernel/augmentation_lowering.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:kernel/ast.dart';
+
+const String _augmentedNamePrefix = '_#';
+const String _augmentedNameSuffix = '#augment';
+
+/// Creates the synthesized name to use for the [index]th augmented member by
+/// the given [name] in [library].
+Name augmentedName(String name, Library library, int index) {
+  return new Name(
+      '$_augmentedNamePrefix'
+      '${name.isEmpty ? 'new' : name}'
+      '$_augmentedNameSuffix'
+      '$index',
+      library);
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 53d9f3d..0139e82 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -538,7 +538,7 @@
     if (copyLocation) {
       fileUri = member.fileUri;
       startFileOffset =
-          member is Procedure ? member.startFileOffset : member.fileOffset;
+          member is Procedure ? member.fileStartOffset : member.fileOffset;
       fileOffset = member.fileOffset;
     } else {
       fileUri = enclosingClass.fileUri;
@@ -555,7 +555,7 @@
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: member.memberSignatureOrigin ?? member,
     )
-      ..startFileOffset = startFileOffset
+      ..fileStartOffset = startFileOffset
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = containsNnbdTypes
       ..parent = enclosingClass;
@@ -585,7 +585,7 @@
     if (copyLocation) {
       fileUri = member.fileUri;
       startFileOffset =
-          member is Procedure ? member.startFileOffset : member.fileOffset;
+          member is Procedure ? member.fileStartOffset : member.fileOffset;
       fileOffset = member.fileOffset;
     } else {
       fileUri = enclosingClass.fileUri;
@@ -611,7 +611,7 @@
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: member.memberSignatureOrigin ?? member,
     )
-      ..startFileOffset = startFileOffset
+      ..fileStartOffset = startFileOffset
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = containsNnbdTypes
       ..parent = enclosingClass;
@@ -630,7 +630,7 @@
     int fileOffset;
     if (copyLocation) {
       fileUri = procedure.fileUri;
-      startFileOffset = procedure.startFileOffset;
+      startFileOffset = procedure.fileStartOffset;
       fileOffset = procedure.fileOffset;
     } else {
       fileUri = enclosingClass.fileUri;
@@ -690,7 +690,7 @@
       stubKind: ProcedureStubKind.MemberSignature,
       stubTarget: procedure.memberSignatureOrigin ?? procedure,
     )
-      ..startFileOffset = startFileOffset
+      ..fileStartOffset = startFileOffset
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = containsNnbdTypes
       ..parent = enclosingClass;
diff --git a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
index 77159ce..1e6ea3e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constructor_tearoff_lowering.dart
@@ -295,7 +295,7 @@
 /// The [declarationConstructor] is the [Procedure] for the origin constructor
 /// and [implementationConstructorFunctionNode] is the [FunctionNode] for the
 /// implementation constructor. If the constructor is patched, these are not
-/// connected until [Builder.finishPatch].
+/// connected until [Builder.buildBodyNodes].
 FreshTypeParameters buildRedirectingFactoryTearOffProcedureParameters(
     {required Procedure tearOff,
     required Procedure implementationConstructor,
@@ -370,7 +370,7 @@
     Name name, Uri fileUri, int fileOffset, Reference? reference) {
   return new Procedure(name, ProcedureKind.Method, new FunctionNode(null),
       fileUri: fileUri, isStatic: true, isSynthetic: true, reference: reference)
-    ..startFileOffset = fileOffset
+    ..fileStartOffset = fileOffset
     ..fileOffset = fileOffset
     ..fileEndOffset = fileOffset
     ..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
index ffbbab7..f5ad8bd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_helper.dart
@@ -325,7 +325,7 @@
   // TODO(ahe): restore file-offset once we track both origin and patch file
   // URIs. See https://github.com/dart-lang/sdk/issues/31579
   origin.fileUri = patch.fileUri;
-  origin.startFileOffset = patch.startFileOffset;
+  origin.fileStartOffset = patch.fileStartOffset;
   origin.fileOffset = patch.fileOffset;
   origin.fileEndOffset = patch.fileEndOffset;
   origin.annotations.forEach((m) => m.fileOffset = patch.fileOffset);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 101ed7f..6986604 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -400,7 +400,8 @@
     loader.finishTypeVariables(
         augmentationLibraries, objectClassBuilder, dynamicType);
     for (SourceLibraryBuilder augmentationLibrary in augmentationLibraries) {
-      augmentationLibrary.build(loader.coreLibrary, modifyTarget: false);
+      augmentationLibrary.buildOutlineNodes(loader.coreLibrary,
+          modifyTarget: false);
     }
     loader.resolveConstructors(augmentationLibraries);
   }
@@ -471,7 +472,7 @@
       loader.createTypeInferenceEngine();
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_buildComponent);
-      loader.buildComponent();
+      loader.buildOutlineNodes();
 
       benchmarker?.enterPhase(BenchmarkPhases.outline_installDefaultSupertypes);
       installDefaultSupertypes();
@@ -637,7 +638,7 @@
       loader.finishNativeMethods();
 
       benchmarker?.enterPhase(BenchmarkPhases.body_finishPatchMethods);
-      loader.finishPatchMethods();
+      loader.buildBodyNodes();
 
       benchmarker?.enterPhase(BenchmarkPhases.body_finishAllConstructors);
       finishAllConstructors(sourceClasses);
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 7199ba7..dfe1513 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -64,7 +64,7 @@
         fileUri: parent.library.fileUri,
         isStatic: true,
         reference: reference)
-      ..startFileOffset = charOffset
+      ..fileStartOffset = charOffset
       ..fileOffset = charOffset
       ..isNonNullableByDefault = parent.isNonNullableByDefault;
   }
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index f78f458..187af99 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -823,8 +823,14 @@
   }
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
-    assert(false, "Unexpected call to $runtimeType.buildMembers.");
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
+    assert(false, "Unexpected call to $runtimeType.buildOutlineNodes.");
+  }
+
+  @override
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
+    assert(false, "Unexpected call to $runtimeType.buildBodyNodes.");
+    return 0;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index d5bf381..593d7b2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -182,7 +182,7 @@
         } else if (declaration is SourceMemberBuilder) {
           SourceMemberBuilder memberBuilder = declaration;
           memberBuilder
-              .buildMembers((Member member, BuiltMemberKind memberKind) {
+              .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
             member.parent = cls;
             if (!memberBuilder.isPatch &&
                 !memberBuilder.isDuplicate &&
@@ -1390,24 +1390,57 @@
     }
   }
 
-  @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-
+  int buildBodyNodes() {
     // TODO(ahe): restore file-offset once we track both origin and patch file
     // URIs. See https://github.com/dart-lang/sdk/issues/31579
-    cls.annotations.forEach((m) => m.fileOffset = origin.cls.fileOffset);
+    if (isPatch) {
+      cls.annotations.forEach((m) => m.fileOffset = origin.cls.fileOffset);
+    }
 
     int count = 0;
-    scope.forEach((String name, Builder declaration) {
-      count += declaration.finishPatch();
-    });
-    constructorScope.forEach((String name, Builder declaration) {
-      count += declaration.finishPatch();
-    });
+
+    void buildMembers(String name, Builder builder) {
+      if (builder.parent != this) {
+        return;
+      }
+      Builder? current = builder;
+      while (current != null) {
+        if (current is SourceMemberBuilder) {
+          count +=
+              current.buildBodyNodes((Member member, BuiltMemberKind kind) {
+            _buildMember(current as SourceMemberBuilder, member, kind);
+          });
+        }
+        current = current.next;
+      }
+    }
+
+    scope.forEach(buildMembers);
+    constructorScope.forEach(buildMembers);
     return count;
   }
 
+  void _buildMember(SourceMemberBuilder memberBuilder, Member member,
+      BuiltMemberKind memberKind) {
+    member.parent = cls;
+    if (!memberBuilder.isDuplicate &&
+        !memberBuilder.isConflictingSetter &&
+        !memberBuilder.isConflictingAugmentationMember) {
+      if (member is Procedure) {
+        cls.addProcedure(member);
+      } else if (member is Field) {
+        cls.addField(member);
+      } else if (member is Constructor) {
+        cls.addConstructor(member);
+      } else if (member is RedirectingFactory) {
+        cls.addRedirectingFactory(member);
+      } else {
+        unhandled("${member.runtimeType}", "getMember", member.fileOffset,
+            member.fileUri);
+      }
+    }
+  }
+
   /// Return a map whose keys are the supertypes of this [SourceClassBuilder]
   /// after expansion of type aliases, if any. For each supertype key, the
   /// corresponding value is the type alias which was unaliased in order to
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 148e2b6..be790e8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -199,7 +199,7 @@
   }
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     _build();
     f(_constructor, BuiltMemberKind.Constructor);
     if (_constructorTearOff != null) {
@@ -708,7 +708,7 @@
   }
 
   @override
-  int finishPatch() {
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
     if (!isPatch) return 0;
     _finishPatch();
     return 1;
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 578747e..874a967 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -101,6 +101,7 @@
 
     ClassBuilder objectClassBuilder =
         coreLibrary.lookupLocalMember('Object', required: true) as ClassBuilder;
+
     void buildBuilders(String name, Builder? declaration) {
       while (declaration != null) {
         Builder? objectGetter = objectClassBuilder.lookupLocalMember(name);
@@ -125,64 +126,9 @@
         } else if (declaration is SourceMemberBuilder) {
           SourceMemberBuilder memberBuilder = declaration;
           memberBuilder
-              .buildMembers((Member member, BuiltMemberKind memberKind) {
-            if (addMembersToLibrary &&
-                !memberBuilder.isPatch &&
-                !memberBuilder.isDuplicate &&
-                !memberBuilder.isConflictingSetter) {
-              ExtensionMemberKind kind;
-              String name = memberBuilder.name;
-              switch (memberKind) {
-                case BuiltMemberKind.Constructor:
-                case BuiltMemberKind.RedirectingFactory:
-                case BuiltMemberKind.Field:
-                case BuiltMemberKind.Method:
-                  unhandled(
-                      "${member.runtimeType}:${memberKind}",
-                      "buildMembers",
-                      memberBuilder.charOffset,
-                      memberBuilder.fileUri);
-                case BuiltMemberKind.ExtensionField:
-                case BuiltMemberKind.LateIsSetField:
-                  kind = ExtensionMemberKind.Field;
-                  break;
-                case BuiltMemberKind.ExtensionMethod:
-                  kind = ExtensionMemberKind.Method;
-                  break;
-                case BuiltMemberKind.ExtensionGetter:
-                case BuiltMemberKind.LateGetter:
-                  kind = ExtensionMemberKind.Getter;
-                  break;
-                case BuiltMemberKind.ExtensionSetter:
-                case BuiltMemberKind.LateSetter:
-                  kind = ExtensionMemberKind.Setter;
-                  break;
-                case BuiltMemberKind.ExtensionOperator:
-                  kind = ExtensionMemberKind.Operator;
-                  break;
-                case BuiltMemberKind.ExtensionTearOff:
-                  kind = ExtensionMemberKind.TearOff;
-                  break;
-              }
-              // ignore: unnecessary_null_comparison
-              assert(kind != null);
-              Reference memberReference;
-              if (member is Field) {
-                libraryBuilder.library.addField(member);
-                memberReference = member.fieldReference;
-              } else if (member is Procedure) {
-                libraryBuilder.library.addProcedure(member);
-                memberReference = member.reference;
-              } else {
-                unhandled("${member.runtimeType}", "buildBuilders",
-                    member.fileOffset, member.fileUri);
-              }
-              extension.members.add(new ExtensionMemberDescriptor(
-                  name: new Name(name, libraryBuilder.library),
-                  member: memberReference,
-                  isStatic: memberBuilder.isStatic,
-                  kind: kind));
-            }
+              .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
+            _buildMember(memberBuilder, member, memberKind,
+                addMembersToLibrary: addMembersToLibrary);
           });
         } else {
           unhandled("${declaration.runtimeType}", "buildBuilders",
@@ -197,6 +143,65 @@
     return _extension;
   }
 
+  void _buildMember(SourceMemberBuilder memberBuilder, Member member,
+      BuiltMemberKind memberKind,
+      {required bool addMembersToLibrary}) {
+    if (addMembersToLibrary &&
+        !memberBuilder.isPatch &&
+        !memberBuilder.isDuplicate &&
+        !memberBuilder.isConflictingSetter) {
+      ExtensionMemberKind kind;
+      String name = memberBuilder.name;
+      switch (memberKind) {
+        case BuiltMemberKind.Constructor:
+        case BuiltMemberKind.RedirectingFactory:
+        case BuiltMemberKind.Field:
+        case BuiltMemberKind.Method:
+          unhandled("${member.runtimeType}:${memberKind}", "buildMembers",
+              memberBuilder.charOffset, memberBuilder.fileUri);
+        case BuiltMemberKind.ExtensionField:
+        case BuiltMemberKind.LateIsSetField:
+          kind = ExtensionMemberKind.Field;
+          break;
+        case BuiltMemberKind.ExtensionMethod:
+          kind = ExtensionMemberKind.Method;
+          break;
+        case BuiltMemberKind.ExtensionGetter:
+        case BuiltMemberKind.LateGetter:
+          kind = ExtensionMemberKind.Getter;
+          break;
+        case BuiltMemberKind.ExtensionSetter:
+        case BuiltMemberKind.LateSetter:
+          kind = ExtensionMemberKind.Setter;
+          break;
+        case BuiltMemberKind.ExtensionOperator:
+          kind = ExtensionMemberKind.Operator;
+          break;
+        case BuiltMemberKind.ExtensionTearOff:
+          kind = ExtensionMemberKind.TearOff;
+          break;
+      }
+      // ignore: unnecessary_null_comparison
+      assert(kind != null);
+      Reference memberReference;
+      if (member is Field) {
+        libraryBuilder.library.addField(member);
+        memberReference = member.fieldReference;
+      } else if (member is Procedure) {
+        libraryBuilder.library.addProcedure(member);
+        memberReference = member.reference;
+      } else {
+        unhandled("${member.runtimeType}", "buildBuilders", member.fileOffset,
+            member.fileUri);
+      }
+      extension.members.add(new ExtensionMemberDescriptor(
+          name: new Name(name, libraryBuilder.library),
+          member: memberReference,
+          isStatic: memberBuilder.isStatic,
+          kind: kind));
+    }
+  }
+
   @override
   void applyPatch(Builder patch) {
     if (patch is SourceExtensionBuilder) {
@@ -230,13 +235,19 @@
     }
   }
 
-  @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-
+  int buildBodyNodes({required bool addMembersToLibrary}) {
     int count = 0;
-    scope.forEach((String name, Builder declaration) {
-      count += declaration.finishPatch();
+    scope.forEach((String name, Builder? declaration) {
+      while (declaration != null) {
+        if (declaration is SourceMemberBuilder) {
+          count +=
+              declaration.buildBodyNodes((Member member, BuiltMemberKind kind) {
+            _buildMember(declaration as SourceMemberBuilder, member, kind,
+                addMembersToLibrary: addMembersToLibrary);
+          });
+        }
+        declaration = declaration.next;
+      }
     });
     return count;
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index ec7ffb5..c90fe39 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -75,7 +75,7 @@
             new FunctionNode(null),
             fileUri: libraryBuilder.fileUri,
             reference: procedureReference)
-          ..startFileOffset = startCharOffset
+          ..fileStartOffset = startCharOffset
           ..fileOffset = charOffset
           ..fileEndOffset = charEndOffset
           ..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault,
@@ -132,7 +132,7 @@
   Iterable<Member> get exportedMembers => [_procedure];
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     _build();
     f(_procedureInternal, BuiltMemberKind.Method);
     if (_factoryTearOff != null) {
@@ -236,7 +236,7 @@
   }
 
   @override
-  int finishPatch() {
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
     if (!isPatch) return 0;
     _finishPatch();
     return 1;
@@ -338,7 +338,7 @@
   }
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     _build();
     f(_procedureInternal, BuiltMemberKind.RedirectingFactory);
     if (_factoryTearOff != null) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index b05b07b..1fccff2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -374,7 +374,7 @@
   Iterable<Member> get exportedMembers => _fieldEncoding.exportedMembers;
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     _build();
     _fieldEncoding.registerMembers(libraryBuilder, this, f);
   }
@@ -531,6 +531,11 @@
       SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {
     library.checkTypesInField(this, typeEnvironment);
   }
+
+  @override
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
+    return 0;
+  }
 }
 
 /// Strategy pattern for creating different encodings of a declared field.
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index db9853c..5a845c0e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1038,7 +1038,8 @@
   }
 
   /// Builds the core AST structure of this library as needed for the outline.
-  Library build(LibraryBuilder coreLibrary, {bool modifyTarget: true}) {
+  Library buildOutlineNodes(LibraryBuilder coreLibrary,
+      {bool modifyTarget: true}) {
     // TODO(johnniwinther): Avoid the need to process patch libraries before
     // the origin. Currently, settings performed by the patch are overridden
     // by the origin. For instance, the `Map` class is abstract in the origin
@@ -1048,7 +1049,7 @@
     Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
     if (patches != null) {
       for (SourceLibraryBuilder patchLibrary in patches) {
-        patchLibrary.build(coreLibrary, modifyTarget: modifyTarget);
+        patchLibrary.buildOutlineNodes(coreLibrary, modifyTarget: modifyTarget);
       }
     }
 
@@ -1058,7 +1059,7 @@
 
     Iterator<Builder> iterator = this.iterator;
     while (iterator.moveNext()) {
-      buildBuilder(iterator.current, coreLibrary);
+      _buildOutlineNodes(iterator.current, coreLibrary);
     }
 
     if (!modifyTarget) return library;
@@ -3050,7 +3051,7 @@
   }
 
   /// Builds the core AST structures for [declaration] needed for the outline.
-  void buildBuilder(Builder declaration, LibraryBuilder coreLibrary) {
+  void _buildOutlineNodes(Builder declaration, LibraryBuilder coreLibrary) {
     String findDuplicateSuffix(Builder declaration) {
       if (declaration.next != null) {
         int count = 0;
@@ -3077,35 +3078,15 @@
         library.addExtension(extension);
       }
     } else if (declaration is SourceMemberBuilder) {
-      declaration.buildMembers((Member member, BuiltMemberKind memberKind) {
-        if (member is Field) {
-          member.isStatic = true;
-          if (!declaration.isPatch && !declaration.isDuplicate) {
-            library.addField(member);
-          }
-        } else if (member is Procedure) {
-          member.isStatic = true;
-          if (!declaration.isPatch &&
-              !declaration.isDuplicate &&
-              !declaration.isConflictingSetter) {
-            library.addProcedure(member);
-          }
-        } else {
-          unhandled("${member.runtimeType}:${memberKind}", "buildBuilder",
-              declaration.charOffset, declaration.fileUri);
-        }
+      declaration
+          .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
+        _addMemberToLibrary(declaration, member, memberKind);
       });
     } else if (declaration is SourceTypeAliasBuilder) {
       Typedef typedef = declaration.build();
       if (!declaration.isPatch && !declaration.isDuplicate) {
         library.addTypedef(typedef);
       }
-    } else if (declaration is SourceEnumBuilder) {
-      Class cls = declaration.build(coreLibrary);
-      if (!declaration.isPatch) {
-        cls.name += findDuplicateSuffix(declaration);
-        library.addClass(cls);
-      }
     } else if (declaration is PrefixBuilder) {
       // Ignored. Kernel doesn't represent prefixes.
       return;
@@ -3118,6 +3099,26 @@
     }
   }
 
+  void _addMemberToLibrary(SourceMemberBuilder declaration, Member member,
+      BuiltMemberKind memberKind) {
+    if (member is Field) {
+      member.isStatic = true;
+      if (!declaration.isPatch && !declaration.isDuplicate) {
+        library.addField(member);
+      }
+    } else if (member is Procedure) {
+      member.isStatic = true;
+      if (!declaration.isPatch &&
+          !declaration.isDuplicate &&
+          !declaration.isConflictingSetter) {
+        library.addProcedure(member);
+      }
+    } else {
+      unhandled("${member.runtimeType}:${memberKind}", "_buildMember",
+          declaration.charOffset, declaration.fileUri);
+    }
+  }
+
   void addNativeDependency(String nativeImportPath) {
     MemberBuilder constructor = loader.getNativeAnnotation();
     Arguments arguments =
@@ -3934,20 +3935,43 @@
     }
   }
 
-  int finishPatchMethods() {
+  /// Builds the AST nodes needed for the full compilation.
+  ///
+  /// This includes patching member bodies and adding augmented members.
+  int buildBodyNodes() {
     int count = 0;
 
     Iterable<SourceLibraryBuilder>? patches = this.patchLibraries;
     if (patches != null) {
       for (SourceLibraryBuilder patchLibrary in patches) {
-        count += patchLibrary.finishPatchMethods();
+        count += patchLibrary.buildBodyNodes();
       }
     }
 
-    if (isPatch) {
-      Iterator<Builder> iterator = this.iterator;
-      while (iterator.moveNext()) {
-        count += iterator.current.finishPatch();
+    Iterator<Builder> iterator = this.iterator;
+    while (iterator.moveNext()) {
+      Builder builder = iterator.current;
+      if (builder is SourceMemberBuilder) {
+        count +=
+            builder.buildBodyNodes((Member member, BuiltMemberKind memberKind) {
+          _addMemberToLibrary(builder, member, memberKind);
+        });
+      } else if (builder is SourceClassBuilder) {
+        count += builder.buildBodyNodes();
+      } else if (builder is SourceExtensionBuilder) {
+        count +=
+            builder.buildBodyNodes(addMembersToLibrary: !builder.isDuplicate);
+      } else if (builder is SourceClassBuilder) {
+        count += builder.buildBodyNodes();
+      } else if (builder is SourceTypeAliasBuilder) {
+        // Do nothing.
+      } else if (builder is PrefixBuilder) {
+        // Ignored. Kernel doesn't represent prefixes.
+      } else if (builder is BuiltinTypeDeclarationBuilder) {
+        // Nothing needed.
+      } else {
+        unhandled("${builder.runtimeType}", "buildBodyNodes",
+            builder.charOffset, builder.fileUri);
       }
     }
     return count;
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index d3b47de..6e7c3fe 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1793,10 +1793,10 @@
     ticker.logMs("Finished $count native methods");
   }
 
-  void finishPatchMethods() {
+  void buildBodyNodes() {
     int count = 0;
     for (SourceLibraryBuilder library in sourceLibraryBuilders) {
-      count += library.finishPatchMethods();
+      count += library.buildBodyNodes();
     }
     ticker.logMs("Finished $count patch methods");
   }
@@ -2020,9 +2020,9 @@
   }
 
   /// Builds the core AST structure needed for the outline of the component.
-  void buildComponent() {
+  void buildOutlineNodes() {
     for (SourceLibraryBuilder library in sourceLibraryBuilders) {
-      Library target = library.build(coreLibrary);
+      Library target = library.buildOutlineNodes(coreLibrary);
       if (library.referencesFrom != null) {
         referenceFromIndex ??= new ReferenceFromIndex();
         referenceFromIndex!
diff --git a/pkg/front_end/lib/src/fasta/source/source_member_builder.dart b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
index 429809d..822ea53 100644
--- a/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_member_builder.dart
@@ -29,13 +29,18 @@
   SourceLibraryBuilder get libraryBuilder;
 
   /// Builds the core AST structures for this member as needed for the outline.
-  void buildMembers(void Function(Member, BuiltMemberKind) f);
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f);
 
   void buildOutlineExpressions(
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<DelayedDefaultValueCloner> delayedDefaultValueCloners);
 
+  /// Builds the AST nodes for this member as needed for the full compilation.
+  ///
+  /// This includes adding patched bodies and augmented members.
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f);
+
   /// Checks the variance of type parameters [sourceClassBuilder] used in the
   /// signature of this member.
   void checkVariance(
@@ -60,11 +65,16 @@
       retainDataForTesting ? new MemberDataForTesting() : null;
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     assert(false, "Unexpected call to $runtimeType.buildMembers.");
   }
 
   @override
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
+    return 0;
+  }
+
+  @override
   bool get isAugmentation => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 9588563..e6686bc 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -14,6 +14,7 @@
 import '../builder/procedure_builder.dart';
 import '../builder/type_builder.dart';
 import '../builder/type_variable_builder.dart';
+import '../kernel/augmentation_lowering.dart';
 import '../kernel/hierarchy/class_member.dart';
 import '../kernel/hierarchy/members_builder.dart';
 import '../kernel/kernel_helper.dart';
@@ -96,7 +97,7 @@
         fileUri: libraryBuilder.fileUri,
         reference: procedureReference,
         isSynthetic: isSynthetic)
-      ..startFileOffset = startCharOffset
+      ..fileStartOffset = startCharOffset
       ..fileOffset = charOffset
       ..fileEndOffset = charEndOffset
       ..isNonNullableByDefault = libraryBuilder.isNonNullableByDefault;
@@ -231,7 +232,7 @@
   Iterable<Member> get exportedMembers => [procedure];
 
   @override
-  void buildMembers(void Function(Member, BuiltMemberKind) f) {
+  void buildOutlineNodes(void Function(Member, BuiltMemberKind) f) {
     _build();
     if (isExtensionMethod) {
       switch (kind) {
@@ -467,11 +468,33 @@
   }
 
   @override
-  int finishPatch() {
-    if (!isPatch) return 0;
+  int buildBodyNodes(void Function(Member, BuiltMemberKind) f) {
+    List<SourceProcedureBuilder>? patches = _patches;
+    if (patches != null) {
+      Procedure augmentedProcedure = _procedure;
+      int index = 0;
+      for (SourceProcedureBuilder patch in patches) {
+        if (!augmentedProcedure.isExternal && !augmentedProcedure.isAbstract) {
+          Procedure newProcedure = new Procedure(
+              augmentedName(augmentedProcedure.name.text,
+                  libraryBuilder.library, index++),
+              augmentedProcedure.kind,
+              augmentedProcedure.function,
+              fileUri: augmentedProcedure.fileUri)
+            ..fileOffset = augmentedProcedure.fileOffset
+            ..fileEndOffset = augmentedProcedure.fileEndOffset
+            ..fileStartOffset = augmentedProcedure.fileStartOffset
+            ..signatureType = augmentedProcedure.signatureType
+            ..flags = augmentedProcedure.flags;
+          f(newProcedure, BuiltMemberKind.Method);
+        }
+        augmentedProcedure = patch.actualProcedure;
+      }
+      finishProcedurePatch(procedure, augmentedProcedure);
 
-    finishProcedurePatch(origin.procedure, _procedure);
-    return 1;
+      return patches.length;
+    }
+    return 0;
   }
 
   @override
diff --git a/pkg/front_end/test/incremental_suite.dart b/pkg/front_end/test/incremental_suite.dart
index 78f31b4..da9478c 100644
--- a/pkg/front_end/test/incremental_suite.dart
+++ b/pkg/front_end/test/incremental_suite.dart
@@ -1844,6 +1844,26 @@
   StringBuffer s = new StringBuffer();
   s.write(componentToString(c));
 
+  bool printedConstantCoverageHeader = false;
+  for (Source source in component.uriToSource.values) {
+    if (source.importUri?.scheme == "dart") continue;
+
+    if (source.constantCoverageConstructors != null &&
+        source.constantCoverageConstructors!.isNotEmpty) {
+      if (!printedConstantCoverageHeader) {
+        s.writeln("");
+        s.writeln("");
+        s.writeln("Constructor coverage from constants:");
+        printedConstantCoverageHeader = true;
+      }
+      s.writeln("${source.fileUri}:");
+      for (Reference reference in source.constantCoverageConstructors!) {
+        s.writeln("- ${reference.node} (from ${reference.node?.location})");
+      }
+      s.writeln("");
+    }
+  }
+
   if (dartUris.isNotEmpty) {
     s.writeln("");
     s.writeln("And ${dartUris.length} platform libraries:");
diff --git a/pkg/front_end/test/outline_extractor_suite.dart b/pkg/front_end/test/outline_extractor_suite.dart
index 42adf8c..a41a076 100644
--- a/pkg/front_end/test/outline_extractor_suite.dart
+++ b/pkg/front_end/test/outline_extractor_suite.dart
@@ -248,7 +248,7 @@
   }
 
   @override
-  bool checkProcedure_startFileOffset(
+  bool checkProcedure_fileStartOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
     return true;
   }
diff --git a/pkg/front_end/test/outline_extractor_tester.dart b/pkg/front_end/test/outline_extractor_tester.dart
index 01fbca9..c77a98a 100644
--- a/pkg/front_end/test/outline_extractor_tester.dart
+++ b/pkg/front_end/test/outline_extractor_tester.dart
@@ -236,7 +236,7 @@
   }
 
   @override
-  bool checkProcedure_startFileOffset(
+  bool checkProcedure_fileStartOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
     return true;
   }
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index eaad1d4..e401254 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -82,6 +82,7 @@
 augment
 augmentation
 augmentations
+augmented
 augmenting
 augments
 auto
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
index 8014659..f9945e5 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.1.expect
@@ -49,3 +49,15 @@
   #C1 = lib::A {}
   #C2 = lib::C {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- C. (from org-dartlang-test:///lib.dart:11:9)
+- B. (from org-dartlang-test:///lib.dart:7:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- A. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
index 36461a4..f994018 100644
--- a/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/changed_serialization_2.yaml.world.2.expect
@@ -45,3 +45,10 @@
 constants  {
   #C1 = lib::A {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- A. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect
index f842a13..fc57f00 100644
--- a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.1.expect
@@ -31,3 +31,11 @@
   #C1 = "Instance of 'A'"
   #C2 = "Instance of 'B'"
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- A. (from org-dartlang-test:///a.dart:2:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- B. (from org-dartlang-test:///b.dart:2:9)
+
diff --git a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect
index f842a13..fc57f00 100644
--- a/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/const_to_string.yaml.world.2.expect
@@ -31,3 +31,11 @@
   #C1 = "Instance of 'A'"
   #C2 = "Instance of 'B'"
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- A. (from org-dartlang-test:///a.dart:2:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- B. (from org-dartlang-test:///b.dart:2:9)
+
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect b/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
index bcb7537..04e1b36 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml.world.1.expect
@@ -66,3 +66,12 @@
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
   #C17 = dart.core::pragma {name:#C1, options:#C16}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Uint32. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:91:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect b/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
index bcb7537..04e1b36 100644
--- a/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/crash_05.yaml.world.2.expect
@@ -66,3 +66,12 @@
   #C16 = dart.ffi::_FfiStructLayout {fieldTypes:#C15, packing:#C4}
   #C17 = dart.core::pragma {name:#C1, options:#C16}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Uint32. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:91:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
index e6e7693..b7e1762 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.1.expect
@@ -73,3 +73,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
index 7712ae2..655f66e 100644
--- a/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_01.yaml.world.2.expect
@@ -77,3 +77,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
index 99eefd4..8606c08 100644
--- a/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_02.yaml.world.1.expect
@@ -74,3 +74,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
index 4000948..1168c24 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.1.expect
@@ -70,3 +70,10 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:9:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
index 4000948..1168c24 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform.yaml.world.2.expect
@@ -70,3 +70,10 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:9:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index ff0ff25..6347d3f6 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -157,3 +157,22 @@
   #C47 = 20.0
   #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Bar._ (from org-dartlang-test:///foo.dart:5:7)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:5:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Foo._ (from org-dartlang-test:///foo.dart:3:7)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:5:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+- Baz.__ (from org-dartlang-test:///foo.dart:8:7)
+- Boz._ (from org-dartlang-test:///foo.dart:10:7)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index 47c45a0..47f4225 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -140,3 +140,15 @@
   #C36 = 10.0
   #C37 = wid::_Location {file:#C2, line:#C36, column:#C11, name:#C32, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Foo._ (from org-dartlang-test:///foo.dart:3:7)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:5:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+- Baz.__ (from org-dartlang-test:///foo.dart:8:7)
+- Boz._ (from org-dartlang-test:///foo.dart:10:7)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index ff0ff25..a2b9291 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -157,3 +157,22 @@
   #C47 = 20.0
   #C48 = wid::_Location {file:#C38, line:#C11, column:#C47, name:#C32, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Foo._ (from org-dartlang-test:///foo.dart:3:7)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:5:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+- Baz.__ (from org-dartlang-test:///foo.dart:8:7)
+- Boz._ (from org-dartlang-test:///foo.dart:10:7)
+
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Bar._ (from org-dartlang-test:///foo.dart:5:7)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:5:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
index f4d0275..9227139 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.1.expect
@@ -60,3 +60,10 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:8:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
index 3fdfb87..b970314 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_nnbd.yaml.world.2.expect
@@ -66,3 +66,17 @@
   #C10 = wid::_Location {file:#C7, line:#C8, column:#C9, name:#C5, parameterLocations:#C1}
   #C11 = foo::Foo {_location:#C10}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:8:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:8:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+- Foo. (from org-dartlang-test:///foo.dart:2:34)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:6:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
index 64a1fbd..4d8c8bd 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_43371.yaml.world.2.expect
@@ -69,3 +69,13 @@
   #C1 = null
   #C2 = foo::Foo {key:#C1, _location:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///foo.dart:6:9)
+- StatelessWidget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:10:9)
+- Widget. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:7:9)
+- Bar. (from org-dartlang-test:///flutter/lib/src/widgets/framework.dart:2:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
index a6fb1d9..02db06b 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.1.expect
@@ -61,3 +61,10 @@
   #C5 = "Foo"
   #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C5, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
index e6b030d..292e661 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transformer_non_const.yaml.world.2.expect
@@ -66,3 +66,14 @@
   #C9 = 15.0
   #C10 = wid::_Location {file:#C7, line:#C8, column:#C9, name:#C5, parameterLocations:#C1}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///foo.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
+org-dartlang-test:///main.dart:
+- _Location. (from org-dartlang-test:///flutter/lib/src/widgets/widget_inspector.dart:7:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:-1:-1)
+
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
index a889a57..2b8f16d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
@@ -124,3 +124,11 @@
   #C29 = 1000000
   #C30 = dart.core::Duration {_duration:#C29}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///b.dart:
+- Duration. (from org-dartlang-sdk:///sdk/lib/core/duration.dart:173:9)
+- Duration._microseconds (from org-dartlang-sdk:///sdk/lib/core/duration.dart:189:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
index a889a57..2b8f16d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
@@ -124,3 +124,11 @@
   #C29 = 1000000
   #C30 = dart.core::Duration {_duration:#C29}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///b.dart:
+- Duration. (from org-dartlang-sdk:///sdk/lib/core/duration.dart:173:9)
+- Duration._microseconds (from org-dartlang-sdk:///sdk/lib/core/duration.dart:189:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
index b41916b..e74b105 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.1.expect
@@ -36,3 +36,10 @@
 constants  {
   #C1 = lib2::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib2.dart:4:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
index 6e5e4a9..a4182de 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_13.yaml.world.2.expect
@@ -37,3 +37,10 @@
 constants  {
   #C1 = lib2::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib2.dart:4:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
index 90a9879..7d10cb3 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
@@ -76,3 +76,11 @@
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
index 7373cee..586df3a 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
@@ -76,3 +76,11 @@
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
index 5858d2a..fa9019c 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.1.expect
@@ -36,3 +36,10 @@
   #C1 = dart.core::_Override {}
   #C2 = main::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
index 39a1eee..e0d18ed 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_3.yaml.world.2.expect
@@ -37,3 +37,10 @@
   #C1 = dart.core::_Override {}
   #C2 = main::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
index e6e7693..b7e1762 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.1.expect
@@ -73,3 +73,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
index 1134f3c..ff06ff1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.2.expect
@@ -74,3 +74,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
index e52f835..9f42aec 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_35.yaml.world.3.expect
@@ -75,3 +75,12 @@
   #C18 = 20
   #C19 = <dart.core::int*>[#C17, #C17, #C18, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C18, #C17, #C17, #C17, #C17, #C17, #C17, #C17, #C17]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:115:9)
+- _NativeDouble. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:35:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
index a86189c..d73f0fe 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.1.expect
@@ -105,3 +105,19 @@
   #C30 = 28
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
index a9302fa..2f12464 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_48_ffi.yaml.world.2.expect
@@ -105,3 +105,19 @@
   #C30 = 36
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
index a86189c..d73f0fe 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.1.expect
@@ -105,3 +105,19 @@
   #C30 = 28
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
index a9302fa..2f12464 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_49_ffi.yaml.world.2.expect
@@ -105,3 +105,19 @@
   #C30 = 36
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
index d8895e9..e65d991 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.1.expect
@@ -32,3 +32,10 @@
   #C1 = dart.core::_Override {}
   #C2 = main::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
index 443a189c..5267571 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.2.expect
@@ -32,3 +32,10 @@
   #C1 = dart.core::_Override {}
   #C2 = main::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
index e7549e8..e291aa1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_5.yaml.world.3.expect
@@ -33,3 +33,10 @@
   #C1 = dart.core::_Override {}
   #C2 = main::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Foo. (from org-dartlang-test:///main.dart:5:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
index b64cce3..3285a00 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.1.expect
@@ -291,3 +291,19 @@
   #C30 = 28
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
index e760406..ef80737 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_50_ffi.yaml.world.2.expect
@@ -291,3 +291,19 @@
   #C30 = 36
   #C31 = <dart.core::int*>[#C29, #C29, #C30, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C30, #C29, #C29, #C29, #C29, #C29, #C29, #C29, #C29]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib.dart:
+- Uint8. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:75:9)
+- _NativeInteger. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:27:9)
+- NativeType. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:12:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- Uint64. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:99:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index 59e6822..2cc160f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -83,3 +83,11 @@
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index 9008ffe..f4b7e7b 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -83,3 +83,11 @@
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
index bc00082..f45163f 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
@@ -76,3 +76,11 @@
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:18:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
index 69f385d..0b471c1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
@@ -95,3 +95,11 @@
   #C14 = main::CompilationStrategy {index:#C12, _name:#C13}
   #C15 = <main::CompilationStrategy*>[#C5, #C8, #C11, #C14]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:33:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
index 69f385d..0b471c1 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
@@ -95,3 +95,11 @@
   #C14 = main::CompilationStrategy {index:#C12, _name:#C13}
   #C15 = <main::CompilationStrategy*>[#C5, #C8, #C11, #C14]
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///main.dart:
+- CompilationStrategy. (from org-dartlang-test:///main.dart:33:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
index dfaa047..88a3567 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.2.expect
@@ -69,3 +69,12 @@
     dart.core::print(invalid-expression "This assertion failed.");
   }
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
+org-dartlang-test:///lib3.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
index cde8746..8f13ae6 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.3.expect
@@ -59,3 +59,13 @@
 constants  {
   #C1 = lib::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib3.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
index d0d6582..f0e49e5 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.4.expect
@@ -59,3 +59,13 @@
 constants  {
   #C1 = lib::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
+org-dartlang-test:///lib3.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
index 2d91ec1..2268375 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_10.yaml.world.5.expect
@@ -46,3 +46,14 @@
 constants  {
   #C1 = lib::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-test:///lib3.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
index 3cac950..ad41429 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.2.expect
@@ -62,3 +62,9 @@
     lib2::bar();
   }
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
index ae3bfe7..0c12219 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_11.yaml.world.3.expect
@@ -55,3 +55,10 @@
 constants  {
   #C1 = lib::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
index 15f54b2..0c6d913 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_8.yaml.world.2.expect
@@ -47,3 +47,9 @@
     lib::foo();
   }
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
index 1ba9798..bad435a 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.2.expect
@@ -69,3 +69,9 @@
     dart.core::print(invalid-expression "This assertion failed.");
   }
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
index dc713d3..c5b8118 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_9.yaml.world.3.expect
@@ -46,3 +46,10 @@
 constants  {
   #C1 = lib::Foo {}
 }
+
+
+Constructor coverage from constants:
+org-dartlang-test:///lib2.dart:
+- Foo. (from org-dartlang-test:///lib.dart:3:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart b/pkg/front_end/testcases/macros/augment_concrete.dart
new file mode 100644
index 0000000..821e483
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import augment 'augment_concrete_lib1.dart';
+import augment 'augment_concrete_lib2.dart';
+
+void topLevelMethod() {
+  print('topLevelMethod original');
+}
+
+external void externalTopLevelMethod();
+
+class Class {
+  void instanceMethod() {
+    print('instanceMethod original');
+  }
+
+  static void staticMethod() {
+    print('staticMethod original');
+  }
+
+  external void externalInstanceMethod();
+}
+
+main() {
+  topLevelMethod();
+  new Class().instanceMethod();
+  Class.staticMethod();
+  new Class().externalInstanceMethod();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.strong.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.strong.expect
new file mode 100644
index 0000000..83a035a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.strong.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ instanceMethod() → void {
+    core::print("instanceMethod augmentation 2");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ staticMethod() → void {
+    core::print("staticMethod augmentation 2");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ externalInstanceMethod() → void {
+    core::print("externalInstanceMethod augmentation 2");
+  }
+  method _#instanceMethod#augment0() → void {
+    core::print("instanceMethod original");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#instanceMethod#augment1() → void {
+    core::print("instanceMethod augmentation 1");
+  }
+  static method _#staticMethod#augment0() → void {
+    core::print("staticMethod original");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#staticMethod#augment1() → void {
+    core::print("staticMethod augmentation 1");
+  }
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ topLevelMethod() → void {
+  core::print("topLevelMethod augmentation 2");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ externalTopLevelMethod() → void {
+  core::print("externalTopLevelMethod augmentation 1");
+}
+static method main() → dynamic {
+  self::topLevelMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → void};
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::externalInstanceMethod}(){() → void};
+}
+static method _#topLevelMethod#augment0() → void {
+  core::print("topLevelMethod original");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#topLevelMethod#augment1() → void {
+  core::print("topLevelMethod augmentation 1");
+}
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.strong.transformed.expect
new file mode 100644
index 0000000..83a035a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.strong.transformed.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ instanceMethod() → void {
+    core::print("instanceMethod augmentation 2");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ staticMethod() → void {
+    core::print("staticMethod augmentation 2");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ externalInstanceMethod() → void {
+    core::print("externalInstanceMethod augmentation 2");
+  }
+  method _#instanceMethod#augment0() → void {
+    core::print("instanceMethod original");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#instanceMethod#augment1() → void {
+    core::print("instanceMethod augmentation 1");
+  }
+  static method _#staticMethod#augment0() → void {
+    core::print("staticMethod original");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#staticMethod#augment1() → void {
+    core::print("staticMethod augmentation 1");
+  }
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ topLevelMethod() → void {
+  core::print("topLevelMethod augmentation 2");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ externalTopLevelMethod() → void {
+  core::print("externalTopLevelMethod augmentation 1");
+}
+static method main() → dynamic {
+  self::topLevelMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → void};
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::externalInstanceMethod}(){() → void};
+}
+static method _#topLevelMethod#augment0() → void {
+  core::print("topLevelMethod original");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#topLevelMethod#augment1() → void {
+  core::print("topLevelMethod augmentation 1");
+}
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.textual_outline.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.textual_outline.expect
new file mode 100644
index 0000000..68a15f5
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+import augment 'augment_concrete_lib1.dart';
+import augment 'augment_concrete_lib2.dart';
+void topLevelMethod() {}
+external void externalTopLevelMethod();
+class Class {
+  void instanceMethod() {}
+  static void staticMethod() {}
+  external void externalInstanceMethod();
+}
+main() {}
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.weak.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.expect
new file mode 100644
index 0000000..83a035a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ instanceMethod() → void {
+    core::print("instanceMethod augmentation 2");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ staticMethod() → void {
+    core::print("staticMethod augmentation 2");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ externalInstanceMethod() → void {
+    core::print("externalInstanceMethod augmentation 2");
+  }
+  method _#instanceMethod#augment0() → void {
+    core::print("instanceMethod original");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#instanceMethod#augment1() → void {
+    core::print("instanceMethod augmentation 1");
+  }
+  static method _#staticMethod#augment0() → void {
+    core::print("staticMethod original");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#staticMethod#augment1() → void {
+    core::print("staticMethod augmentation 1");
+  }
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ topLevelMethod() → void {
+  core::print("topLevelMethod augmentation 2");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ externalTopLevelMethod() → void {
+  core::print("externalTopLevelMethod augmentation 1");
+}
+static method main() → dynamic {
+  self::topLevelMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → void};
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::externalInstanceMethod}(){() → void};
+}
+static method _#topLevelMethod#augment0() → void {
+  core::print("topLevelMethod original");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#topLevelMethod#augment1() → void {
+  core::print("topLevelMethod augmentation 1");
+}
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.modular.expect
new file mode 100644
index 0000000..83a035a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.modular.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ instanceMethod() → void {
+    core::print("instanceMethod augmentation 2");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ staticMethod() → void {
+    core::print("staticMethod augmentation 2");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ externalInstanceMethod() → void {
+    core::print("externalInstanceMethod augmentation 2");
+  }
+  method _#instanceMethod#augment0() → void {
+    core::print("instanceMethod original");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#instanceMethod#augment1() → void {
+    core::print("instanceMethod augmentation 1");
+  }
+  static method _#staticMethod#augment0() → void {
+    core::print("staticMethod original");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#staticMethod#augment1() → void {
+    core::print("staticMethod augmentation 1");
+  }
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ topLevelMethod() → void {
+  core::print("topLevelMethod augmentation 2");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ externalTopLevelMethod() → void {
+  core::print("externalTopLevelMethod augmentation 1");
+}
+static method main() → dynamic {
+  self::topLevelMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → void};
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::externalInstanceMethod}(){() → void};
+}
+static method _#topLevelMethod#augment0() → void {
+  core::print("topLevelMethod original");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#topLevelMethod#augment1() → void {
+  core::print("topLevelMethod augmentation 1");
+}
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.weak.outline.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.outline.expect
new file mode 100644
index 0000000..0c99b32
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  method instanceMethod() → void
+    ;
+  static method staticMethod() → void
+    ;
+  external method externalInstanceMethod() → void;
+}
+static method topLevelMethod() → void
+  ;
+external static method externalTopLevelMethod() → void;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/macros/augment_concrete.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.transformed.expect
new file mode 100644
index 0000000..83a035a
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete.dart.weak.transformed.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///augment_concrete.dart";
+import "org-dartlang-testcase:///augment_concrete.dart";
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ instanceMethod() → void {
+    core::print("instanceMethod augmentation 2");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ staticMethod() → void {
+    core::print("staticMethod augmentation 2");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ externalInstanceMethod() → void {
+    core::print("externalInstanceMethod augmentation 2");
+  }
+  method _#instanceMethod#augment0() → void {
+    core::print("instanceMethod original");
+  }
+  method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#instanceMethod#augment1() → void {
+    core::print("instanceMethod augmentation 1");
+  }
+  static method _#staticMethod#augment0() → void {
+    core::print("staticMethod original");
+  }
+  static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#staticMethod#augment1() → void {
+    core::print("staticMethod augmentation 1");
+  }
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib2.dart */ topLevelMethod() → void {
+  core::print("topLevelMethod augmentation 2");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ externalTopLevelMethod() → void {
+  core::print("externalTopLevelMethod augmentation 1");
+}
+static method main() → dynamic {
+  self::topLevelMethod();
+  new self::Class::•().{self::Class::instanceMethod}(){() → void};
+  self::Class::staticMethod();
+  new self::Class::•().{self::Class::externalInstanceMethod}(){() → void};
+}
+static method _#topLevelMethod#augment0() → void {
+  core::print("topLevelMethod original");
+}
+static method /* from org-dartlang-testcase:///augment_concrete_lib1.dart */ _#topLevelMethod#augment1() → void {
+  core::print("topLevelMethod augmentation 1");
+}
diff --git a/pkg/front_end/testcases/macros/augment_concrete_lib1.dart b/pkg/front_end/testcases/macros/augment_concrete_lib1.dart
new file mode 100644
index 0000000..e036435
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete_lib1.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+augment void topLevelMethod() {
+  print('topLevelMethod augmentation 1');
+}
+
+augment void externalTopLevelMethod() {
+  print('externalTopLevelMethod augmentation 1');
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    print('instanceMethod augmentation 1');
+  }
+
+  augment static void staticMethod() {
+    print('staticMethod augmentation 1');
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_concrete_lib2.dart b/pkg/front_end/testcases/macros/augment_concrete_lib2.dart
new file mode 100644
index 0000000..de1bc9b
--- /dev/null
+++ b/pkg/front_end/testcases/macros/augment_concrete_lib2.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+augment void topLevelMethod() {
+  print('topLevelMethod augmentation 2');
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    print('instanceMethod augmentation 2');
+  }
+
+  augment static void staticMethod() {
+    print('staticMethod augmentation 2');
+  }
+
+  augment void externalInstanceMethod() {
+    print('externalInstanceMethod augmentation 2');
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
index d309789..fa16fcc 100644
--- a/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.expect
@@ -122,6 +122,11 @@
     augment; // Error
     ^^^^^^^" in this{<unresolved>}.augment;
   }
+  method _#instanceMethod#augment0() → void {}
+  method _#instanceMethodErrors#augment0() → void {}
+  get _#instanceProperty#augment0() → core::int
+    return 42;
+  set _#instanceProperty#augment0(core::int value) → void {}
 }
 static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
   (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
@@ -162,3 +167,7 @@
   augment; // Error
   ^^^^^^^";
 }
+static method _#topLevelMethod#augment0() → void {}
+static get _#topLevelProperty#augment0() → core::List<core::int>
+  return <core::int>[42];
+static set _#topLevelProperty#augment0(core::List<core::int> value) → void {}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
index e1236aa..7334815 100644
--- a/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/macros/augment_super.dart.strong.transformed.expect
@@ -122,6 +122,11 @@
     augment; // Error
     ^^^^^^^" in this{<unresolved>}.augment;
   }
+  method _#instanceMethod#augment0() → void {}
+  method _#instanceMethodErrors#augment0() → void {}
+  get _#instanceProperty#augment0() → core::int
+    return 42;
+  set _#instanceProperty#augment0(core::int value) → void {}
 }
 static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
   (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
@@ -168,6 +173,10 @@
   augment; // Error
   ^^^^^^^";
 }
+static method _#topLevelMethod#augment0() → void {}
+static get _#topLevelProperty#augment0() → core::List<core::int>
+  return core::_GrowableList::_literal1<core::int>(42);
+static set _#topLevelProperty#augment0(core::List<core::int> value) → void {}
 
 
 Extra constant evaluation status:
@@ -177,4 +186,4 @@
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
-Extra constant evaluation: evaluated: 31, effectively constant: 6
+Extra constant evaluation: evaluated: 32, effectively constant: 6
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
index d309789..fa16fcc 100644
--- a/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.expect
@@ -122,6 +122,11 @@
     augment; // Error
     ^^^^^^^" in this{<unresolved>}.augment;
   }
+  method _#instanceMethod#augment0() → void {}
+  method _#instanceMethodErrors#augment0() → void {}
+  get _#instanceProperty#augment0() → core::int
+    return 42;
+  set _#instanceProperty#augment0(core::int value) → void {}
 }
 static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
   (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
@@ -162,3 +167,7 @@
   augment; // Error
   ^^^^^^^";
 }
+static method _#topLevelMethod#augment0() → void {}
+static get _#topLevelProperty#augment0() → core::List<core::int>
+  return <core::int>[42];
+static set _#topLevelProperty#augment0(core::List<core::int> value) → void {}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
index d309789..fa16fcc 100644
--- a/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.modular.expect
@@ -122,6 +122,11 @@
     augment; // Error
     ^^^^^^^" in this{<unresolved>}.augment;
   }
+  method _#instanceMethod#augment0() → void {}
+  method _#instanceMethodErrors#augment0() → void {}
+  get _#instanceProperty#augment0() → core::int
+    return 42;
+  set _#instanceProperty#augment0(core::int value) → void {}
 }
 static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
   (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
@@ -162,3 +167,7 @@
   augment; // Error
   ^^^^^^^";
 }
+static method _#topLevelMethod#augment0() → void {}
+static get _#topLevelProperty#augment0() → core::List<core::int>
+  return <core::int>[42];
+static set _#topLevelProperty#augment0(core::List<core::int> value) → void {}
diff --git a/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
index 6d9c5f8..c063461 100644
--- a/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/macros/augment_super.dart.weak.transformed.expect
@@ -122,6 +122,11 @@
     augment; // Error
     ^^^^^^^" in this{<unresolved>}.augment;
   }
+  method _#instanceMethod#augment0() → void {}
+  method _#instanceMethodErrors#augment0() → void {}
+  get _#instanceProperty#augment0() → core::int
+    return 42;
+  set _#instanceProperty#augment0(core::int value) → void {}
 }
 static method /* from org-dartlang-testcase:///augment_super_lib.dart */ topLevelMethod() → void {
   (null as{ForNonNullableByDefault} dynamic){dynamic}.call();
@@ -168,6 +173,10 @@
   augment; // Error
   ^^^^^^^";
 }
+static method _#topLevelMethod#augment0() → void {}
+static get _#topLevelProperty#augment0() → core::List<core::int>
+  return core::_GrowableList::_literal1<core::int>(42);
+static set _#topLevelProperty#augment0(core::List<core::int> value) → void {}
 
 
 Extra constant evaluation status:
@@ -177,4 +186,4 @@
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:15 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:16:30 -> NullConstant(null)
 Evaluated: AsExpression @ org-dartlang-testcase:///augment_super_lib.dart:20:3 -> NullConstant(null)
-Extra constant evaluation: evaluated: 30, effectively constant: 6
+Extra constant evaluation: evaluated: 31, effectively constant: 6
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 7be4428..d19b28b 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -112,6 +112,7 @@
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: FormatterCrash
 late_lowering/later: FormatterCrash
 macros/augment_class: FormatterCrash
+macros/augment_concrete: FormatterCrash
 macros/augment_super: FormatterCrash
 macros/class_members: FormatterCrash
 macros/inject_constructor: FormatterCrash
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 93f8ea9..ae11a58 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -2904,7 +2904,7 @@
   /// Valid values are from 0 and up, or -1 ([TreeNode.noOffset]) if the file
   /// start offset is not available (this is the default if none is specifically
   /// set).
-  int startFileOffset = TreeNode.noOffset;
+  int fileStartOffset = TreeNode.noOffset;
 
   final ProcedureKind kind;
   int flags = 0;
@@ -2912,31 +2912,6 @@
   @override
   FunctionNode function;
 
-  // The function node's body might be lazily loaded, meaning that this value
-  // might not be set correctly yet. Make sure the body is loaded before
-  // returning anything.
-  @override
-  int get transformerFlags {
-    function.body;
-    return super.transformerFlags;
-  }
-
-  // The function node's body might be lazily loaded, meaning that this value
-  // might get overwritten later (when the body is read). To avoid that read the
-  // body now and only set the value afterwards.
-  @override
-  void set transformerFlags(int newValue) {
-    function.body;
-    super.transformerFlags = newValue;
-  }
-
-  // This function will set the transformer flags without loading the body.
-  // Used when reading the binary. For other cases one should probably use
-  // `transformerFlags = value;`.
-  void setTransformerFlagsWithoutLazyLoading(int newValue) {
-    super.transformerFlags = newValue;
-  }
-
   ProcedureStubKind stubKind;
   Reference? stubTargetReference;
 
@@ -3025,6 +3000,31 @@
         "$memberSignatureOrigin for $this.");
   }
 
+  // The function node's body might be lazily loaded, meaning that this value
+  // might not be set correctly yet. Make sure the body is loaded before
+  // returning anything.
+  @override
+  int get transformerFlags {
+    function.body;
+    return super.transformerFlags;
+  }
+
+  // The function node's body might be lazily loaded, meaning that this value
+  // might get overwritten later (when the body is read). To avoid that read the
+  // body now and only set the value afterwards.
+  @override
+  void set transformerFlags(int newValue) {
+    function.body;
+    super.transformerFlags = newValue;
+  }
+
+  // This function will set the transformer flags without loading the body.
+  // Used when reading the binary. For other cases one should probably use
+  // `transformerFlags = value;`.
+  void setTransformerFlagsWithoutLazyLoading(int newValue) {
+    super.transformerFlags = newValue;
+  }
+
   @override
   void bindCanonicalNames(CanonicalName parent) {
     parent.getChildFromProcedure(this).bindTo(reference);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index cc22844..a4fd2ba 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1706,7 +1706,7 @@
     }
     int transformerFlags = getAndResetTransformerFlags();
     assert(((_) => true)(debugPath.removeLast()));
-    node.startFileOffset = startFileOffset;
+    node.fileStartOffset = startFileOffset;
     node.fileOffset = fileOffset;
     node.fileEndOffset = fileEndOffset;
     node.flags = flags;
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 781c8ba..6b7c969 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1348,7 +1348,7 @@
     writeByte(Tag.Procedure);
     _writeNonNullCanonicalName(canonicalName);
     writeUriReference(node.fileUri);
-    writeOffset(node.startFileOffset);
+    writeOffset(node.fileStartOffset);
     writeOffset(node.fileOffset);
     writeOffset(node.fileEndOffset);
     writeByte(node.kind.index);
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index d8f5c67b..2de4631 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -917,7 +917,7 @@
       ..annotations = cloneAnnotations && !node.annotations.isEmpty
           ? node.annotations.map(super.clone).toList()
           : const <Expression>[]
-      ..startFileOffset = _cloneFileOffset(node.startFileOffset)
+      ..fileStartOffset = _cloneFileOffset(node.fileStartOffset)
       ..fileOffset = _cloneFileOffset(node.fileOffset)
       ..fileEndOffset = _cloneFileOffset(node.fileEndOffset)
       ..flags = node.flags;
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index a5efbee..a1f334a 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -1786,7 +1786,7 @@
     }
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkProcedure_startFileOffset(visitor, node, other)) {
+    if (!checkProcedure_fileStartOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
     if (!checkProcedure_kind(visitor, node, other)) {
@@ -5172,10 +5172,10 @@
     return checkMember_fileOffset(visitor, node, other);
   }
 
-  bool checkProcedure_startFileOffset(
+  bool checkProcedure_fileStartOffset(
       EquivalenceVisitor visitor, Procedure node, Procedure other) {
     return visitor.checkValues(
-        node.startFileOffset, other.startFileOffset, 'startFileOffset');
+        node.fileStartOffset, other.fileStartOffset, 'fileStartOffset');
   }
 
   bool checkProcedure_kind(
diff --git a/samples/ffi/async/async_test.dart b/samples/ffi/async/async_test.dart
index f438582..3210140 100644
--- a/samples/ffi/async/async_test.dart
+++ b/samples/ffi/async/async_test.dart
@@ -9,7 +9,10 @@
 import 'sample_async_callback.dart' as sample0;
 import 'sample_native_port_call.dart' as sample1;
 
-main() {
-  sample0.main();
-  sample1.main();
+main() async {
+  print('==========');
+  await sample0.main();
+  print('==========');
+  await sample1.main();
+  print('==========');
 }
diff --git a/samples_2/ffi/async/async_test.dart b/samples_2/ffi/async/async_test.dart
index 297a76e..5470052 100644
--- a/samples_2/ffi/async/async_test.dart
+++ b/samples_2/ffi/async/async_test.dart
@@ -11,7 +11,10 @@
 import 'sample_async_callback.dart' as sample0;
 import 'sample_native_port_call.dart' as sample1;
 
-main() {
-  sample0.main();
-  sample1.main();
+main() async {
+  print('==========');
+  await sample0.main();
+  print('==========');
+  await sample1.main();
+  print('==========');
 }
diff --git a/tools/VERSION b/tools/VERSION
index cb3be23..f2683d3 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 236
+PRERELEASE 237
 PRERELEASE_PATCH 0
\ No newline at end of file