diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 4c75ebb..71d70e3 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -231,11 +231,6 @@
   }
 
   @override
-  void forEach(void f(String name, Builder builder)) {
-    scope.forEach(f);
-  }
-
-  @override
   Builder? lookupLocalMember(String name,
       {bool setter: false, bool required: false}) {
     Builder? builder = scope.lookupLocalMember(name, setter: setter);
diff --git a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
index ba6a2da..d26e994 100644
--- a/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/extension_builder.dart
@@ -160,7 +160,10 @@
 
   @override
   void forEach(void f(String name, Builder builder)) {
-    scope.forEach(f);
+    scope
+        .filteredNameIterator(
+            includeDuplicates: false, includeAugmentations: false)
+        .forEach(f);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 2c6f4b3..a2a3380 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -69,9 +69,17 @@
   /// used in conditional imports and `bool.fromEnvironment` constants.
   bool get isUnsupported;
 
-  Iterator<Builder> get iterator;
+  /// Returns an iterator of all members (typedefs, classes and members)
+  /// declared in this library, including duplicate declarations.
+  // TODO(johnniwinther): Should the only exist on [SourceLibraryBuilder]?
+  Iterator<Builder> get localMembersIterator;
 
-  NameIterator get nameIterator;
+  /// Returns an iterator of all members (typedefs, classes and members)
+  /// declared in this library, including duplicate declarations.
+  ///
+  /// Compared to [localMembersIterator] this also gives access to the name
+  /// that the builders are mapped to.
+  NameIterator<Builder> get localMembersNameIterator;
 
   void addExporter(LibraryBuilder exporter,
       List<CombinatorBuilder>? combinators, int charOffset);
@@ -194,13 +202,15 @@
   Uri get importUri;
 
   @override
-  Iterator<Builder> get iterator {
-    return new LibraryLocalDeclarationIterator(this);
+  Iterator<Builder> get localMembersIterator {
+    return scope.filteredIterator(
+        parent: this, includeDuplicates: true, includeAugmentations: true);
   }
 
   @override
-  NameIterator get nameIterator {
-    return new LibraryLocalDeclarationNameIterator(this);
+  NameIterator<Builder> get localMembersNameIterator {
+    return scope.filteredNameIterator(
+        parent: this, includeDuplicates: true, includeAugmentations: true);
   }
 
   @override
@@ -373,44 +383,3 @@
     return buffer..write(name ?? (isPart ? fileUri : importUri));
   }
 }
-
-class LibraryLocalDeclarationIterator implements Iterator<Builder> {
-  final LibraryBuilder library;
-  final Iterator<Builder> iterator;
-
-  LibraryLocalDeclarationIterator(this.library)
-      : iterator = library.scope.iterator;
-
-  @override
-  Builder get current => iterator.current;
-
-  @override
-  bool moveNext() {
-    while (iterator.moveNext()) {
-      if (current.parent == library) return true;
-    }
-    return false;
-  }
-}
-
-class LibraryLocalDeclarationNameIterator implements NameIterator {
-  final LibraryBuilder library;
-  final NameIterator iterator;
-
-  LibraryLocalDeclarationNameIterator(this.library)
-      : iterator = library.scope.nameIterator;
-
-  @override
-  Builder get current => iterator.current;
-
-  @override
-  String get name => iterator.name;
-
-  @override
-  bool moveNext() {
-    while (iterator.moveNext()) {
-      if (current.parent == library) return true;
-    }
-    return false;
-  }
-}
diff --git a/pkg/front_end/lib/src/fasta/builder/name_iterator.dart b/pkg/front_end/lib/src/fasta/builder/name_iterator.dart
index 165dfb3..67e85f6 100644
--- a/pkg/front_end/lib/src/fasta/builder/name_iterator.dart
+++ b/pkg/front_end/lib/src/fasta/builder/name_iterator.dart
@@ -6,6 +6,7 @@
 
 import 'builder.dart';
 
-abstract class NameIterator implements Iterator<Builder> {
+/// An iterator on [Builder]s that provide the name that they are mapped to.
+abstract class NameIterator<T extends Builder> implements Iterator<T> {
   String get name;
 }
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index ec39485..57d337a 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -7,6 +7,7 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/class_hierarchy.dart';
 
+import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
@@ -183,6 +184,11 @@
   }
 
   @override
+  void forEach(void f(String name, Builder builder)) {
+    scope.unfilteredNameIterator.forEach(f);
+  }
+
+  @override
   void forEachConstructor(void Function(String, MemberBuilder) f,
       {bool includeInjectedConstructors: false}) {
     constructorScope.forEach(f);
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index b0a4816..b34f25b 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -18,6 +18,8 @@
 
 import 'source/source_library_builder.dart';
 
+import 'scope.dart' show NameIteratorExtension;
+
 class Import {
   /// The library that is importing [imported];
   final SourceLibraryBuilder importer;
@@ -74,7 +76,10 @@
         prefixBuilder!.addToExportScope(name, member, charOffset);
       };
     }
-    imported!.exportScope.forEach((String name, Builder member) {
+    imported!.exportScope
+        .filteredNameIterator(
+            includeDuplicates: false, includeAugmentations: false)
+        .forEach((String name, Builder member) {
       if (combinators != null) {
         for (CombinatorBuilder combinator in combinators!) {
           if (combinator.isShow && !combinator.names.contains(name)) return;
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 34059e2..0535dcc 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -817,7 +817,7 @@
       replacementMap[entry.key] = childReplacementMap;
       replacementSettersMap[entry.key] = childReplacementSettersMap;
       for (LibraryBuilder builder in builders) {
-        NameIterator iterator = builder.nameIterator;
+        NameIterator iterator = builder.localMembersNameIterator;
         while (iterator.moveNext()) {
           Builder childBuilder = iterator.current;
           String name = iterator.name;
@@ -927,7 +927,9 @@
           builder.importScope
               .patchUpScope(replacementMap, replacementSettersMap);
 
-          Iterator<Builder> iterator = builder.iterator;
+          // TODO(johnniwinther): Should this include non-local (i.e. injected)
+          // members?
+          Iterator<Builder> iterator = builder.localMembersIterator;
           while (iterator.moveNext()) {
             Builder childBuilder = iterator.current;
             if (childBuilder is SourceClassBuilder) {
@@ -1200,7 +1202,9 @@
     if (enableMacros) {
       /// TODO(johnniwinther): Add a [hasMacro] property to [LibraryBuilder].
       for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
-        Iterator<Builder> iterator = builder.iterator;
+        // TODO(johnniwinther): Should this include non-local (i.e. injected)
+        // members?
+        Iterator<Builder> iterator = builder.localMembersIterator;
         while (iterator.moveNext()) {
           Builder childBuilder = iterator.current;
           if (childBuilder is ClassBuilder && childBuilder.isMacro) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 261b444..0d30a96 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -381,10 +381,11 @@
                 coreTypes.objectClass != declarationBuilder.cls,
         benchmarker = libraryBuilder.loader.target.benchmarker,
         this.scope = enclosingScope {
-    formalParameterScope?.forEach((String name, Builder builder) {
-      if (builder is VariableBuilder) {
-        typeInferrer.assignedVariables.declare(builder.variable!);
-      }
+    formalParameterScope
+        ?.filteredIterator<VariableBuilder>(
+            includeDuplicates: false, includeAugmentations: false)
+        .forEach((VariableBuilder builder) {
+      typeInferrer.assignedVariables.declare(builder.variable!);
     });
   }
 
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 6986604..befe20f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -1411,33 +1411,13 @@
 
     builder.forEachDeclaredConstructor(
         (String name, DeclaredSourceConstructorBuilder constructorBuilder) {
-      if (constructorBuilder.isExternal) return;
-      // In case of duplicating constructors the earliest ones (those that
-      // declared towards the beginning of the file) come last in the list.
-      // To report errors on the first definition of a constructor, we need to
-      // iterate until that last element.
-      DeclaredSourceConstructorBuilder earliest = constructorBuilder;
-      Builder earliestBuilder = constructorBuilder;
-      while (earliestBuilder.next != null) {
-        earliestBuilder = earliestBuilder.next!;
-        if (earliestBuilder is DeclaredSourceConstructorBuilder) {
-          earliest = earliestBuilder;
-        }
-      }
-
-      bool isRedirecting = false;
-      for (Initializer initializer in earliest.constructor.initializers) {
-        if (initializer is RedirectingInitializer) {
-          isRedirecting = true;
-        }
-      }
-      if (!isRedirecting) {
-        Set<SourceFieldBuilder> fields =
-            earliest.takeInitializedFields() ?? const {};
-        constructorInitializedFields[earliest] = fields;
-        (initializedFields ??= new Set<SourceFieldBuilder>.identity())
-            .addAll(fields);
-      }
+      if (constructorBuilder.isEffectivelyExternal) return;
+      if (constructorBuilder.isEffectivelyRedirecting) return;
+      Set<SourceFieldBuilder> fields =
+          constructorBuilder.takeInitializedFields() ?? const {};
+      constructorInitializedFields[constructorBuilder] = fields;
+      (initializedFields ??= new Set<SourceFieldBuilder>.identity())
+          .addAll(fields);
     });
 
     // Run through all fields that aren't initialized by any constructor, and
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index 1248d20..a9cbb2b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -218,12 +218,6 @@
   return a.fileOffset.compareTo(b.fileOffset);
 }
 
-bool isRedirectingGenerativeConstructorImplementation(Constructor constructor) {
-  List<Initializer> initializers = constructor.initializers;
-  return initializers.length == 1 &&
-      initializers.single is RedirectingInitializer;
-}
-
 List<Combinator>? toKernelCombinators(
     List<CombinatorBuilder>? fastaCombinators) {
   if (fastaCombinators == null) {
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index 65a2fa5..f7b1b47 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -131,12 +131,64 @@
             debugName: debugName,
             isModifiable: isModifiable);
 
-  Iterator<Builder> get iterator {
-    return new ScopeLocalDeclarationIterator(this);
+  /// Returns an iterator of all members and setters mapped in this scope,
+  /// including duplicate members mapped to the same name.
+  ///
+  /// The iterator does _not_ include the members and setters mapped in the
+  /// [parent] scope.
+  Iterator<Builder> get unfilteredIterator {
+    return new ScopeIterator(this);
   }
 
-  NameIterator get nameIterator {
-    return new ScopeLocalDeclarationNameIterator(this);
+  /// Returns an iterator of all members and setters mapped in this scope,
+  /// including duplicate members mapped to the same name.
+  ///
+  /// The iterator does _not_ include the members and setters mapped in the
+  /// [parent] scope.
+  ///
+  /// Compared to [unfilteredIterator] this iterator also gives access to the
+  /// name that the builders are mapped to.
+  NameIterator get unfilteredNameIterator {
+    return new ScopeNameIterator(this);
+  }
+
+  /// Returns a filtered iterator of members and setters mapped in this scope.
+  ///
+  /// Only members of type [T] are included. If [parent] is provided, on members
+  /// declared in [parent] are included. If [includeDuplicates] is `true`, all
+  /// duplicates of the same name are included, otherwise, only the first
+  /// declared member is included. If [includeAugmentations] is `true`, both
+  /// original and augmenting/patching members are included, otherwise, only
+  /// original members are included.
+  Iterator<T> filteredIterator<T extends Builder>(
+      {Builder? parent,
+      required bool includeDuplicates,
+      required bool includeAugmentations}) {
+    return new FilteredIterator<T>(unfilteredIterator,
+        parent: parent,
+        includeDuplicates: includeDuplicates,
+        includeAugmentations: includeAugmentations);
+  }
+
+  /// Returns a filtered iterator of members and setters mapped in this scope.
+  ///
+  /// Only members of type [T] are included. If [parent] is provided, on members
+  /// declared in [parent] are included. If [includeDuplicates] is `true`, all
+  /// duplicates of the same name are included, otherwise, only the first
+  /// declared member is included. If [includeAugmentations] is `true`, both
+  /// original and augmenting/patching members are included, otherwise, only
+  /// original members are included.
+  ///
+  /// Compared to [filteredIterator] this iterator also gives access to the
+  /// name that the builders are mapped to.
+  NameIterator<T> filteredNameIterator<T extends Builder>(
+      {Builder? parent,
+      required bool includeDuplicates,
+      required bool includeAugmentations}) {
+    return new FilteredNameIterator<T>(unfilteredNameIterator,
+        parent: parent,
+        includeDuplicates: includeDuplicates,
+        includeAugmentations: includeAugmentations);
   }
 
   void debug() {
@@ -623,6 +675,58 @@
     local[name] = builder;
   }
 
+  /// Returns an iterator of all constructors mapped in this scope,
+  /// including duplicate constructors mapped to the same name.
+  Iterator<MemberBuilder> get unfilteredIterator =>
+      new ConstructorScopeIterator(this);
+
+  /// Returns an iterator of all constructors mapped in this scope,
+  /// including duplicate constructors mapped to the same name.
+  ///
+  /// Compared to [unfilteredIterator] this iterator also gives access to the
+  /// name that the builders are mapped to.
+  NameIterator<MemberBuilder> get unfilteredNameIterator =>
+      new ConstructorScopeNameIterator(this);
+
+  /// Returns a filtered iterator of constructors mapped in this scope.
+  ///
+  /// Only members of type [T] are included. If [parent] is provided, on members
+  /// declared in [parent] are included. If [includeDuplicates] is `true`, all
+  /// duplicates of the same name are included, otherwise, only the first
+  /// declared member is included. If [includeAugmentations] is `true`, both
+  /// original and augmenting/patching members are included, otherwise, only
+  /// original members are included.
+  Iterator<T> filteredIterator<T extends MemberBuilder>(
+      {Builder? parent,
+      required bool includeDuplicates,
+      required bool includeAugmentations}) {
+    return new FilteredIterator<T>(unfilteredIterator,
+        parent: parent,
+        includeDuplicates: includeDuplicates,
+        includeAugmentations: includeAugmentations);
+  }
+
+  /// Returns a filtered iterator of constructors mapped in this scope.
+  ///
+  /// Only members of type [T] are included. If [parent] is provided, on members
+  /// declared in [parent] are included. If [includeDuplicates] is `true`, all
+  /// duplicates of the same name are included, otherwise, only the first
+  /// declared member is included. If [includeAugmentations] is `true`, both
+  /// original and augmenting/patching members are included, otherwise, only
+  /// original members are included.
+  ///
+  /// Compared to [filteredIterator] this iterator also gives access to the
+  /// name that the builders are mapped to.
+  NameIterator<T> filteredNameIterator<T extends MemberBuilder>(
+      {Builder? parent,
+      required bool includeDuplicates,
+      required bool includeAugmentations}) {
+    return new FilteredNameIterator<T>(unfilteredNameIterator,
+        parent: parent,
+        includeDuplicates: includeDuplicates,
+        includeAugmentations: includeAugmentations);
+  }
+
   @override
   String toString() => "ConstructorScope($className, ${local.keys})";
 }
@@ -867,13 +971,15 @@
       : super(name, builder, charOffset, fileUri);
 }
 
-class ScopeLocalDeclarationIterator implements Iterator<Builder> {
+/// Iterator over builders mapped in a [Scope], including duplicates for each
+/// directly mapped builder.
+class ScopeIterator implements Iterator<Builder> {
   Iterator<Builder>? local;
   final Iterator<Builder> setters;
 
   Builder? _current;
 
-  ScopeLocalDeclarationIterator(Scope scope)
+  ScopeIterator(Scope scope)
       : local = scope._local.values.iterator,
         setters = scope._setters.values.iterator;
 
@@ -906,14 +1012,18 @@
   }
 }
 
-class ScopeLocalDeclarationNameIterator extends ScopeLocalDeclarationIterator
-    implements NameIterator {
+/// Iterator over builders mapped in a [Scope], including duplicates for each
+/// directly mapped builder.
+///
+/// Compared to [ScopeIterator] this iterator also gives
+/// access to the name that the builders are mapped to.
+class ScopeNameIterator extends ScopeIterator implements NameIterator<Builder> {
   Iterator<String>? localNames;
   final Iterator<String> setterNames;
 
   String? _name;
 
-  ScopeLocalDeclarationNameIterator(Scope scope)
+  ScopeNameIterator(Scope scope)
       : localNames = scope._local.keys.iterator,
         setterNames = scope._setters.keys.iterator,
         super(scope);
@@ -941,6 +1051,7 @@
       return true;
     } else {
       _current = null;
+      _name = null;
       return false;
     }
   }
@@ -950,3 +1061,162 @@
     return _name ?? (throw new StateError('No element'));
   }
 }
+
+/// Iterator over builders mapped in a [ConstructorScope], including duplicates
+/// for each directly mapped builder.
+class ConstructorScopeIterator implements Iterator<MemberBuilder> {
+  Iterator<MemberBuilder> local;
+
+  MemberBuilder? _current;
+
+  ConstructorScopeIterator(ConstructorScope scope)
+      : local = scope.local.values.iterator;
+
+  @override
+  bool moveNext() {
+    MemberBuilder? next = _current?.next as MemberBuilder?;
+    if (next != null) {
+      _current = next;
+      return true;
+    }
+    if (local.moveNext()) {
+      _current = local.current;
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  MemberBuilder get current {
+    return _current ?? (throw new StateError('No element'));
+  }
+}
+
+/// Iterator over builders mapped in a [ConstructorScope], including duplicates
+/// for each directly mapped builder.
+///
+/// Compared to [ConstructorScopeIterator] this iterator also gives
+/// access to the name that the builders are mapped to.
+class ConstructorScopeNameIterator extends ConstructorScopeIterator
+    implements NameIterator<MemberBuilder> {
+  final Iterator<String> localNames;
+
+  String? _name;
+
+  ConstructorScopeNameIterator(ConstructorScope scope)
+      : localNames = scope.local.keys.iterator,
+        super(scope);
+
+  @override
+  bool moveNext() {
+    MemberBuilder? next = _current?.next as MemberBuilder?;
+    if (next != null) {
+      _current = next;
+      return true;
+    }
+    if (local.moveNext()) {
+      localNames.moveNext();
+      _current = local.current;
+      _name = localNames.current;
+      return true;
+    }
+    _current = null;
+    _name = null;
+    return false;
+  }
+
+  @override
+  String get name {
+    return _name ?? (throw new StateError('No element'));
+  }
+}
+
+/// Filtered builder [Iterator].
+class FilteredIterator<T extends Builder> implements Iterator<T> {
+  final Iterator<Builder> _iterator;
+  final Builder? parent;
+  final bool includeDuplicates;
+  final bool includeAugmentations;
+
+  FilteredIterator(this._iterator,
+      {required this.parent,
+      required this.includeDuplicates,
+      required this.includeAugmentations});
+
+  bool _include(Builder element) {
+    if (parent != null && element.parent != parent) return false;
+    if (!includeDuplicates && element.isDuplicate) return false;
+    if (!includeAugmentations && element.isPatch) return false;
+    return element is T;
+  }
+
+  @override
+  T get current => _iterator.current as T;
+
+  @override
+  bool moveNext() {
+    while (_iterator.moveNext()) {
+      Builder candidate = _iterator.current;
+      if (_include(candidate)) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
+
+/// Filtered [NameIterator].
+///
+/// Compared to [FilteredIterator] this iterator also gives
+/// access to the name that the builders are mapped to.
+class FilteredNameIterator<T extends Builder> implements NameIterator<T> {
+  final NameIterator<Builder> _iterator;
+  final Builder? parent;
+  final bool includeDuplicates;
+  final bool includeAugmentations;
+
+  FilteredNameIterator(this._iterator,
+      {required this.parent,
+      required this.includeDuplicates,
+      required this.includeAugmentations});
+
+  bool _include(Builder element) {
+    if (parent != null && element.parent != parent) return false;
+    if (!includeDuplicates && element.isDuplicate) return false;
+    if (!includeAugmentations && element.isPatch) return false;
+    return element is T;
+  }
+
+  @override
+  T get current => _iterator.current as T;
+
+  @override
+  String get name => _iterator.name;
+
+  @override
+  bool moveNext() {
+    while (_iterator.moveNext()) {
+      Builder candidate = _iterator.current;
+      if (_include(candidate)) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
+
+extension IteratorExtension<T extends Builder> on Iterator<T> {
+  void forEach(void Function(T) f) {
+    while (moveNext()) {
+      f(current);
+    }
+  }
+}
+
+extension NameIteratorExtension<T extends Builder> on NameIterator<T> {
+  void forEach(void Function(String, T) f) {
+    while (moveNext()) {
+      f(name, current);
+    }
+  }
+}
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 593d7b2..b4694d6 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
@@ -29,6 +29,7 @@
 import '../builder/library_builder.dart';
 import '../builder/member_builder.dart';
 import '../builder/metadata_builder.dart';
+import '../builder/name_iterator.dart';
 import '../builder/named_type_builder.dart';
 import '../builder/never_type_declaration_builder.dart';
 import '../builder/nullability_builder.dart';
@@ -164,54 +165,51 @@
         checkForInstanceVsStaticConflict: false,
         checkForMethodVsSetterConflict: false);
 
-    void buildBuilders(String name, Builder? declaration) {
-      while (declaration != null) {
-        if (declaration.parent != this) {
-          if (declaration.parent?.origin != this) {
-            if (fileUri != declaration.parent?.fileUri) {
-              unexpected("$fileUri", "${declaration.parent?.fileUri}",
-                  charOffset, fileUri);
+    void buildBuilders(Builder declaration) {
+      if (declaration.parent != this) {
+        if (declaration.parent?.origin != this) {
+          if (fileUri != declaration.parent?.fileUri) {
+            unexpected("$fileUri", "${declaration.parent?.fileUri}", charOffset,
+                fileUri);
+          } else {
+            unexpected(
+                fullNameForErrors,
+                declaration.parent?.fullNameForErrors ?? '',
+                charOffset,
+                fileUri);
+          }
+        }
+      } else if (declaration is SourceMemberBuilder) {
+        SourceMemberBuilder memberBuilder = declaration;
+        memberBuilder
+            .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
+          member.parent = cls;
+          if (!memberBuilder.isPatch &&
+              !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 {
-              unexpected(
-                  fullNameForErrors,
-                  declaration.parent?.fullNameForErrors ?? '',
-                  charOffset,
-                  fileUri);
+              unhandled("${member.runtimeType}", "getMember", member.fileOffset,
+                  member.fileUri);
             }
           }
-        } else if (declaration is SourceMemberBuilder) {
-          SourceMemberBuilder memberBuilder = declaration;
-          memberBuilder
-              .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
-            member.parent = cls;
-            if (!memberBuilder.isPatch &&
-                !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);
-              }
-            }
-          });
-        } else {
-          unhandled("${declaration.runtimeType}", "buildBuilders",
-              declaration.charOffset, declaration.fileUri);
-        }
-        declaration = declaration.next;
+        });
+      } else {
+        unhandled("${declaration.runtimeType}", "buildBuilders",
+            declaration.charOffset, declaration.fileUri);
       }
     }
 
-    scope.forEach(buildBuilders);
-    constructorScope.forEach(buildBuilders);
+    scope.unfilteredIterator.forEach(buildBuilders);
+    constructorScope.unfilteredIterator.forEach(buildBuilders);
     if (supertypeBuilder != null) {
       supertypeBuilder = _checkSupertype(supertypeBuilder!);
     }
@@ -343,7 +341,7 @@
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
-    void build(String ignore, Builder declaration) {
+    void build(Builder declaration) {
       SourceMemberBuilder member = declaration as SourceMemberBuilder;
       member.buildOutlineExpressions(
           classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
@@ -358,57 +356,28 @@
       }
     }
 
-    constructorScope.forEach(build);
-    scope.forEach(build);
+    constructorScope
+        .filteredIterator(
+            parent: this, includeDuplicates: false, includeAugmentations: true)
+        .forEach(build);
+    scope
+        .filteredIterator(
+            parent: this, includeDuplicates: false, includeAugmentations: true)
+        .forEach(build);
   }
 
   @override
   void forEach(void f(String name, Builder builder)) {
-    if (isPatch) {
-      actualOrigin!.forEach(f);
-    } else {
-      scope.forEach(f);
-      List<SourceClassBuilder>? patchClasses = _patches;
-      if (patchClasses != null) {
-        for (SourceClassBuilder patchClass in patchClasses) {
-          patchClass.scope.forEach((String name, Builder builder) {
-            if (!builder.isPatch) {
-              f(name, builder);
-            }
-          });
-        }
-      }
-    }
+    new ClassMemberNameIterator(this, includeDuplicates: false).forEach(f);
   }
 
   @override
   void forEachConstructor(void Function(String, MemberBuilder) f) {
-    if (isPatch) {
-      actualOrigin!.forEachConstructor(f);
-    } else {
-      constructorScope.forEach(f);
-      List<SourceClassBuilder>? patchClasses = _patches;
-      if (patchClasses != null) {
-        for (SourceClassBuilder patchClass in patchClasses) {
-          patchClass.constructorScope
-              .forEach((String name, MemberBuilder builder) {
-            if (!builder.isPatch) {
-              f(name, builder);
-            }
-          });
-        }
-      }
-    }
+    new ClassConstructorNameIterator(this, includeDuplicates: false).forEach(f);
   }
 
   void forEachDeclaredField(
       void Function(String name, SourceFieldBuilder fieldBuilder) callback) {
-    void callbackFilteringFieldBuilders(String name, Builder builder) {
-      if (builder is SourceFieldBuilder) {
-        callback(name, builder);
-      }
-    }
-
     // Currently, fields can't be patched, but can be injected.  When the fields
     // will be made available for patching, the following code should iterate
     // first over the fields from the patch and then -- over the fields in the
@@ -427,37 +396,18 @@
                     .toSet())
                 .isEmpty),
         "Detected an attempt to patch a field.");
-    List<SourceClassBuilder>? patchClasses = _patches;
-    if (patchClasses != null) {
-      for (SourceClassBuilder patchClass in patchClasses) {
-        patchClass.scope.forEach(callbackFilteringFieldBuilders);
-      }
-    }
-    scope.forEach(callbackFilteringFieldBuilders);
+    new ClassMemberNameIterator<SourceFieldBuilder>(this,
+            includeDuplicates: false)
+        .forEach(callback);
   }
 
   void forEachDeclaredConstructor(
       void Function(
               String name, DeclaredSourceConstructorBuilder constructorBuilder)
           callback) {
-    Set<String> visitedConstructorNames = {};
-    void callbackFilteringFieldBuilders(String name, Builder builder) {
-      if (builder is DeclaredSourceConstructorBuilder &&
-          visitedConstructorNames.add(builder.name)) {
-        callback(name, builder);
-      }
-    }
-
-    // Constructors can be patched, so iterate first over constructors in the
-    // patch, and then over constructors in the original declaration skipping
-    // those with the names that are in the patch.
-    List<SourceClassBuilder>? patchClasses = _patches;
-    if (patchClasses != null) {
-      for (SourceClassBuilder patchClass in patchClasses) {
-        patchClass.constructorScope.forEach(callbackFilteringFieldBuilders);
-      }
-    }
-    constructorScope.forEach(callbackFilteringFieldBuilders);
+    new ClassConstructorNameIterator<DeclaredSourceConstructorBuilder>(this,
+            includeDuplicates: false)
+        .forEach(callback);
   }
 
   /// Looks up the constructor by [name] on the class built by this class
@@ -1399,24 +1349,25 @@
 
     int count = 0;
 
-    void buildMembers(String name, Builder builder) {
+    void buildMembers(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;
+      if (builder is SourceMemberBuilder) {
+        count += builder.buildBodyNodes((Member member, BuiltMemberKind kind) {
+          _buildMember(builder, member, kind);
+        });
       }
     }
 
-    scope.forEach(buildMembers);
-    constructorScope.forEach(buildMembers);
+    scope
+        .filteredIterator(
+            parent: this, includeDuplicates: true, includeAugmentations: true)
+        .forEach(buildMembers);
+    constructorScope
+        .filteredIterator(
+            parent: this, includeDuplicates: true, includeAugmentations: true)
+        .forEach(buildMembers);
     return count;
   }
 
@@ -2856,3 +2807,103 @@
   void checkTypes(
       SourceLibraryBuilder library, TypeEnvironment typeEnvironment) {}
 }
+
+class ClassMemberNameIterator<T extends Builder> implements NameIterator<T> {
+  NameIterator<T>? _iterator;
+  Iterator<SourceClassBuilder>? augmentationBuilders;
+  final bool includeDuplicates;
+
+  factory ClassMemberNameIterator(SourceClassBuilder classBuilder,
+      {required bool includeDuplicates}) {
+    return new ClassMemberNameIterator._(classBuilder.origin,
+        includeDuplicates: includeDuplicates);
+  }
+
+  ClassMemberNameIterator._(SourceClassBuilder classBuilder,
+      {required this.includeDuplicates})
+      : _iterator = classBuilder.scope.filteredNameIterator<T>(
+            parent: classBuilder,
+            includeDuplicates: includeDuplicates,
+            includeAugmentations: false),
+        augmentationBuilders = classBuilder._patches?.iterator;
+
+  @override
+  bool moveNext() {
+    if (_iterator != null) {
+      if (_iterator!.moveNext()) {
+        return true;
+      }
+    }
+    if (augmentationBuilders != null && augmentationBuilders!.moveNext()) {
+      SourceClassBuilder augmentationClassBuilder =
+          augmentationBuilders!.current;
+      _iterator = augmentationClassBuilder.scope.filteredNameIterator<T>(
+          parent: augmentationClassBuilder,
+          includeDuplicates: includeDuplicates,
+          includeAugmentations: false);
+    }
+    if (_iterator != null) {
+      if (_iterator!.moveNext()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @override
+  T get current => _iterator?.current ?? (throw new StateError('No element'));
+
+  @override
+  String get name => _iterator?.name ?? (throw new StateError('No element'));
+}
+
+class ClassConstructorNameIterator<T extends MemberBuilder>
+    implements NameIterator<T> {
+  NameIterator<T>? _iterator;
+  Iterator<SourceClassBuilder>? augmentationBuilders;
+  final bool includeDuplicates;
+
+  factory ClassConstructorNameIterator(SourceClassBuilder classBuilder,
+      {required bool includeDuplicates}) {
+    return new ClassConstructorNameIterator._(classBuilder.origin,
+        includeDuplicates: includeDuplicates);
+  }
+
+  ClassConstructorNameIterator._(SourceClassBuilder classBuilder,
+      {required this.includeDuplicates})
+      : _iterator = classBuilder.constructorScope.filteredNameIterator<T>(
+            parent: classBuilder,
+            includeDuplicates: includeDuplicates,
+            includeAugmentations: false),
+        augmentationBuilders = classBuilder._patches?.iterator;
+
+  @override
+  bool moveNext() {
+    if (_iterator != null) {
+      if (_iterator!.moveNext()) {
+        return true;
+      }
+    }
+    if (augmentationBuilders != null && augmentationBuilders!.moveNext()) {
+      SourceClassBuilder augmentationClassBuilder =
+          augmentationBuilders!.current;
+      _iterator = augmentationClassBuilder.constructorScope
+          .filteredNameIterator<T>(
+              parent: augmentationClassBuilder,
+              includeDuplicates: includeDuplicates,
+              includeAugmentations: false);
+    }
+    if (_iterator != null) {
+      if (_iterator!.moveNext()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @override
+  T get current => _iterator?.current ?? (throw new StateError('No element'));
+
+  @override
+  String get name => _iterator?.name ?? (throw new StateError('No element'));
+}
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 731b63e..bec8ff9 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
@@ -33,8 +33,6 @@
         TypeDependency,
         finishConstructorPatch,
         finishProcedurePatch;
-import '../kernel/utils.dart'
-    show isRedirectingGenerativeConstructorImplementation;
 import '../messages.dart'
     show
         LocatedMessage,
@@ -64,6 +62,13 @@
 
   void addSuperParameterDefaultValueCloners(
       List<DelayedDefaultValueCloner> delayedDefaultValueCloners);
+
+  /// Returns `true` if this constructor is an redirecting generative
+  /// constructor.
+  ///
+  /// It is considered redirecting if it has at least one redirecting
+  /// initializer.
+  bool get isRedirecting;
 }
 
 class DeclaredSourceConstructorBuilder extends SourceFunctionBuilderImpl
@@ -194,8 +199,51 @@
   ProcedureKind? get kind => null;
 
   @override
-  bool get isRedirectingGenerativeConstructor {
-    return isRedirectingGenerativeConstructorImplementation(_constructor);
+  bool get isRedirecting {
+    for (Initializer initializer in _constructor.initializers) {
+      if (initializer is RedirectingInitializer) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /// Returns `true` if this constructor, including its augmentations, is
+  /// external.
+  ///
+  /// An augmented constructor is considered external if all of the origin
+  /// and augmentation constructors are external.
+  bool get isEffectivelyExternal {
+    bool isExternal = this.isExternal;
+    if (isExternal) {
+      List<SourceConstructorBuilder>? patches = _patches;
+      if (patches != null) {
+        for (SourceConstructorBuilder patch in patches) {
+          isExternal &= patch.isExternal;
+        }
+      }
+    }
+    return isExternal;
+  }
+
+  /// Returns `true` if this constructor or any of its augmentations are
+  /// redirecting.
+  ///
+  /// An augmented constructor is considered redirecting if any of the origin
+  /// or augmentation constructors is redirecting. Since it is an error if more
+  /// than one is redirecting, only one can be redirecting in the without
+  /// errors.
+  bool get isEffectivelyRedirecting {
+    bool isRedirecting = this.isRedirecting;
+    if (!isRedirecting) {
+      List<SourceConstructorBuilder>? patches = _patches;
+      if (patches != null) {
+        for (SourceConstructorBuilder patch in patches) {
+          isRedirecting |= patch.isRedirecting;
+        }
+      }
+    }
+    return isRedirecting;
   }
 
   @override
@@ -765,7 +813,11 @@
   /// The field can be initialized either via an initializing formal or via an
   /// entry in the constructor initializer list.
   void registerInitializedField(SourceFieldBuilder fieldBuilder) {
-    (_initializedFields ??= {}).add(fieldBuilder);
+    if (isPatch) {
+      origin.registerInitializedField(fieldBuilder);
+    } else {
+      (_initializedFields ??= {}).add(fieldBuilder);
+    }
   }
 
   /// Returns the fields registered as initialized by this constructor.
@@ -834,6 +886,16 @@
       super.libraryBuilder as SourceLibraryBuilder;
 
   @override
+  bool get isRedirecting {
+    for (Initializer initializer in constructor.initializers) {
+      if (initializer is RedirectingInitializer) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @override
   void inferFormalTypes(ClassHierarchyBase hierarchy) {
     if (_immediatelyDefiningConstructor is SourceConstructorBuilder) {
       (_immediatelyDefiningConstructor as SourceConstructorBuilder)
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 874a967..9ed08c9 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
@@ -102,43 +102,40 @@
     ClassBuilder objectClassBuilder =
         coreLibrary.lookupLocalMember('Object', required: true) as ClassBuilder;
 
-    void buildBuilders(String name, Builder? declaration) {
-      while (declaration != null) {
-        Builder? objectGetter = objectClassBuilder.lookupLocalMember(name);
-        Builder? objectSetter =
-            objectClassBuilder.lookupLocalMember(name, setter: true);
-        if (objectGetter != null && !objectGetter.isStatic ||
-            objectSetter != null && !objectSetter.isStatic) {
-          addProblem(
-              templateExtensionMemberConflictsWithObjectMember
-                  .withArguments(name),
-              declaration.charOffset,
-              name.length);
-        }
-        if (declaration.parent != this) {
-          if (fileUri != declaration.parent!.fileUri) {
-            unexpected("$fileUri", "${declaration.parent!.fileUri}", charOffset,
-                fileUri);
-          } else {
-            unexpected(fullNameForErrors, declaration.parent!.fullNameForErrors,
-                charOffset, fileUri);
-          }
-        } else if (declaration is SourceMemberBuilder) {
-          SourceMemberBuilder memberBuilder = declaration;
-          memberBuilder
-              .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
-            _buildMember(memberBuilder, member, memberKind,
-                addMembersToLibrary: addMembersToLibrary);
-          });
+    void buildBuilders(String name, Builder declaration) {
+      Builder? objectGetter = objectClassBuilder.lookupLocalMember(name);
+      Builder? objectSetter =
+          objectClassBuilder.lookupLocalMember(name, setter: true);
+      if (objectGetter != null && !objectGetter.isStatic ||
+          objectSetter != null && !objectSetter.isStatic) {
+        addProblem(
+            templateExtensionMemberConflictsWithObjectMember
+                .withArguments(name),
+            declaration.charOffset,
+            name.length);
+      }
+      if (declaration.parent != this) {
+        if (fileUri != declaration.parent!.fileUri) {
+          unexpected("$fileUri", "${declaration.parent!.fileUri}", charOffset,
+              fileUri);
         } else {
-          unhandled("${declaration.runtimeType}", "buildBuilders",
-              declaration.charOffset, declaration.fileUri);
+          unexpected(fullNameForErrors, declaration.parent!.fullNameForErrors,
+              charOffset, fileUri);
         }
-        declaration = declaration.next;
+      } else if (declaration is SourceMemberBuilder) {
+        SourceMemberBuilder memberBuilder = declaration;
+        memberBuilder
+            .buildOutlineNodes((Member member, BuiltMemberKind memberKind) {
+          _buildMember(memberBuilder, member, memberKind,
+              addMembersToLibrary: addMembersToLibrary);
+        });
+      } else {
+        unhandled("${declaration.runtimeType}", "buildBuilders",
+            declaration.charOffset, declaration.fileUri);
       }
     }
 
-    scope.forEach(buildBuilders);
+    scope.unfilteredNameIterator.forEach(buildBuilders);
 
     return _extension;
   }
@@ -237,17 +234,15 @@
 
   int buildBodyNodes({required bool addMembersToLibrary}) {
     int count = 0;
-    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;
-      }
+    scope
+        .filteredIterator<SourceMemberBuilder>(
+            parent: this, includeDuplicates: false, includeAugmentations: true)
+        .forEach((SourceMemberBuilder declaration) {
+      count +=
+          declaration.buildBodyNodes((Member member, BuiltMemberKind kind) {
+        _buildMember(declaration, member, kind,
+            addMembersToLibrary: addMembersToLibrary);
+      });
     });
     return count;
   }
@@ -287,13 +282,15 @@
       }
     }
 
-    void build(String ignore, Builder declaration) {
-      SourceMemberBuilder member = declaration as SourceMemberBuilder;
+    void build(SourceMemberBuilder member) {
       member.buildOutlineExpressions(
           classHierarchy, delayedActionPerformers, delayedDefaultValueCloners);
     }
 
-    scope.forEach(build);
+    scope
+        .filteredIterator<SourceMemberBuilder>(
+            parent: this, includeDuplicates: false, includeAugmentations: true)
+        .forEach(build);
   }
 }
 
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 599f467..25cc5e7 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
@@ -1064,7 +1064,7 @@
         checkForInstanceVsStaticConflict: false,
         checkForMethodVsSetterConflict: true);
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       _buildOutlineNodes(iterator.current, coreLibrary);
     }
@@ -1242,7 +1242,7 @@
       }
 
       part.validatePart(this, usedParts);
-      NameIterator partDeclarations = part.nameIterator;
+      NameIterator partDeclarations = part.localMembersNameIterator;
       while (partDeclarations.moveNext()) {
         String name = partDeclarations.name;
         Builder declaration = partDeclarations.current;
@@ -1340,7 +1340,7 @@
       }
     }
 
-    NameIterator iterator = nameIterator;
+    NameIterator iterator = localMembersNameIterator;
     while (iterator.moveNext()) {
       addToExportScope(iterator.name, iterator.current);
     }
@@ -1375,12 +1375,18 @@
       import.finalizeImports(this);
     }
     if (!explicitCoreImport) {
-      loader.coreLibrary.exportScope.forEach((String name, Builder member) {
+      loader.coreLibrary.exportScope
+          .filteredNameIterator(
+              includeDuplicates: false, includeAugmentations: false)
+          .forEach((String name, Builder member) {
         addToScope(name, member, -1, true);
       });
     }
 
-    exportScope.forEach((String name, Builder member) {
+    exportScope
+        .filteredNameIterator(
+            includeDuplicates: false, includeAugmentations: false)
+        .forEach((String name, Builder member) {
       if (member.parent != this) {
         if (member is DynamicTypeDeclarationBuilder) {
           assert(name == 'dynamic',
@@ -1483,7 +1489,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceClassBuilder) {
@@ -1512,7 +1518,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder member = iterator.current;
       if (member is SourceClassBuilder && !member.isPatch) {
@@ -1533,7 +1539,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder builder = iterator.current;
       if (builder is SourceClassBuilder) {
@@ -3031,7 +3037,7 @@
     MetadataBuilder.buildAnnotations(
         library, metadata, this, null, null, fileUri, scope);
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceClassBuilder) {
@@ -3908,7 +3914,7 @@
       }
     }
 
-    NameIterator originDeclarations = origin.nameIterator;
+    NameIterator originDeclarations = origin.localMembersNameIterator;
     while (originDeclarations.moveNext()) {
       String name = originDeclarations.name;
       Builder member = originDeclarations.current;
@@ -3930,7 +3936,7 @@
         }
       }
     }
-    NameIterator patchDeclarations = nameIterator;
+    NameIterator patchDeclarations = localMembersNameIterator;
     while (patchDeclarations.moveNext()) {
       String name = patchDeclarations.name;
       Builder member = patchDeclarations.current;
@@ -3961,7 +3967,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder builder = iterator.current;
       if (builder is SourceMemberBuilder) {
@@ -4461,7 +4467,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder declaration = iterator.current;
       if (declaration is SourceFieldBuilder) {
@@ -4892,7 +4898,7 @@
       }
     }
 
-    Iterator<Builder> iterator = this.iterator;
+    Iterator<Builder> iterator = localMembersIterator;
     while (iterator.moveNext()) {
       Builder? declaration = iterator.current;
       while (declaration != null) {
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 3de16c3..ff9e1ae 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1351,7 +1351,10 @@
         both.add(exported as SourceLibraryBuilder);
       }
       for (Export export in exported.exporters) {
-        exported.exportScope.forEach(export.addToExportScope);
+        exported.exportScope
+            .filteredNameIterator(
+                includeDuplicates: false, includeAugmentations: false)
+            .forEach(export.addToExportScope);
       }
     }
     bool wasChanged = false;
@@ -1359,7 +1362,10 @@
       wasChanged = false;
       for (SourceLibraryBuilder exported in both) {
         for (Export export in exported.exporters) {
-          exported.exportScope.forEach((String name, Builder member) {
+          exported.exportScope
+              .filteredNameIterator(
+                  includeDuplicates: false, includeAugmentations: false)
+              .forEach((String name, Builder member) {
             if (export.addToExportScope(name, member)) {
               wasChanged = true;
             }
@@ -1389,17 +1395,17 @@
     _builders.forEach((Uri uri, dynamic l) {
       SourceLibraryBuilder library = l;
       Set<Builder> members = new Set<Builder>();
-      Iterator<Builder> iterator = library.iterator;
+      Iterator<Builder> iterator = library.localMembersIterator;
       while (iterator.moveNext()) {
         members.add(iterator.current);
       }
       List<String> exports = <String>[];
-      library.exportScope.forEach((String name, Builder? member) {
-        while (member != null) {
-          if (!members.contains(member)) {
-            exports.add(name);
-          }
-          member = member.next;
+      library.exportScope
+          .filteredNameIterator(
+              includeDuplicates: true, includeAugmentations: false)
+          .forEach((String name, Builder member) {
+        if (!members.contains(member)) {
+          exports.add(name);
         }
       });
       if (exports.isNotEmpty) {
@@ -1445,7 +1451,7 @@
     Map<Uri, List<ClassBuilder>> macroLibraries = {};
 
     for (LibraryBuilder libraryBuilder in libraryBuilders) {
-      Iterator<Builder> iterator = libraryBuilder.iterator;
+      Iterator<Builder> iterator = libraryBuilder.localMembersIterator;
       while (iterator.moveNext()) {
         Builder builder = iterator.current;
         if (builder is ClassBuilder && builder.isMacro) {
@@ -1598,7 +1604,7 @@
       // TODO(johnniwinther): Handle patch libraries.
       LibraryMacroApplicationData libraryMacroApplicationData =
           new LibraryMacroApplicationData();
-      Iterator<Builder> iterator = libraryBuilder.iterator;
+      Iterator<Builder> iterator = libraryBuilder.localMembersIterator;
       while (iterator.moveNext()) {
         Builder builder = iterator.current;
         if (builder is SourceClassBuilder) {
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 af7e756..725eae1 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
@@ -108,8 +108,6 @@
   SourceLibraryBuilder get libraryBuilder =>
       super.libraryBuilder as SourceLibraryBuilder;
 
-  bool get isRedirectingGenerativeConstructor => false;
-
   @override
   bool get isAugmentation => modifiers & augmentMask != 0;
 
diff --git a/pkg/front_end/test/macros/application/data/tests/declarations.dart b/pkg/front_end/test/macros/application/data/tests/declarations.dart
index 77b616e..1229ca9 100644
--- a/pkg/front_end/test/macros/application/data/tests/declarations.dart
+++ b/pkg/front_end/test/macros/application/data/tests/declarations.dart
@@ -111,7 +111,7 @@
 void Class1Introspection() {
   print("constructors='','redirect','fact'");
   print("fields='instanceField1','instanceField2','instanceField3'");
-  print("methods='instanceMethod1','instanceGetter1','[]','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f','instanceSetter1','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f'");
+  print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f'");
 }
 
 
diff --git a/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect b/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect
index 5c344e0..7f55d9f 100644
--- a/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect
+++ b/pkg/front_end/test/macros/application/data/tests/declarations.dart.expect
@@ -81,7 +81,7 @@
 static method /* from org-dartlang-augmentation:/a/b/c/main.dart-10 */ Class1Introspection() → void {
   core::print("constructors='','redirect','fact'");
   core::print("fields='instanceField1','instanceField2','instanceField3'");
-  core::print("methods='instanceMethod1','instanceGetter1','[]','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f','instanceSetter1','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f'");
+  core::print("methods='instanceMethod1','instanceGetter1','[]','instanceSetter1','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f'");
 }
 static method /* from org-dartlang-augmentation:/a/b/c/main.dart-11 */ Class1GeneratedMethod_() → void {}
 static method /* from org-dartlang-augmentation:/a/b/c/main.dart-12 */ Class2_instanceMethod1GeneratedMethod_a() → void {}
diff --git a/pkg/front_end/test/patching/patching_test.dart b/pkg/front_end/test/patching/patching_test.dart
index e49039c..c020b195 100644
--- a/pkg/front_end/test/patching/patching_test.dart
+++ b/pkg/front_end/test/patching/patching_test.dart
@@ -16,6 +16,7 @@
 import 'package:front_end/src/fasta/source/source_factory_builder.dart';
 import 'package:front_end/src/fasta/source/source_member_builder.dart';
 import 'package:front_end/src/fasta/source/source_procedure_builder.dart';
+import 'package:front_end/src/fasta/scope.dart';
 import 'package:front_end/src/testing/id_testing_helper.dart';
 import 'package:front_end/src/testing/id_testing_utils.dart';
 import 'package:kernel/ast.dart';
@@ -138,7 +139,10 @@
     if (cls.isAbstract) {
       features.add(Tags.isAbstract);
     }
-    clsBuilder.scope.forEach((String name, Builder builder) {
+    clsBuilder.scope
+        .filteredNameIterator(
+            includeDuplicates: false, includeAugmentations: false)
+        .forEach((String name, Builder builder) {
       features.addElement(Tags.scope, name);
     });
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 8c0102f..4ca7632 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -1457,6 +1457,7 @@
 unescape
 unexact
 unexpectedly
+unfiltered
 unfinalized
 unfold
 unfolds
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
index b451599..8c1f6e6 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
@@ -28,6 +28,14 @@
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
 }
+@#C3
+class Class2 extends core::Object {
+  final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field;
+  constructor •(core::int field) → test::Class2
+    : test::Class2::field = field, test::Class2::injectedField = field, super core::Object::•()
+    ;
+}
 
 constants  {
   #C1 = true
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
index b451599..8c1f6e6 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.modular.expect
@@ -28,6 +28,14 @@
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
 }
+@#C3
+class Class2 extends core::Object {
+  final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field;
+  constructor •(core::int field) → test::Class2
+    : test::Class2::field = field, test::Class2::injectedField = field, super core::Object::•()
+    ;
+}
 
 constants  {
   #C1 = true
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
index ef6d09e..e8e0e75 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
@@ -24,10 +24,18 @@
     : self2::Class::defaultValue = defaultValue, super core::Object::•()
     ;
 }
+@_in::patch
+class Class2 extends core::Object {
+  final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field;
+  external constructor •(core::int field) → self2::Class2
+    ;
+}
 
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:44 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:16:9 -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 4, effectively constant: 3
+Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Extra constant evaluation: evaluated: 5, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect
index b451599..8c1f6e6 100644
--- a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect
@@ -28,6 +28,14 @@
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
 }
+@#C3
+class Class2 extends core::Object {
+  final field core::int injectedField /* from org-dartlang-testcase:///patch_lib.dart */;
+  field core::int field;
+  constructor •(core::int field) → test::Class2
+    : test::Class2::field = field, test::Class2::injectedField = field, super core::Object::•()
+    ;
+}
 
 constants  {
   #C1 = true
diff --git a/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart b/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart
index 2906fbf..927aabf 100644
--- a/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart
+++ b/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart
@@ -6,3 +6,9 @@
   external Class.generative({bool defaultValue: true});
   external const Class.constGenerative({bool defaultValue: true});
 }
+
+class Class2 {
+  int field;
+
+  external Class2(int field);
+}
diff --git a/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart b/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart
index 0c4899c..2d8f750 100644
--- a/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart
+++ b/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart
@@ -15,3 +15,10 @@
   @patch
   const Class.constGenerative({this.defaultValue: true});
 }
+
+@patch
+class Class2 {
+  final int injectedField;
+
+  Class2(this.field) : injectedField = field;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.expect
index 17c2eb1..1a322d0 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.expect
@@ -334,10 +334,6 @@
 //     return 0;
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: Field 'Foo' should be initialized because its type 'int' doesn't allow null.
-//   int Foo;
-//       ^^^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:7: Error: Field 'A' should be initialized because its type 'int' doesn't allow null.
 //   int A, Foo, B;
 //       ^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect
index 17c2eb1..1a322d0 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.modular.expect
@@ -334,10 +334,6 @@
 //     return 0;
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: Field 'Foo' should be initialized because its type 'int' doesn't allow null.
-//   int Foo;
-//       ^^^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:7: Error: Field 'A' should be initialized because its type 'int' doesn't allow null.
 //   int A, Foo, B;
 //       ^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.transformed.expect
index 17c2eb1..1a322d0 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.weak.transformed.expect
@@ -334,10 +334,6 @@
 //     return 0;
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:39:7: Error: Field 'Foo' should be initialized because its type 'int' doesn't allow null.
-//   int Foo;
-//       ^^^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:40:7: Error: Field 'A' should be initialized because its type 'int' doesn't allow null.
 //   int A, Foo, B;
 //       ^
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
index 42b4c7d..a2af944 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.expect
@@ -30,6 +30,11 @@
 //               this.y = 6;
 //                    ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
index 42b4c7d..a2af944 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.modular.expect
@@ -30,6 +30,11 @@
 //               this.y = 6;
 //                    ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
index 42b4c7d..a2af944 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.weak.transformed.expect
@@ -30,6 +30,11 @@
 //               this.y = 6;
 //                    ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Error: Final field 'y' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
index 6e42cfb..cc62f70 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.expect
@@ -1051,26 +1051,6 @@
 //   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
index 6e42cfb..cc62f70 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.strong.transformed.expect
@@ -1051,26 +1051,6 @@
 //   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
index 6e42cfb..cc62f70 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.expect
@@ -1051,26 +1051,6 @@
 //   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect
index 6e42cfb..cc62f70 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.modular.expect
@@ -1051,26 +1051,6 @@
 //   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
index 6e42cfb..cc62f70 100644
--- a/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/field_vs_setter.dart.weak.transformed.expect
@@ -1051,26 +1051,6 @@
 //   0.duplicateExtensionStaticFieldAndInstanceSetter2 =
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:39:14: Error: Final field 'duplicateInstanceFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:61:21: Error: Final field 'duplicateStaticFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:90:14: Error: Final field 'duplicateInstanceFieldAndStaticSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? duplicateInstanceFieldAndStaticSetter2 = null;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/field_vs_setter.dart:98:21: Error: Final field 'duplicateStaticFieldAndInstanceSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   static final int? duplicateStaticFieldAndInstanceSetter2 = null;
-//                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
index 7e8a8f2..1c0cc98 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.expect
@@ -488,16 +488,6 @@
 //   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter2 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter4 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
index 46e1b34..3256d38 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.strong.transformed.expect
@@ -488,16 +488,6 @@
 //   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter2 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter4 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
index 7e8a8f2..1c0cc98 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.expect
@@ -488,16 +488,6 @@
 //   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter2 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter4 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect
index 7e8a8f2..1c0cc98 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.modular.expect
@@ -488,16 +488,6 @@
 //   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter2 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter4 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
index 46e1b34..3256d38 100644
--- a/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/instance_duplicates.dart.weak.transformed.expect
@@ -488,16 +488,6 @@
 //   c.fieldAndFinalFieldAndSetter4 = c.fieldAndFinalFieldAndSetter4;
 //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:66:14: Error: Final field 'fieldAndFinalFieldAndSetter2' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter2 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/instance_duplicates.dart:75:14: Error: Final field 'fieldAndFinalFieldAndSetter4' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? fieldAndFinalFieldAndSetter4 = 0;
-//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 
