[cfe] Delay computation of synthesized type parameters and formals

This moves the computation of synthesized type parameters and formals
for constructors and extension (type) instance members from the fragment
creation to the builder creation.

Change-Id: I67403addbab1d5b675dccec376738ab9cd6f9dce
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/397906
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/front_end/lib/src/builder/class_builder.dart b/pkg/front_end/lib/src/builder/class_builder.dart
index b512c39..a3d4582 100644
--- a/pkg/front_end/lib/src/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/builder/class_builder.dart
@@ -89,9 +89,6 @@
 }
 
 abstract class ClassBuilder implements DeclarationBuilder, ClassMemberAccess {
-  /// The type parameters declared on a class, extension or mixin declaration.
-  List<NominalParameterBuilder>? get typeParameters;
-
   /// The type in the `extends` clause of a class declaration.
   ///
   /// Currently this also holds the synthesized super class for a mixin
diff --git a/pkg/front_end/lib/src/builder/declaration_builder.dart b/pkg/front_end/lib/src/builder/declaration_builder.dart
index b173f6cc..a4e9897 100644
--- a/pkg/front_end/lib/src/builder/declaration_builder.dart
+++ b/pkg/front_end/lib/src/builder/declaration_builder.dart
@@ -11,6 +11,11 @@
 
   ConstructorScope get constructorScope;
 
+  /// Type parameters declared on this declaration.
+  ///
+  /// This is `null` if the declaration is not generic.
+  List<NominalParameterBuilder>? get typeParameters;
+
   LibraryBuilder get libraryBuilder;
 
   @override
diff --git a/pkg/front_end/lib/src/builder/extension_builder.dart b/pkg/front_end/lib/src/builder/extension_builder.dart
index 52d2c3e..1f5fe87 100644
--- a/pkg/front_end/lib/src/builder/extension_builder.dart
+++ b/pkg/front_end/lib/src/builder/extension_builder.dart
@@ -5,11 +5,6 @@
 part of 'declaration_builders.dart';
 
 abstract class ExtensionBuilder implements DeclarationBuilder {
-  /// Type parameters declared on the extension.
-  ///
-  /// This is `null` if the extension is not generic.
-  List<NominalParameterBuilder>? get typeParameters;
-
   /// The type of the on-clause of the extension declaration.
   TypeBuilder get onType;
 
diff --git a/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart b/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart
index b9bdf8a..ffafbb8 100644
--- a/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/builder/extension_type_declaration_builder.dart
@@ -6,11 +6,6 @@
 
 abstract class ExtensionTypeDeclarationBuilder
     implements DeclarationBuilder, ClassMemberAccess {
-  /// Type parameters declared on the extension type declaration.
-  ///
-  /// This is `null` if the extension type declaration is not generic.
-  List<NominalParameterBuilder>? get typeParameters;
-
   /// The type of the underlying representation.
   DartType get declaredRepresentationType;
 
diff --git a/pkg/front_end/lib/src/builder/type_builder.dart b/pkg/front_end/lib/src/builder/type_builder.dart
index fad6fdd..b415fd7 100644
--- a/pkg/front_end/lib/src/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/builder/type_builder.dart
@@ -651,9 +651,11 @@
   String get fullName => name;
 
   @override
+  // Coverage-ignore(suite): Not run.
   int get fullNameOffset => nameOffset;
 
   @override
+  // Coverage-ignore(suite): Not run.
   int get fullNameLength => noLength;
 }
 
diff --git a/pkg/front_end/lib/src/fragment/constructor.dart b/pkg/front_end/lib/src/fragment/constructor.dart
index 22b3542..cc14d00 100644
--- a/pkg/front_end/lib/src/fragment/constructor.dart
+++ b/pkg/front_end/lib/src/fragment/constructor.dart
@@ -15,6 +15,7 @@
   final List<MetadataBuilder>? metadata;
   final OmittedTypeBuilder returnType;
   final List<NominalParameterBuilder>? typeParameters;
+  final NominalParameterNameSpace typeParameterNameSpace;
   final LookupScope typeParameterScope;
   final List<FormalParameterBuilder>? formals;
   final String? nativeMethodName;
@@ -33,6 +34,7 @@
       required this.metadata,
       required this.returnType,
       required this.typeParameters,
+      required this.typeParameterNameSpace,
       required this.typeParameterScope,
       required this.formals,
       required this.nativeMethodName,
diff --git a/pkg/front_end/lib/src/fragment/extension.dart b/pkg/front_end/lib/src/fragment/extension.dart
index 88a7510..562f439 100644
--- a/pkg/front_end/lib/src/fragment/extension.dart
+++ b/pkg/front_end/lib/src/fragment/extension.dart
@@ -66,6 +66,7 @@
     _extensionThisType = type;
   }
 
+  // Coverage-ignore(suite): Not run.
   /// Returns the 'extension this type' of the extension declaration prepared
   /// for by this builder.
   ///
diff --git a/pkg/front_end/lib/src/fragment/getter.dart b/pkg/front_end/lib/src/fragment/getter.dart
index a6eadf7..c99538f 100644
--- a/pkg/front_end/lib/src/fragment/getter.dart
+++ b/pkg/front_end/lib/src/fragment/getter.dart
@@ -17,6 +17,7 @@
   final List<MetadataBuilder>? metadata;
   final Modifiers modifiers;
   final TypeBuilder returnType;
+  final NominalParameterNameSpace typeParameterNameSpace;
   final List<NominalParameterBuilder>? typeParameters;
   final LookupScope typeParameterScope;
   final List<FormalParameterBuilder>? formals;
@@ -37,6 +38,7 @@
       required this.modifiers,
       required this.returnType,
       required this.typeParameters,
+      required this.typeParameterNameSpace,
       required this.typeParameterScope,
       required this.formals,
       required this.asyncModifier,
diff --git a/pkg/front_end/lib/src/fragment/method.dart b/pkg/front_end/lib/src/fragment/method.dart
index aa1369b..f64c5b5 100644
--- a/pkg/front_end/lib/src/fragment/method.dart
+++ b/pkg/front_end/lib/src/fragment/method.dart
@@ -17,6 +17,7 @@
   final List<MetadataBuilder>? metadata;
   final Modifiers modifiers;
   final TypeBuilder returnType;
+  final NominalParameterNameSpace typeParameterNameSpace;
   final List<NominalParameterBuilder>? typeParameters;
   final LookupScope typeParameterScope;
   final List<FormalParameterBuilder>? formals;
@@ -38,6 +39,7 @@
       required this.modifiers,
       required this.returnType,
       required this.typeParameters,
+      required this.typeParameterNameSpace,
       required this.typeParameterScope,
       required this.formals,
       required this.kind,
diff --git a/pkg/front_end/lib/src/fragment/setter.dart b/pkg/front_end/lib/src/fragment/setter.dart
index 3d30216..4a60f3c 100644
--- a/pkg/front_end/lib/src/fragment/setter.dart
+++ b/pkg/front_end/lib/src/fragment/setter.dart
@@ -17,6 +17,7 @@
   final List<MetadataBuilder>? metadata;
   final Modifiers modifiers;
   final TypeBuilder returnType;
+  final NominalParameterNameSpace typeParameterNameSpace;
   final List<NominalParameterBuilder>? typeParameters;
   final LookupScope typeParameterScope;
   final List<FormalParameterBuilder>? formals;
@@ -37,6 +38,7 @@
       required this.modifiers,
       required this.returnType,
       required this.typeParameters,
+      required this.typeParameterNameSpace,
       required this.typeParameterScope,
       required this.formals,
       required this.asyncModifier,
diff --git a/pkg/front_end/lib/src/source/source_builder_factory.dart b/pkg/front_end/lib/src/source/source_builder_factory.dart
index efee0bb..aad1b87 100644
--- a/pkg/front_end/lib/src/source/source_builder_factory.dart
+++ b/pkg/front_end/lib/src/source/source_builder_factory.dart
@@ -94,7 +94,7 @@
   /// concrete target.
   Map<SourceClassBuilder, TypeBuilder>? _mixinApplications = {};
 
-  final List<NominalParameterBuilder> _unboundNominalVariables = [];
+  final List<NominalParameterBuilder> _unboundNominalParameters = [];
 
   final List<StructuralParameterBuilder> _unboundStructuralVariables = [];
 
@@ -983,7 +983,7 @@
   static TypeBuilder? applyMixins(
       {required ProblemReporting problemReporting,
       required SourceLibraryBuilder enclosingLibraryBuilder,
-      required List<NominalParameterBuilder> unboundNominalVariables,
+      required List<NominalParameterBuilder> unboundNominalParameters,
       required TypeBuilder? supertype,
       required MixinApplicationBuilder? mixinApplicationBuilder,
       required int startOffset,
@@ -1120,7 +1120,7 @@
                 new NominalParameterNameSpace();
 
             NominalParameterCopy nominalVariableCopy = copyTypeParameters(
-                unboundNominalVariables, typeParameters,
+                unboundNominalParameters, typeParameters,
                 kind: TypeParameterKind.extensionSynthesized,
                 instanceTypeParameterAccess:
                     InstanceTypeParameterAccessState.Allowed)!;
@@ -1363,116 +1363,17 @@
       switch (declarationFragment) {
         case ExtensionFragment():
         case ExtensionTypeFragment():
-          NominalParameterCopy? nominalVariableCopy = copyTypeParameters(
-              _unboundNominalVariables, declarationFragment.typeParameters,
-              kind: TypeParameterKind.extensionSynthesized,
-              instanceTypeParameterAccess:
-                  InstanceTypeParameterAccessState.Allowed);
-
           // Discard type parameters declared on the constructor. It's not
           // allowed, an error has already been issued and it will cause
           // crashes later if they are kept/added to the ones from the parent.
           // TODO(johnniwinther): This will cause us issuing errors about not
           // knowing the names of what we discard here. Is there a way to
           // preserve them?
-          typeParameters = nominalVariableCopy?.newParameterBuilders;
+          typeParameters = null;
         case ClassFragment():
         case MixinFragment():
         case EnumFragment():
       }
-    } else if (!isStatic) {
-      switch (declarationFragment) {
-        case ExtensionFragment():
-          NominalParameterCopy? nominalVariableCopy = copyTypeParameters(
-              _unboundNominalVariables, declarationFragment.typeParameters,
-              kind: TypeParameterKind.extensionSynthesized,
-              instanceTypeParameterAccess:
-                  InstanceTypeParameterAccessState.Allowed);
-
-          if (nominalVariableCopy != null) {
-            if (typeParameters != null) {
-              typeParameters = nominalVariableCopy.newParameterBuilders
-                ..addAll(typeParameters);
-            } else {
-              typeParameters = nominalVariableCopy.newParameterBuilders;
-            }
-          }
-
-          TypeBuilder thisType = declarationFragment.extensionThisType;
-          if (nominalVariableCopy != null) {
-            thisType = new SynthesizedTypeBuilder(
-                thisType,
-                nominalVariableCopy.newToOldParameterMap,
-                nominalVariableCopy.substitutionMap);
-          }
-          List<FormalParameterBuilder> synthesizedFormals = [
-            new FormalParameterBuilder(FormalParameterKind.requiredPositional,
-                Modifiers.Final, thisType, syntheticThisName, nameOffset,
-                fileUri: _compilationUnit.fileUri,
-                isExtensionThis: true,
-                hasImmediatelyDeclaredInitializer: false)
-          ];
-          if (formals != null) {
-            synthesizedFormals.addAll(formals);
-          }
-          formals = synthesizedFormals;
-        case ExtensionTypeFragment():
-          NominalParameterCopy? nominalVariableCopy = copyTypeParameters(
-              _unboundNominalVariables, declarationFragment.typeParameters,
-              kind: TypeParameterKind.extensionSynthesized,
-              instanceTypeParameterAccess:
-                  InstanceTypeParameterAccessState.Allowed);
-
-          if (nominalVariableCopy != null) {
-            if (typeParameters != null) {
-              typeParameters = nominalVariableCopy.newParameterBuilders
-                ..addAll(typeParameters);
-            } else {
-              typeParameters = nominalVariableCopy.newParameterBuilders;
-            }
-          }
-
-          TypeBuilder thisType = addNamedType(
-              new SyntheticTypeName(declarationFragment.name, nameOffset),
-              const NullabilityBuilder.omitted(),
-              declarationFragment.typeParameters != null
-                  ? new List<TypeBuilder>.generate(
-                      declarationFragment.typeParameters!.length,
-                      (int index) =>
-                          new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
-                              typeParameters![index],
-                              const NullabilityBuilder.omitted(),
-                              instanceTypeParameterAccess:
-                                  InstanceTypeParameterAccessState.Allowed))
-                  : null,
-              nameOffset,
-              instanceTypeParameterAccess:
-                  InstanceTypeParameterAccessState.Allowed);
-
-          if (nominalVariableCopy != null) {
-            thisType = new SynthesizedTypeBuilder(
-                thisType,
-                nominalVariableCopy.newToOldParameterMap,
-                nominalVariableCopy.substitutionMap);
-          }
-          List<FormalParameterBuilder> synthesizedFormals = [
-            new FormalParameterBuilder(FormalParameterKind.requiredPositional,
-                Modifiers.Final, thisType, syntheticThisName, nameOffset,
-                fileUri: _compilationUnit.fileUri,
-                isExtensionThis: true,
-                hasImmediatelyDeclaredInitializer: false)
-          ];
-          if (formals != null) {
-            synthesizedFormals.addAll(formals);
-          }
-          formals = synthesizedFormals;
-        case ClassFragment():
-        case MixinFragment():
-        case EnumFragment():
-      }
-    }
-
-    if (isConstructor) {
       ConstructorName constructorName =
           computeAndValidateConstructorName(declarationFragment, identifier);
       addConstructor(
@@ -1580,7 +1481,7 @@
         "Unexpected type scope: $typeParameterScope.");
 
     NominalParameterCopy? nominalVariableCopy = copyTypeParameters(
-        _unboundNominalVariables, _declarationFragments.current.typeParameters,
+        _unboundNominalParameters, _declarationFragments.current.typeParameters,
         kind: TypeParameterKind.extensionSynthesized,
         instanceTypeParameterAccess: InstanceTypeParameterAccessState.Allowed);
     List<NominalParameterBuilder>? typeParameters =
@@ -1660,6 +1561,8 @@
     TypeScope typeParameterScope = _typeScopes.pop();
     assert(typeParameterScope.kind == TypeScopeKind.memberTypeParameters,
         "Unexpected type scope: $typeParameterScope.");
+    NominalParameterNameSpace typeParameterNameSpace =
+        _nominalParameterNameSpaces.pop();
 
     ConstructorFragment fragment = new ConstructorFragment(
         constructorName: constructorName,
@@ -1671,6 +1574,7 @@
         metadata: metadata,
         returnType: addInferableType(),
         typeParameters: typeParameters,
+        typeParameterNameSpace: typeParameterNameSpace,
         typeParameterScope: typeParameterScope.lookupScope,
         formals: formals,
         nativeMethodName: nativeMethodName,
@@ -1686,9 +1590,6 @@
             ? (beginInitializers ?? new Token.eof(-1))
             : null);
 
-    _nominalParameterNameSpaces.pop().addTypeParameters(
-        _problemReporting, typeParameters,
-        ownerName: constructorName.name, allowNameConflict: true);
     _addFragment(fragment);
     if (nativeMethodName != null) {
       _addNativeConstructorFragment(fragment);
@@ -1759,7 +1660,7 @@
         isFactory: true);
 
     List<NominalParameterBuilder>? typeParameters = copyTypeParameters(
-            _unboundNominalVariables, enclosingDeclaration.typeParameters,
+            _unboundNominalParameters, enclosingDeclaration.typeParameters,
             kind: TypeParameterKind.function,
             instanceTypeParameterAccess:
                 InstanceTypeParameterAccessState.Allowed)
@@ -1985,6 +1886,9 @@
         enclosingDeclaration?.kind ==
             DeclarationFragmentKind.extensionTypeDeclaration);
 
+    NominalParameterNameSpace typeParameterNameSpace =
+        _nominalParameterNameSpaces.pop();
+
     GetterFragment fragment = new GetterFragment(
         name: name,
         fileUri: _compilationUnit.fileUri,
@@ -1997,13 +1901,11 @@
         modifiers: modifiers,
         returnType: returnType ?? addInferableType(),
         typeParameters: typeParameters,
+        typeParameterNameSpace: typeParameterNameSpace,
         typeParameterScope: typeParameterScope.lookupScope,
         formals: formals,
         asyncModifier: asyncModifier,
         nativeMethodName: nativeMethodName);
-    _nominalParameterNameSpaces.pop().addTypeParameters(
-        _problemReporting, typeParameters,
-        ownerName: name, allowNameConflict: true);
     _addFragment(fragment);
     if (nativeMethodName != null) {
       _addNativeGetterFragment(fragment);
@@ -2047,6 +1949,9 @@
       returnType = addVoidType(nameOffset);
     }
 
+    NominalParameterNameSpace typeParameterNameSpace =
+        _nominalParameterNameSpaces.pop();
+
     SetterFragment fragment = new SetterFragment(
         name: name,
         fileUri: _compilationUnit.fileUri,
@@ -2059,13 +1964,11 @@
         modifiers: modifiers,
         returnType: returnType,
         typeParameters: typeParameters,
+        typeParameterNameSpace: typeParameterNameSpace,
         typeParameterScope: typeParameterScope.lookupScope,
         formals: formals,
         asyncModifier: asyncModifier,
         nativeMethodName: nativeMethodName);
-    _nominalParameterNameSpaces.pop().addTypeParameters(
-        _problemReporting, typeParameters,
-        ownerName: name, allowNameConflict: true);
     _addFragment(fragment);
     if (nativeMethodName != null) {
       _addNativeSetterFragment(fragment);
@@ -2116,6 +2019,9 @@
       }
     }
 
+    NominalParameterNameSpace typeParameterNameSpace =
+        _nominalParameterNameSpaces.pop();
+
     MethodFragment fragment = new MethodFragment(
         name: name,
         fileUri: _compilationUnit.fileUri,
@@ -2128,14 +2034,12 @@
         modifiers: modifiers,
         returnType: returnType ?? addInferableType(),
         typeParameters: typeParameters,
+        typeParameterNameSpace: typeParameterNameSpace,
         typeParameterScope: typeParameterScope.lookupScope,
         formals: formals,
         kind: kind,
         asyncModifier: asyncModifier,
         nativeMethodName: nativeMethodName);
-    _nominalParameterNameSpaces.pop().addTypeParameters(
-        _problemReporting, typeParameters,
-        ownerName: name, allowNameConflict: true);
     _addFragment(fragment);
     if (nativeMethodName != null) {
       _addNativeMethodFragment(fragment);
@@ -2360,7 +2264,7 @@
         variableName, charOffset, fileUri,
         bound: bound, metadata: metadata, kind: kind, isWildcard: isWildcard);
 
-    _unboundNominalVariables.add(builder);
+    _unboundNominalParameters.add(builder);
     return builder;
   }
 
@@ -2478,14 +2382,14 @@
       Map<NominalParameterBuilder, SourceLibraryBuilder> nominalVariables,
       Map<StructuralParameterBuilder, SourceLibraryBuilder>
           structuralVariables) {
-    for (NominalParameterBuilder builder in _unboundNominalVariables) {
+    for (NominalParameterBuilder builder in _unboundNominalParameters) {
       nominalVariables[builder] = libraryBuilder;
     }
     for (StructuralParameterBuilder builder in _unboundStructuralVariables) {
       structuralVariables[builder] = libraryBuilder;
     }
     _unboundStructuralVariables.clear();
-    _unboundNominalVariables.clear();
+    _unboundNominalParameters.clear();
   }
 
   @override
diff --git a/pkg/front_end/lib/src/source/source_builder_mixins.dart b/pkg/front_end/lib/src/source/source_builder_mixins.dart
index 55dc90c..921d49f 100644
--- a/pkg/front_end/lib/src/source/source_builder_mixins.dart
+++ b/pkg/front_end/lib/src/source/source_builder_mixins.dart
@@ -250,11 +250,6 @@
       Reference memberReference,
       Reference? tearOffReference);
 
-  /// Type parameters declared.
-  ///
-  /// This is `null` if the declaration is not generic.
-  List<NominalParameterBuilder>? get typeParameters;
-
   /// The scope in which the [typeParameters] are declared.
   LookupScope get typeParameterScope;
 
diff --git a/pkg/front_end/lib/src/source/source_library_builder.dart b/pkg/front_end/lib/src/source/source_library_builder.dart
index a524f42..e290919 100644
--- a/pkg/front_end/lib/src/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/source/source_library_builder.dart
@@ -720,7 +720,7 @@
         problemReporting: this,
         enclosingLibraryBuilder: this,
         mixinApplications: _mixinApplications!,
-        unboundNominalVariables: _unboundNominalVariables,
+        unboundNominalParameters: _unboundNominalParameters,
         indexedLibrary: indexedLibrary);
 
     Iterable<SourceLibraryBuilder>? augmentationLibraries =
@@ -1400,7 +1400,7 @@
     return count;
   }
 
-  final List<NominalParameterBuilder> _unboundNominalVariables = [];
+  final List<NominalParameterBuilder> _unboundNominalParameters = [];
 
   /// Adds all unbound nominal parameters to [nominalParameters] and unbound
   /// structural parameters to [structuralParameters], mapping them to this
@@ -1426,14 +1426,19 @@
       part.collectUnboundTypeParameters(
           this, nominalParameters, structuralParameters);
     }
-    for (NominalParameterBuilder builder in _unboundNominalVariables) {
+    for (NominalParameterBuilder builder in _unboundNominalParameters) {
       nominalParameters[builder] = this;
     }
-    _unboundNominalVariables.clear();
+    _unboundNominalParameters.clear();
 
     state = SourceLibraryBuilderState.unboundTypeParametersCollected;
   }
 
+  void registerUnboundNominalParameters(
+      List<NominalParameterBuilder> unboundNominalParameters) {
+    _unboundNominalParameters.addAll(unboundNominalParameters);
+  }
+
   /// Computes variances of type parameters on typedefs.
   ///
   /// The variance property of type parameters on typedefs is computed from the
diff --git a/pkg/front_end/lib/src/source/type_parameter_scope_builder.dart b/pkg/front_end/lib/src/source/type_parameter_scope_builder.dart
index 580d562..3832f56 100644
--- a/pkg/front_end/lib/src/source/type_parameter_scope_builder.dart
+++ b/pkg/front_end/lib/src/source/type_parameter_scope_builder.dart
@@ -2,9 +2,11 @@
 // 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:_fe_analyzer_shared/src/parser/formal_parameter_kind.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/reference_from_index.dart';
 
+import '../api_prototype/lowering_predicates.dart';
 import '../base/messages.dart';
 import '../base/modifiers.dart';
 import '../base/name_space.dart';
@@ -12,11 +14,16 @@
 import '../base/scope.dart';
 import '../builder/builder.dart';
 import '../builder/declaration_builders.dart';
+import '../builder/formal_parameter_builder.dart';
 import '../builder/function_builder.dart';
 import '../builder/member_builder.dart';
+import '../builder/named_type_builder.dart';
+import '../builder/nullability_builder.dart';
 import '../builder/prefix_builder.dart';
+import '../builder/synthesized_type_builder.dart';
 import '../builder/type_builder.dart';
 import '../fragment/fragment.dart';
+import 'builder_factory.dart';
 import 'name_scheme.dart';
 import 'source_builder_factory.dart';
 import 'source_class_builder.dart';
@@ -1018,7 +1025,7 @@
     required SourceLoader loader,
     required SourceLibraryBuilder enclosingLibraryBuilder,
     DeclarationBuilder? declarationBuilder,
-    required List<NominalParameterBuilder> unboundNominalVariables,
+    required List<NominalParameterBuilder> unboundNominalParameters,
     required Map<SourceClassBuilder, TypeBuilder> mixinApplications,
     required List<_AddBuilder> builders,
     required IndexedLibrary? indexedLibrary,
@@ -1224,7 +1231,7 @@
             name: fragment.name,
             typeParameters: fragment.typeParameters,
             supertypeBuilder: BuilderFactoryImpl.applyMixins(
-                unboundNominalVariables: unboundNominalVariables,
+                unboundNominalParameters: unboundNominalParameters,
                 compilationUnitScope: fragment.compilationUnitScope,
                 problemReporting: problemReporting,
                 objectTypeBuilder: loader.target.objectType,
@@ -1279,7 +1286,7 @@
             name: fragment.name,
             typeParameters: fragment.typeParameters,
             supertypeBuilder: BuilderFactoryImpl.applyMixins(
-                unboundNominalVariables: unboundNominalVariables,
+                unboundNominalParameters: unboundNominalParameters,
                 compilationUnitScope: fragment.compilationUnitScope,
                 problemReporting: problemReporting,
                 objectTypeBuilder: loader.target.objectType,
@@ -1329,7 +1336,7 @@
         }
       case NamedMixinApplicationFragment():
         BuilderFactoryImpl.applyMixins(
-            unboundNominalVariables: unboundNominalVariables,
+            unboundNominalParameters: unboundNominalParameters,
             compilationUnitScope: fragment.compilationUnitScope,
             problemReporting: problemReporting,
             objectTypeBuilder: loader.target.objectType,
@@ -1368,7 +1375,7 @@
             typeParameters: fragment.typeParameters,
             underscoreEnumTypeBuilder: loader.target.underscoreEnumType,
             supertypeBuilder: BuilderFactoryImpl.applyMixins(
-                unboundNominalVariables: unboundNominalVariables,
+                unboundNominalParameters: unboundNominalParameters,
                 compilationUnitScope: fragment.compilationUnitScope,
                 problemReporting: problemReporting,
                 objectTypeBuilder: loader.target.objectType,
@@ -1589,10 +1596,22 @@
         }
       case GetterFragment():
         String name = fragment.name;
-
         final bool isInstanceMember = containerType != ContainerType.Library &&
             !fragment.modifiers.isStatic;
 
+        var (
+          List<NominalParameterBuilder>? typeParameters,
+          List<FormalParameterBuilder>? formals
+        ) = _createTypeParametersAndFormals(declarationBuilder,
+            fragment.typeParameters, fragment.formals, unboundNominalParameters,
+            isInstanceMember: isInstanceMember,
+            fileUri: fragment.fileUri,
+            nameOffset: fragment.nameOffset);
+
+        fragment.typeParameterNameSpace.addTypeParameters(
+            problemReporting, typeParameters,
+            ownerName: name, allowNameConflict: true);
+
         NameScheme nameScheme = new NameScheme(
             containerName: containerName,
             containerType: containerType,
@@ -1620,8 +1639,8 @@
             modifiers: fragment.modifiers,
             returnType: fragment.returnType,
             name: name,
-            typeParameters: fragment.typeParameters,
-            formals: fragment.formals,
+            typeParameters: typeParameters,
+            formals: formals,
             kind: kind,
             libraryBuilder: enclosingLibraryBuilder,
             declarationBuilder: declarationBuilder,
@@ -1645,9 +1664,22 @@
         }
       case SetterFragment():
         String name = fragment.name;
-
         final bool isInstanceMember = containerType != ContainerType.Library &&
             !fragment.modifiers.isStatic;
+
+        var (
+          List<NominalParameterBuilder>? typeParameters,
+          List<FormalParameterBuilder>? formals
+        ) = _createTypeParametersAndFormals(declarationBuilder,
+            fragment.typeParameters, fragment.formals, unboundNominalParameters,
+            isInstanceMember: isInstanceMember,
+            fileUri: fragment.fileUri,
+            nameOffset: fragment.nameOffset);
+
+        fragment.typeParameterNameSpace.addTypeParameters(
+            problemReporting, typeParameters,
+            ownerName: name, allowNameConflict: true);
+
         final bool isExtensionMember = containerType == ContainerType.Extension;
         final bool isExtensionTypeMember =
             containerType == ContainerType.ExtensionType;
@@ -1686,8 +1718,8 @@
             modifiers: fragment.modifiers,
             returnType: fragment.returnType,
             name: name,
-            typeParameters: fragment.typeParameters,
-            formals: fragment.formals,
+            typeParameters: typeParameters,
+            formals: formals,
             kind: kind,
             libraryBuilder: enclosingLibraryBuilder,
             declarationBuilder: declarationBuilder,
@@ -1713,11 +1745,25 @@
         }
       case MethodFragment():
         String name = fragment.name;
+        final bool isInstanceMember = containerType != ContainerType.Library &&
+            !fragment.modifiers.isStatic;
+
+        var (
+          List<NominalParameterBuilder>? typeParameters,
+          List<FormalParameterBuilder>? formals
+        ) = _createTypeParametersAndFormals(declarationBuilder,
+            fragment.typeParameters, fragment.formals, unboundNominalParameters,
+            isInstanceMember: isInstanceMember,
+            fileUri: fragment.fileUri,
+            nameOffset: fragment.nameOffset);
+
+        fragment.typeParameterNameSpace.addTypeParameters(
+            problemReporting, typeParameters,
+            ownerName: name, allowNameConflict: true);
+
         ProcedureKind kind = fragment.kind;
         assert(kind == ProcedureKind.Method || kind == ProcedureKind.Operator);
 
-        final bool isInstanceMember = containerType != ContainerType.Library &&
-            !fragment.modifiers.isStatic;
         final bool isExtensionMember = containerType == ContainerType.Extension;
         final bool isExtensionTypeMember =
             containerType == ContainerType.ExtensionType;
@@ -1755,8 +1801,8 @@
             modifiers: fragment.modifiers,
             returnType: fragment.returnType,
             name: name,
-            typeParameters: fragment.typeParameters,
-            formals: fragment.formals,
+            typeParameters: typeParameters,
+            formals: formals,
             kind: kind,
             libraryBuilder: enclosingLibraryBuilder,
             declarationBuilder: declarationBuilder,
@@ -1778,8 +1824,32 @@
               procedureBuilder;
         }
       case ConstructorFragment():
-        String name = fragment.name;
+        List<NominalParameterBuilder>? typeParameters = fragment.typeParameters;
+        switch (declarationBuilder!) {
+          case ExtensionBuilder():
+          case ExtensionTypeDeclarationBuilder():
+            NominalParameterCopy? nominalVariableCopy =
+                BuilderFactoryImpl.copyTypeParameters(
+                    unboundNominalParameters, declarationBuilder.typeParameters,
+                    kind: TypeParameterKind.extensionSynthesized,
+                    instanceTypeParameterAccess:
+                        InstanceTypeParameterAccessState.Allowed);
+            if (nominalVariableCopy != null) {
+              if (typeParameters != null) {
+                // Coverage-ignore-block(suite): Not run.
+                typeParameters = nominalVariableCopy.newParameterBuilders
+                  ..addAll(typeParameters);
+              } else {
+                typeParameters = nominalVariableCopy.newParameterBuilders;
+              }
+            }
+          case ClassBuilder():
+        }
+        fragment.typeParameterNameSpace.addTypeParameters(
+            problemReporting, typeParameters,
+            ownerName: fragment.name, allowNameConflict: true);
 
+        String name = fragment.name;
         NameScheme nameScheme = new NameScheme(
             isInstanceMember: false,
             containerName: containerName,
@@ -1805,7 +1875,7 @@
               modifiers: fragment.modifiers,
               returnType: fragment.returnType,
               name: name,
-              typeParameters: fragment.typeParameters,
+              typeParameters: typeParameters,
               formals: fragment.formals,
               libraryBuilder: enclosingLibraryBuilder,
               declarationBuilder: declarationBuilder,
@@ -1826,10 +1896,10 @@
               modifiers: fragment.modifiers,
               returnType: fragment.returnType,
               name: fragment.name,
-              typeParameters: fragment.typeParameters,
+              typeParameters: typeParameters,
               formals: fragment.formals,
               libraryBuilder: enclosingLibraryBuilder,
-              declarationBuilder: declarationBuilder!,
+              declarationBuilder: declarationBuilder,
               fileUri: fragment.fileUri,
               startOffset: fragment.startOffset,
               fileOffset: fragment.fullNameOffset,
@@ -2041,7 +2111,7 @@
     required SourceLibraryBuilder enclosingLibraryBuilder,
     required IndexedLibrary? indexedLibrary,
     required ProblemReporting problemReporting,
-    required List<NominalParameterBuilder> unboundNominalVariables,
+    required List<NominalParameterBuilder> unboundNominalParameters,
     required Map<SourceClassBuilder, TypeBuilder> mixinApplications,
   }) {
     Map<String, Builder> getables = {};
@@ -2128,7 +2198,7 @@
           loader: enclosingLibraryBuilder.loader,
           problemReporting: problemReporting,
           enclosingLibraryBuilder: enclosingLibraryBuilder,
-          unboundNominalVariables: unboundNominalVariables,
+          unboundNominalParameters: unboundNominalParameters,
           mixinApplications: mixinApplications,
           builders: addBuilders,
           indexedLibrary: indexedLibrary,
@@ -2346,6 +2416,7 @@
       required ContainerType containerType,
       required ContainerName containerName,
       bool includeConstructors = true}) {
+    List<NominalParameterBuilder> unboundNominalParameters = [];
     Map<String, Builder> getables = {};
     Map<String, MemberBuilder> setables = {};
     Map<String, MemberBuilder> constructors = {};
@@ -2363,8 +2434,8 @@
           enclosingLibraryBuilder: enclosingLibraryBuilder,
           declarationBuilder: declarationBuilder,
           builders: addBuilders,
-          // TODO(johnniwinther): Avoid passing these:
-          unboundNominalVariables: const [],
+          unboundNominalParameters: unboundNominalParameters,
+          // TODO(johnniwinther): Avoid passing this:
           mixinApplications: const {},
           indexedLibrary: indexedLibrary,
           indexedContainer: indexedContainer,
@@ -2385,6 +2456,9 @@
     setables.forEach(checkConflicts);
     constructors.forEach(checkConflicts);
 
+    enclosingLibraryBuilder
+        .registerUnboundNominalParameters(unboundNominalParameters);
+
     return new DeclarationNameSpaceImpl(
         getables: getables,
         setables: setables,
@@ -2505,3 +2579,113 @@
   }
   return true;
 }
+
+/// Creates synthesized type parameters and formals for extension and extension
+/// type instance members.
+(
+  List<NominalParameterBuilder>? typeParameters,
+  List<FormalParameterBuilder>? formals
+) _createTypeParametersAndFormals(
+    DeclarationBuilder? declarationBuilder,
+    List<NominalParameterBuilder>? typeParameters,
+    List<FormalParameterBuilder>? formals,
+    List<NominalParameterBuilder> _unboundNominalVariables,
+    {required bool isInstanceMember,
+    required Uri fileUri,
+    required int nameOffset}) {
+  if (isInstanceMember) {
+    switch (declarationBuilder) {
+      case ExtensionBuilder():
+        NominalParameterCopy? nominalVariableCopy =
+            BuilderFactoryImpl.copyTypeParameters(
+                _unboundNominalVariables, declarationBuilder.typeParameters,
+                kind: TypeParameterKind.extensionSynthesized,
+                instanceTypeParameterAccess:
+                    InstanceTypeParameterAccessState.Allowed);
+
+        if (nominalVariableCopy != null) {
+          if (typeParameters != null) {
+            typeParameters = nominalVariableCopy.newParameterBuilders
+              ..addAll(typeParameters);
+          } else {
+            typeParameters = nominalVariableCopy.newParameterBuilders;
+          }
+        }
+
+        TypeBuilder thisType = declarationBuilder.onType;
+        if (nominalVariableCopy != null) {
+          thisType = new SynthesizedTypeBuilder(
+              thisType,
+              nominalVariableCopy.newToOldParameterMap,
+              nominalVariableCopy.substitutionMap);
+        }
+        List<FormalParameterBuilder> synthesizedFormals = [
+          new FormalParameterBuilder(FormalParameterKind.requiredPositional,
+              Modifiers.Final, thisType, syntheticThisName, nameOffset,
+              fileUri: fileUri,
+              isExtensionThis: true,
+              hasImmediatelyDeclaredInitializer: false)
+        ];
+        if (formals != null) {
+          synthesizedFormals.addAll(formals);
+        }
+        formals = synthesizedFormals;
+      case ExtensionTypeDeclarationBuilder():
+        NominalParameterCopy? nominalVariableCopy =
+            BuilderFactoryImpl.copyTypeParameters(
+                _unboundNominalVariables, declarationBuilder.typeParameters,
+                kind: TypeParameterKind.extensionSynthesized,
+                instanceTypeParameterAccess:
+                    InstanceTypeParameterAccessState.Allowed);
+
+        if (nominalVariableCopy != null) {
+          if (typeParameters != null) {
+            typeParameters = nominalVariableCopy.newParameterBuilders
+              ..addAll(typeParameters);
+          } else {
+            typeParameters = nominalVariableCopy.newParameterBuilders;
+          }
+        }
+
+        TypeBuilder thisType =
+            new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
+                declarationBuilder, const NullabilityBuilder.omitted(),
+                arguments: declarationBuilder.typeParameters != null
+                    ? new List<TypeBuilder>.generate(
+                        declarationBuilder.typeParameters!.length,
+                        (int index) =>
+                            new NamedTypeBuilderImpl.fromTypeDeclarationBuilder(
+                                typeParameters![index],
+                                const NullabilityBuilder.omitted(),
+                                instanceTypeParameterAccess:
+                                    InstanceTypeParameterAccessState.Allowed))
+                    : null,
+                instanceTypeParameterAccess:
+                    InstanceTypeParameterAccessState.Allowed);
+
+        if (nominalVariableCopy != null) {
+          thisType = new SynthesizedTypeBuilder(
+              thisType,
+              nominalVariableCopy.newToOldParameterMap,
+              nominalVariableCopy.substitutionMap);
+        }
+        List<FormalParameterBuilder> synthesizedFormals = [
+          new FormalParameterBuilder(FormalParameterKind.requiredPositional,
+              Modifiers.Final, thisType, syntheticThisName, nameOffset,
+              fileUri: fileUri,
+              isExtensionThis: true,
+              hasImmediatelyDeclaredInitializer: false)
+        ];
+        if (formals != null) {
+          synthesizedFormals.addAll(formals);
+        }
+        formals = synthesizedFormals;
+      case ClassFragment():
+      case MixinFragment():
+      case EnumFragment():
+      case ClassBuilder():
+      case null:
+    }
+  }
+  return (typeParameters, formals);
+}
diff --git a/pkg/front_end/test/coverage_suite_expected.dart b/pkg/front_end/test/coverage_suite_expected.dart
index 0574cb8..36c2dad 100644
--- a/pkg/front_end/test/coverage_suite_expected.dart
+++ b/pkg/front_end/test/coverage_suite_expected.dart
@@ -390,7 +390,7 @@
   ),
   // 100.0%.
   "package:front_end/src/builder/type_builder.dart": (
-    hitCount: 56,
+    hitCount: 53,
     missCount: 0,
   ),
   // 100.0%.
@@ -490,7 +490,7 @@
   ),
   // 100.0%.
   "package:front_end/src/fragment/extension.dart": (
-    hitCount: 22,
+    hitCount: 19,
     missCount: 0,
   ),
   // 100.0%.
@@ -880,7 +880,7 @@
   ),
   // 100.0%.
   "package:front_end/src/source/source_builder_factory.dart": (
-    hitCount: 1295,
+    hitCount: 1238,
     missCount: 0,
   ),
   // 100.0%.
@@ -936,7 +936,7 @@
   ),
   // 100.0%.
   "package:front_end/src/source/source_library_builder.dart": (
-    hitCount: 1312,
+    hitCount: 1315,
     missCount: 0,
   ),
   // 100.0%.
@@ -966,7 +966,7 @@
   ),
   // 100.0%.
   "package:front_end/src/source/type_parameter_scope_builder.dart": (
-    hitCount: 1472,
+    hitCount: 1541,
     missCount: 0,
   ),
   // 100.0%.
diff --git a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.expect b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.expect
index 58c59ac..c7e649a 100644
--- a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.expect
@@ -19,13 +19,6 @@
 // extension type foo(String foo) {
 //                           ^
 //
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:8:7: Error: 'foo' isn't a type.
-//   set foo(double x) { }
-//       ^
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:7:27: Context: This isn't a type.
-// extension type foo(String foo) {
-//                           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.modular.expect b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.modular.expect
index 58c59ac..c7e649a 100644
--- a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.modular.expect
@@ -19,13 +19,6 @@
 // extension type foo(String foo) {
 //                           ^
 //
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:8:7: Error: 'foo' isn't a type.
-//   set foo(double x) { }
-//       ^
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:7:27: Context: This isn't a type.
-// extension type foo(String foo) {
-//                           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.outline.expect b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.outline.expect
index c45667f..b0a422f 100644
--- a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.outline.expect
@@ -19,13 +19,6 @@
 // extension type foo(String foo) {
 //                           ^
 //
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:8:7: Error: 'foo' isn't a type.
-//   set foo(double x) { }
-//       ^
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:7:27: Context: This isn't a type.
-// extension type foo(String foo) {
-//                           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.transformed.expect
index 58c59ac..c7e649a 100644
--- a/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/duplicate_builder_01.dart.strong.transformed.expect
@@ -19,13 +19,6 @@
 // extension type foo(String foo) {
 //                           ^
 //
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:8:7: Error: 'foo' isn't a type.
-//   set foo(double x) { }
-//       ^
-// pkg/front_end/testcases/regress/duplicate_builder_01.dart:7:27: Context: This isn't a type.
-// extension type foo(String foo) {
-//                           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
index 21cf490..f962620 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
@@ -9,13 +9,6 @@
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
index 21cf490..f962620 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
@@ -9,13 +9,6 @@
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
index c0c0414..a810fc4 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
@@ -9,13 +9,6 @@
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
index 21cf490..f962620 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
@@ -9,13 +9,6 @@
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect
index 09fc9a3..3f07fa8 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect
@@ -16,13 +16,6 @@
 //   static set bar(int newBar) {}
 //              ^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 // pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
 //   static set bar(int newBar) {}
 //              ^^^
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect
index 09fc9a3..3f07fa8 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect
@@ -16,13 +16,6 @@
 //   static set bar(int newBar) {}
 //              ^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 // pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
 //   static set bar(int newBar) {}
 //              ^^^
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect
index f5a1ab9..304422a 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect
@@ -16,13 +16,6 @@
 //   static set bar(int newBar) {}
 //              ^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 // pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
 //   static set bar(int newBar) {}
 //              ^^^
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect
index 09fc9a3..3f07fa8 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect
@@ -16,13 +16,6 @@
 //   static set bar(int newBar) {}
 //              ^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
 // pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
 //   static set bar(int newBar) {}
 //              ^^^