[cfe] Report error on covariant in extension type methods

Closes #53324

Change-Id: Iff86c4eb7c141f27c64de29459390ac395e1c4ee
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/341487
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index e9996d9..cab40c9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -4727,6 +4727,60 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(Token token)>
+    templateExtraneousModifierInExtensionType =
+    const Template<Message Function(Token token)>(
+        "ExtraneousModifierInExtensionType",
+        problemMessageTemplate:
+            r"""Can't have modifier '#lexeme' in an extension type.""",
+        correctionMessageTemplate: r"""Try removing '#lexeme'.""",
+        withArguments: _withArgumentsExtraneousModifierInExtensionType);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(Token token)>
+    codeExtraneousModifierInExtensionType =
+    const Code<Message Function(Token token)>(
+        "ExtraneousModifierInExtensionType",
+        index: 174);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExtraneousModifierInExtensionType(Token token) {
+  String lexeme = token.lexeme;
+  return new Message(codeExtraneousModifierInExtensionType,
+      problemMessage:
+          """Can't have modifier '${lexeme}' in an extension type.""",
+      correctionMessage: """Try removing '${lexeme}'.""",
+      arguments: {'lexeme': token});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(Token token)>
+    templateExtraneousModifierInPrimaryConstructor =
+    const Template<Message Function(Token token)>(
+        "ExtraneousModifierInPrimaryConstructor",
+        problemMessageTemplate:
+            r"""Can't have modifier '#lexeme' in a primary constructor.""",
+        correctionMessageTemplate: r"""Try removing '#lexeme'.""",
+        withArguments: _withArgumentsExtraneousModifierInPrimaryConstructor);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(Token token)>
+    codeExtraneousModifierInPrimaryConstructor =
+    const Code<Message Function(Token token)>(
+        "ExtraneousModifierInPrimaryConstructor",
+        index: 175);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsExtraneousModifierInPrimaryConstructor(Token token) {
+  String lexeme = token.lexeme;
+  return new Message(codeExtraneousModifierInPrimaryConstructor,
+      problemMessage:
+          """Can't have modifier '${lexeme}' in a primary constructor.""",
+      correctionMessage: """Try removing '${lexeme}'.""",
+      arguments: {'lexeme': token});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeFactoryNotSync = messageFactoryNotSync;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/member_kind.dart b/pkg/_fe_analyzer_shared/lib/src/parser/member_kind.dart
index a8139e8..7e2ff6a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/member_kind.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/member_kind.dart
@@ -38,6 +38,13 @@
   /// A static method in an extension.
   ExtensionStaticMethod,
 
+  /// A non-static method or constructor in an extension type.
+  // TODO(johnniwinther): Can we separate constructors from instance methods?
+  ExtensionTypeNonStaticMethod,
+
+  /// A static method in an extension type.
+  ExtensionTypeStaticMethod,
+
   /// An instance field in a class.
   NonStaticField,
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
index 378ee2f..b915df9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/modifier_context.dart
@@ -197,12 +197,28 @@
     if (parameterKind != FormalParameterKind.optionalNamed) {
       reportExtraneousModifier(requiredToken);
     }
-    if (memberKind == MemberKind.StaticMethod ||
-        memberKind == MemberKind.TopLevelMethod) {
-      reportExtraneousModifier(this.covariantToken);
-    } else if (memberKind == MemberKind.ExtensionNonStaticMethod ||
-        memberKind == MemberKind.ExtensionStaticMethod) {
-      reportExtraneousModifierInExtension(this.covariantToken);
+    switch (memberKind) {
+      case MemberKind.StaticMethod:
+      case MemberKind.TopLevelMethod:
+        reportExtraneousModifier(this.covariantToken);
+      case MemberKind.ExtensionNonStaticMethod:
+      case MemberKind.ExtensionStaticMethod:
+        reportExtraneousModifierInExtension(this.covariantToken);
+      case MemberKind.ExtensionTypeNonStaticMethod:
+      case MemberKind.ExtensionTypeStaticMethod:
+        reportExtraneousModifierInExtensionType(this.covariantToken);
+      case MemberKind.PrimaryConstructor:
+        reportExtraneousModifierInPrimaryConstructor(this.covariantToken);
+      case MemberKind.Catch:
+      case MemberKind.Factory:
+      case MemberKind.FunctionTypeAlias:
+      case MemberKind.FunctionTypedParameter:
+      case MemberKind.GeneralizedFunctionType:
+      case MemberKind.Local:
+      case MemberKind.NonStaticMethod:
+      case MemberKind.NonStaticField:
+      case MemberKind.StaticField:
+      case MemberKind.TopLevelField:
     }
     if (constToken != null) {
       reportExtraneousModifier(constToken);
@@ -626,6 +642,20 @@
     }
   }
 
+  void reportExtraneousModifierInExtensionType(Token? modifier) {
+    if (modifier != null) {
+      parser.reportRecoverableErrorWithToken(
+          modifier, codes.templateExtraneousModifierInExtensionType);
+    }
+  }
+
+  void reportExtraneousModifierInPrimaryConstructor(Token? modifier) {
+    if (modifier != null) {
+      parser.reportRecoverableErrorWithToken(
+          modifier, codes.templateExtraneousModifierInPrimaryConstructor);
+    }
+  }
+
   void reportModifierOutOfOrder(Token modifier, String beforeModifier) {
     parser.reportRecoverableError(
         modifier,
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index c9e679a..6073250 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -1826,13 +1826,28 @@
   /// Return the message that should be produced when the formal parameters are
   /// missing.
   codes.Message missingParameterMessage(MemberKind kind) {
-    if (kind == MemberKind.FunctionTypeAlias) {
-      return codes.messageMissingTypedefParameters;
-    } else if (kind == MemberKind.NonStaticMethod ||
-        kind == MemberKind.StaticMethod) {
-      return codes.messageMissingMethodParameters;
+    switch (kind) {
+      case MemberKind.FunctionTypeAlias:
+        return codes.messageMissingTypedefParameters;
+      case MemberKind.StaticMethod:
+      case MemberKind.NonStaticMethod:
+        return codes.messageMissingMethodParameters;
+      case MemberKind.TopLevelMethod:
+      case MemberKind.ExtensionNonStaticMethod:
+      case MemberKind.ExtensionStaticMethod:
+      case MemberKind.ExtensionTypeNonStaticMethod:
+      case MemberKind.ExtensionTypeStaticMethod:
+      case MemberKind.Catch:
+      case MemberKind.Factory:
+      case MemberKind.FunctionTypedParameter:
+      case MemberKind.GeneralizedFunctionType:
+      case MemberKind.Local:
+      case MemberKind.NonStaticField:
+      case MemberKind.StaticField:
+      case MemberKind.TopLevelField:
+      case MemberKind.PrimaryConstructor:
+        return codes.messageMissingFunctionParameters;
     }
-    return codes.messageMissingFunctionParameters;
   }
 
   /// Check if [token] is the usage of 'required' in a formal parameter in a
@@ -1923,12 +1938,29 @@
 
       if (isModifier(next)) {
         if (optional('covariant', next)) {
-          if (memberKind != MemberKind.StaticMethod &&
-              memberKind != MemberKind.TopLevelMethod &&
-              memberKind != MemberKind.ExtensionNonStaticMethod &&
-              memberKind != MemberKind.ExtensionStaticMethod) {
-            covariantToken = token = next;
-            next = token.next!;
+          switch (memberKind) {
+            case MemberKind.StaticMethod:
+            case MemberKind.TopLevelMethod:
+            case MemberKind.ExtensionNonStaticMethod:
+            case MemberKind.ExtensionStaticMethod:
+            case MemberKind.ExtensionTypeNonStaticMethod:
+            case MemberKind.ExtensionTypeStaticMethod:
+            case MemberKind.PrimaryConstructor:
+              // Error cases reported in
+              // [ModifierContext.parseFormalParameterModifiers].
+              break;
+            case MemberKind.Catch:
+            case MemberKind.Factory:
+            case MemberKind.FunctionTypeAlias:
+            case MemberKind.FunctionTypedParameter:
+            case MemberKind.GeneralizedFunctionType:
+            case MemberKind.Local:
+            case MemberKind.NonStaticMethod:
+            case MemberKind.NonStaticField:
+            case MemberKind.StaticField:
+            case MemberKind.TopLevelField:
+              covariantToken = token = next;
+              next = token.next!;
           }
         }
 
@@ -4846,19 +4878,28 @@
         // that a constructor. We issue an error about the name below.
       }
     }
+    MemberKind memberKind;
+    switch (kind) {
+      case DeclarationKind.TopLevel:
+      case DeclarationKind.Class:
+      case DeclarationKind.Mixin:
+      case DeclarationKind.Enum:
+        memberKind = staticToken != null
+            ? MemberKind.StaticMethod
+            : MemberKind.NonStaticMethod;
+      case DeclarationKind.Extension:
+        memberKind = staticToken != null
+            ? MemberKind.ExtensionStaticMethod
+            : MemberKind.ExtensionNonStaticMethod;
+      case DeclarationKind.ExtensionType:
+        memberKind = staticToken != null
+            ? MemberKind.ExtensionTypeStaticMethod
+            : MemberKind.ExtensionTypeNonStaticMethod;
+    }
 
     Token beforeParam = token;
     Token? beforeInitializers = parseGetterOrFormalParameters(
-        token,
-        name,
-        isConsideredGetter,
-        kind == DeclarationKind.Extension
-            ? staticToken != null
-                ? MemberKind.ExtensionStaticMethod
-                : MemberKind.ExtensionNonStaticMethod
-            : staticToken != null
-                ? MemberKind.StaticMethod
-                : MemberKind.NonStaticMethod);
+        token, name, isConsideredGetter, memberKind);
     token = parseInitializersOpt(beforeInitializers);
     if (token == beforeInitializers) beforeInitializers = null;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index b0f1b3b..b79a6f2 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -2834,6 +2834,10 @@
   status: needsFix
   notes: |-
     Remove the extraneous keyword.
+ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE:
+  status: needsEvaluation
+ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR:
+  status: needsEvaluation
 ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION:
   status: needsFix
   notes: |-
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 1518431..8970236 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -195,6 +195,8 @@
   ParserErrorCode.EXPECTED_SWITCH_EXPRESSION_BODY,
   ParserErrorCode.EXPECTED_SWITCH_STATEMENT_BODY,
   ParserErrorCode.EXPECTED_EXTENSION_BODY,
+  ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE,
+  ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR,
 ];
 
 class ParserErrorCode extends ErrorCode {
@@ -881,6 +883,20 @@
     correctionMessage: "Try removing '{0}'.",
   );
 
+  static const ParserErrorCode EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE =
+      ParserErrorCode(
+    'EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE',
+    "Can't have modifier '{0}' in an extension type.",
+    correctionMessage: "Try removing '{0}'.",
+  );
+
+  static const ParserErrorCode EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR =
+      ParserErrorCode(
+    'EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR',
+    "Can't have modifier '{0}' in a primary constructor.",
+    correctionMessage: "Try removing '{0}'.",
+  );
+
   static const ParserErrorCode FACTORY_TOP_LEVEL_DECLARATION = ParserErrorCode(
     'FACTORY_TOP_LEVEL_DECLARATION',
     "Top-level declarations can't be declared to be 'factory'.",
diff --git a/pkg/analyzer/lib/src/error/error_code_values.g.dart b/pkg/analyzer/lib/src/error/error_code_values.g.dart
index 7094960..9bf851a 100644
--- a/pkg/analyzer/lib/src/error/error_code_values.g.dart
+++ b/pkg/analyzer/lib/src/error/error_code_values.g.dart
@@ -742,6 +742,8 @@
   ParserErrorCode.EXTERNAL_SETTER_WITH_BODY,
   ParserErrorCode.EXTERNAL_TYPEDEF,
   ParserErrorCode.EXTRANEOUS_MODIFIER,
+  ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE,
+  ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR,
   ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION,
   ParserErrorCode.FACTORY_WITHOUT_BODY,
   ParserErrorCode.FACTORY_WITH_INITIALIZERS,
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index eb8ada7..b147839 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1801,16 +1801,7 @@
         startToken: requiredKeyword,
       );
     }
-    // TODO(scheglov): https://github.com/dart-lang/sdk/issues/53324
-    // If the issue fixed, we can remove this from the analyzer.
-    if (_classLikeBuilder is _ExtensionTypeDeclarationBuilder &&
-        covariantKeyword != null) {
-      errorReporter.errorReporter?.reportErrorForToken(
-        ParserErrorCode.EXTRANEOUS_MODIFIER,
-        covariantKeyword,
-        [covariantKeyword.lexeme],
-      );
-    }
+
     var metadata = pop() as List<AnnotationImpl>?;
     var comment = _findComment(metadata,
         thisKeyword ?? typeOrFunctionTypedParameter?.beginToken ?? nameToken);
diff --git a/pkg/analyzer/test/src/dart/parser/extension_type_test.dart b/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
index f972a71..3ace940 100644
--- a/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
@@ -45,7 +45,7 @@
 extension type A(covariant int it) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.EXTRANEOUS_MODIFIER, 17, 9),
+      error(ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR, 17, 9),
     ]);
 
     final node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -70,7 +70,7 @@
 extension type A(covariant final int it) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.EXTRANEOUS_MODIFIER, 17, 9),
+      error(ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR, 17, 9),
       error(ParserErrorCode.REPRESENTATION_FIELD_MODIFIER, 27, 5),
     ]);
 
@@ -173,7 +173,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.EXTRANEOUS_MODIFIER, 38, 9),
+      error(ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE, 38, 9),
     ]);
 
     final node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -217,7 +217,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.EXTRANEOUS_MODIFIER, 45, 9),
+      error(ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE, 45, 9),
     ]);
 
     final node = parseResult.findNode.singleExtensionTypeDeclaration;
diff --git a/pkg/front_end/lib/src/fasta/modifier.dart b/pkg/front_end/lib/src/fasta/modifier.dart
index 4b25cdc..3ba8175 100644
--- a/pkg/front_end/lib/src/fasta/modifier.dart
+++ b/pkg/front_end/lib/src/fasta/modifier.dart
@@ -150,4 +150,9 @@
   static int removeRequiredMask(int mask) {
     return mask & ~requiredMask;
   }
+
+  /// Sets the bit in [mask] corresponding to [covariantMask] to 0.
+  static int removeCovariantMask(int mask) {
+    return mask & ~covariantMask;
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 3b57aca..2c652a8 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -776,13 +776,12 @@
       //  constructor body. An error is reported by the parser but we skip
       //  the body here to avoid overwriting the already lowering const
       //  constructor.
+      // TODO(johnniwinther): Pass [memberKind] from the caller.
+      MemberKind memberKind = builder.isStatic
+          ? MemberKind.StaticMethod
+          : MemberKind.NonStaticMethod;
       buildFunctionBody(
-          createFunctionListener(builder),
-          beginParam,
-          metadata,
-          builder.isStatic
-              ? MemberKind.StaticMethod
-              : MemberKind.NonStaticMethod);
+          createFunctionListener(builder), beginParam, metadata, memberKind);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index cbced0f..be70b6d 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1635,10 +1635,14 @@
         if (inExtensionType && formal.type is ImplicitTypeBuilder) {
           libraryBuilder.addProblem(messageExpectedRepresentationType,
               formal.charOffset, formal.name.length, formal.fileUri);
+          formal.type =
+              new InvalidTypeBuilderImpl(formal.fileUri, formal.charOffset);
         }
-        if (inExtensionType &&
-            Modifier.maskContainsActualModifiers(
-                Modifier.removeRequiredMask(formal.modifiers))) {
+        if (inExtensionType && Modifier.maskContainsActualModifiers(
+            // 'covariant' is reported in the parser.
+            Modifier.removeCovariantMask(
+                // 'required' is reported in the parser.
+                Modifier.removeRequiredMask(formal.modifiers)))) {
           libraryBuilder.addProblem(messageRepresentationFieldModifier,
               formal.charOffset, formal.name.length, formal.fileUri);
         }
@@ -4169,9 +4173,11 @@
       case MemberKind.TopLevelMethod:
       case MemberKind.ExtensionNonStaticMethod:
       case MemberKind.ExtensionStaticMethod:
+      case MemberKind.ExtensionTypeStaticMethod:
       case MemberKind.PrimaryConstructor:
         return false;
       case MemberKind.NonStaticMethod:
+      case MemberKind.ExtensionTypeNonStaticMethod:
       // These can be inferred but cannot hold parameters so the cases are
       // dead code:
       case MemberKind.NonStaticField:
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index ddd0f7e..c667ba4 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1412,6 +1412,22 @@
   script:
     - "extension on String { foo(covariant String child) {} }"
 
+ExtraneousModifierInExtensionType:
+  index: 174
+  problemMessage: "Can't have modifier '#lexeme' in an extension type."
+  correctionMessage: "Try removing '#lexeme'."
+  analyzerCode: ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE
+  script:
+    - "extension type ET(String i) { foo(covariant String child) {} }"
+
+ExtraneousModifierInPrimaryConstructor:
+  index: 175
+  problemMessage: "Can't have modifier '#lexeme' in a primary constructor."
+  correctionMessage: "Try removing '#lexeme'."
+  analyzerCode: ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR
+  script:
+    - "extension type ET(covariant String i) { }"
+
 FinalAndCovariant:
   index: 80
   problemMessage: "Members can't be declared to be both 'final' and 'covariant'."
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
index 4a0250d..502d19e 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -46,8 +46,8 @@
             handleNoType({)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
diff --git a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
index f45f536..598c40a 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.intertwined.expect
@@ -76,11 +76,11 @@
                 parseQualifiedRestOpt(method, methodDeclarationContinuation)
                 parseMethodTypeVar(method)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(method, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(method, method, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(method, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
index be6597f..39259bd 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
@@ -119,15 +119,15 @@
             handleIdentifier(constructor, methodDeclarationContinuation)
             handleQualified(.)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(this)
               endMetadataStar(0)
-              beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleNoType(()
                 handleIdentifier(it, fieldInitializer)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
@@ -142,17 +142,17 @@
             handleIdentifier(redirect, methodDeclarationContinuation)
             handleQualified(.)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(it)
                 handleType(int, null)
                 handleIdentifier(it, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             beginInitializers(:)
               beginInitializer(this)
                 handleThisExpression(this, expression)
@@ -254,7 +254,7 @@
             handleType(int, null)
             handleIdentifier(getter, methodDeclaration)
             handleNoTypeVariables(=>)
-            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoFormalParameters(=>, MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -271,17 +271,17 @@
             handleVoidKeyword(void)
             handleIdentifier(setter, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -297,8 +297,8 @@
             handleType(int, null)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -317,17 +317,17 @@
             handleType(int, null)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(index)
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -344,26 +344,26 @@
             handleVoidKeyword(void)
             handleOperatorName(operator, []=)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(index)
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(2, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -392,7 +392,7 @@
             handleType(int, null)
             handleIdentifier(staticGetter, methodDeclaration)
             handleNoTypeVariables(=>)
-            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoFormalParameters(=>, MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
@@ -406,17 +406,17 @@
             handleVoidKeyword(void)
             handleIdentifier(staticSetter, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.StaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.StaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
-            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -432,8 +432,8 @@
             handleType(int, null)
             handleIdentifier(staticMethod, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.StaticMethod)
-            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
index c838b99..67cad2b 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
@@ -179,21 +179,21 @@
                     listener: handleQualified(.)
                 parseMethodTypeVar(constructor)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(constructor, ExtensionType4, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(constructor, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(constructor, ExtensionType4, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(constructor, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(this)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleNoType(()
                         ensureIdentifier(., fieldInitializer)
                           listener: handleIdentifier(it, fieldInitializer)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -223,23 +223,23 @@
                     listener: handleQualified(.)
                 parseMethodTypeVar(redirect)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(redirect, ExtensionType4, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(redirect, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(redirect, ExtensionType4, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(redirect, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(it)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(it, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
                     listener: beginInitializers(:)
@@ -447,8 +447,8 @@
                   listener: handleIdentifier(getter, methodDeclaration)
                 parseQualifiedRestOpt(getter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(=>)
-                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
-                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.ExtensionTypeNonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt(getter)
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt(getter)
@@ -489,23 +489,23 @@
                   listener: handleIdentifier(setter, methodDeclaration)
                 parseQualifiedRestOpt(setter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -535,11 +535,11 @@
                 parseQualifiedRestOpt(method, methodDeclarationContinuation)
                 parseMethodTypeVar(method)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(method, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(method, method, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(method, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -581,23 +581,23 @@
                   listener: handleOperatorName(operator, [])
                 parseMethodTypeVar([])
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters([], operator, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters([], MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters([], operator, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters([], MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(index)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -637,35 +637,35 @@
                   listener: handleOperatorName(operator, []=)
                 parseMethodTypeVar([]=)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters([]=, operator, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters([]=, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters([]=, operator, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters([]=, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(index)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(2, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -717,8 +717,8 @@
                   listener: handleIdentifier(staticGetter, methodDeclaration)
                 parseQualifiedRestOpt(staticGetter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(=>)
-                parseGetterOrFormalParameters(staticGetter, staticGetter, true, MemberKind.StaticMethod)
-                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticGetter, staticGetter, true, MemberKind.ExtensionTypeStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt(staticGetter)
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt(staticGetter)
@@ -751,23 +751,23 @@
                   listener: handleIdentifier(staticSetter, methodDeclaration)
                 parseQualifiedRestOpt(staticSetter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(staticSetter, staticSetter, false, MemberKind.StaticMethod)
-                  parseFormalParameters(staticSetter, MemberKind.StaticMethod)
-                    parseFormalParametersRest((, MemberKind.StaticMethod)
-                      listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticSetter, staticSetter, false, MemberKind.ExtensionTypeStaticMethod)
+                  parseFormalParameters(staticSetter, MemberKind.ExtensionTypeStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.StaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -796,11 +796,11 @@
                 parseQualifiedRestOpt(staticMethod, methodDeclarationContinuation)
                 parseMethodTypeVar(staticMethod)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(staticMethod, staticMethod, false, MemberKind.StaticMethod)
-                  parseFormalParameters(staticMethod, MemberKind.StaticMethod)
-                    parseFormalParametersRest((, MemberKind.StaticMethod)
-                      listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticMethod, staticMethod, false, MemberKind.ExtensionTypeStaticMethod)
+                  parseFormalParameters(staticMethod, MemberKind.ExtensionTypeStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
index e0e026f..3a96744 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
@@ -119,15 +119,15 @@
             handleIdentifier(constructor, methodDeclarationContinuation)
             handleQualified(.)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(this)
               endMetadataStar(0)
-              beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleNoType(()
                 handleIdentifier(it, fieldInitializer)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
@@ -142,17 +142,17 @@
             handleIdentifier(redirect, methodDeclarationContinuation)
             handleQualified(.)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(it)
                 handleType(int, null)
                 handleIdentifier(it, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             beginInitializers(:)
               beginInitializer(this)
                 handleThisExpression(this, expression)
@@ -254,7 +254,7 @@
             handleType(int, null)
             handleIdentifier(getter, methodDeclaration)
             handleNoTypeVariables(=>)
-            handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+            handleNoFormalParameters(=>, MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -271,17 +271,17 @@
             handleVoidKeyword(void)
             handleIdentifier(setter, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -297,8 +297,8 @@
             handleType(int, null)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -317,17 +317,17 @@
             handleType(int, null)
             handleOperatorName(operator, [])
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(index)
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleIdentifier(it, expression)
@@ -344,26 +344,26 @@
             handleVoidKeyword(void)
             handleOperatorName(operator, []=)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(index)
                 handleType(int, null)
                 handleIdentifier(index, formalParameterDeclaration)
                 handleFormalParameterWithoutValue(,)
-              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(2, (, ), MemberKind.ExtensionTypeNonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -392,7 +392,7 @@
             handleType(int, null)
             handleIdentifier(staticGetter, methodDeclaration)
             handleNoTypeVariables(=>)
-            handleNoFormalParameters(=>, MemberKind.StaticMethod)
+            handleNoFormalParameters(=>, MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
@@ -406,17 +406,17 @@
             handleVoidKeyword(void)
             handleIdentifier(staticSetter, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.StaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
               beginMetadataStar(int)
               endMetadataStar(0)
-              beginFormalParameter(int, MemberKind.StaticMethod, null, null, null)
+              beginFormalParameter(int, MemberKind.ExtensionTypeStaticMethod, null, null, null)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(value)
                 handleType(int, null)
                 handleIdentifier(value, formalParameterDeclaration)
                 handleFormalParameterWithoutValue())
-              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
-            endFormalParameters(1, (, ), MemberKind.StaticMethod)
+              endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
@@ -432,8 +432,8 @@
             handleType(int, null)
             handleIdentifier(staticMethod, methodDeclaration)
             handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.StaticMethod)
-            endFormalParameters(0, (, ), MemberKind.StaticMethod)
+            beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.ExtensionTypeStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
index 4b0b4af..7fed4da 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
@@ -180,21 +180,21 @@
                     listener: handleQualified(.)
                 parseMethodTypeVar(constructor)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(constructor, ExtensionType4, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(constructor, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(constructor, ExtensionType4, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(constructor, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(this)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleNoType(()
                         ensureIdentifier(., fieldInitializer)
                           listener: handleIdentifier(it, fieldInitializer)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(this, null, ., it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -225,23 +225,23 @@
                     listener: handleQualified(.)
                 parseMethodTypeVar(redirect)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(redirect, ExtensionType4, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(redirect, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(redirect, ExtensionType4, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(redirect, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(it)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(it, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, it, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   parseInitializers(:)
                     listener: beginInitializers(:)
@@ -451,8 +451,8 @@
                   listener: handleIdentifier(getter, methodDeclaration)
                 parseQualifiedRestOpt(getter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(=>)
-                parseGetterOrFormalParameters(getter, getter, true, MemberKind.NonStaticMethod)
-                  listener: handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(getter, getter, true, MemberKind.ExtensionTypeNonStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt(getter)
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt(getter)
@@ -493,23 +493,23 @@
                   listener: handleIdentifier(setter, methodDeclaration)
                 parseQualifiedRestOpt(setter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(setter, setter, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(setter, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(setter, setter, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(setter, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -539,11 +539,11 @@
                 parseQualifiedRestOpt(method, methodDeclarationContinuation)
                 parseMethodTypeVar(method)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(method, method, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters(method, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters(method, method, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(method, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -585,23 +585,23 @@
                   listener: handleOperatorName(operator, [])
                 parseMethodTypeVar([])
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters([], operator, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters([], MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters([], operator, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters([], MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(index)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -641,35 +641,35 @@
                   listener: handleOperatorName(operator, []=)
                 parseMethodTypeVar([]=)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters([]=, operator, false, MemberKind.NonStaticMethod)
-                  parseFormalParameters([]=, MemberKind.NonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                parseGetterOrFormalParameters([]=, operator, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters([]=, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(index)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(index, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue(,)
-                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, index, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
                         parseMetadataStar(,)
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(2, (, ), MemberKind.ExtensionTypeNonStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -721,8 +721,8 @@
                   listener: handleIdentifier(staticGetter, methodDeclaration)
                 parseQualifiedRestOpt(staticGetter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(=>)
-                parseGetterOrFormalParameters(staticGetter, staticGetter, true, MemberKind.StaticMethod)
-                  listener: handleNoFormalParameters(=>, MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticGetter, staticGetter, true, MemberKind.ExtensionTypeStaticMethod)
+                  listener: handleNoFormalParameters(=>, MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt(staticGetter)
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt(staticGetter)
@@ -755,23 +755,23 @@
                   listener: handleIdentifier(staticSetter, methodDeclaration)
                 parseQualifiedRestOpt(staticSetter, methodDeclarationContinuation)
                 listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(staticSetter, staticSetter, false, MemberKind.StaticMethod)
-                  parseFormalParameters(staticSetter, MemberKind.StaticMethod)
-                    parseFormalParametersRest((, MemberKind.StaticMethod)
-                      listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticSetter, staticSetter, false, MemberKind.ExtensionTypeStaticMethod)
+                  parseFormalParameters(staticSetter, MemberKind.ExtensionTypeStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
                         parseMetadataStar(()
                           listener: beginMetadataStar(int)
                           listener: endMetadataStar(0)
-                        listener: beginFormalParameter(int, MemberKind.StaticMethod, null, null, null)
+                        listener: beginFormalParameter(int, MemberKind.ExtensionTypeStaticMethod, null, null, null)
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(value)
                         listener: handleType(int, null)
                         ensureIdentifier(int, formalParameterDeclaration)
                           listener: handleIdentifier(value, formalParameterDeclaration)
                         listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.StaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.StaticMethod)
+                        listener: endFormalParameter(null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
@@ -800,11 +800,11 @@
                 parseQualifiedRestOpt(staticMethod, methodDeclarationContinuation)
                 parseMethodTypeVar(staticMethod)
                   listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(staticMethod, staticMethod, false, MemberKind.StaticMethod)
-                  parseFormalParameters(staticMethod, MemberKind.StaticMethod)
-                    parseFormalParametersRest((, MemberKind.StaticMethod)
-                      listener: beginFormalParameters((, MemberKind.StaticMethod)
-                      listener: endFormalParameters(0, (, ), MemberKind.StaticMethod)
+                parseGetterOrFormalParameters(staticMethod, staticMethod, false, MemberKind.ExtensionTypeStaticMethod)
+                  parseFormalParameters(staticMethod, MemberKind.ExtensionTypeStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.ExtensionTypeStaticMethod)
                 parseInitializersOpt())
                   listener: handleNoInitializers()
                 parseAsyncModifierOpt())
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
index fcb85ff..13aab61 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
@@ -36,8 +36,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -86,28 +86,28 @@
 }
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ #this = i;
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ #this = i;
   return #this;
 }
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#::T%> /* = dynamic */ #this;
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ #this;
   #this = self::Bar|constructor#_<self::Bar|constructor#::T%>(i);
   return #this;
 }
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic {
   self::expect(44, self::Foo|constructor#(42) as{Unchecked} core::int);
   self::expect(42, self::Foo|constructor#_(42) as{Unchecked} core::int);
   self::expect(3, self::Foo|constructor#redirectNamed1(5, 2) as{Unchecked} core::int);
   self::expect(5, self::Foo|constructor#redirectNamed2(7, 2) as{Unchecked} core::int);
-  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} dynamic);
-  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} invalid-type);
+  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} invalid-type);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
index fcb85ff..13aab61 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
@@ -36,8 +36,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -86,28 +86,28 @@
 }
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ #this = i;
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ #this = i;
   return #this;
 }
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#::T%> /* = dynamic */ #this;
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ #this;
   #this = self::Bar|constructor#_<self::Bar|constructor#::T%>(i);
   return #this;
 }
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic {
   self::expect(44, self::Foo|constructor#(42) as{Unchecked} core::int);
   self::expect(42, self::Foo|constructor#_(42) as{Unchecked} core::int);
   self::expect(3, self::Foo|constructor#redirectNamed1(5, 2) as{Unchecked} core::int);
   self::expect(5, self::Foo|constructor#redirectNamed2(7, 2) as{Unchecked} core::int);
-  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} dynamic);
-  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} invalid-type);
+  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} invalid-type);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect
index fcb85ff..13aab61 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.expect
@@ -36,8 +36,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -86,28 +86,28 @@
 }
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ #this = i;
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ #this = i;
   return #this;
 }
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#::T%> /* = dynamic */ #this;
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ #this;
   #this = self::Bar|constructor#_<self::Bar|constructor#::T%>(i);
   return #this;
 }
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic {
   self::expect(44, self::Foo|constructor#(42) as{Unchecked} core::int);
   self::expect(42, self::Foo|constructor#_(42) as{Unchecked} core::int);
   self::expect(3, self::Foo|constructor#redirectNamed1(5, 2) as{Unchecked} core::int);
   self::expect(5, self::Foo|constructor#redirectNamed2(7, 2) as{Unchecked} core::int);
-  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} dynamic);
-  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} invalid-type);
+  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} invalid-type);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect
index fcb85ff..13aab61 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.modular.expect
@@ -36,8 +36,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -86,28 +86,28 @@
 }
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ #this = i;
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ #this = i;
   return #this;
 }
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#::T%> /* = dynamic */ #this;
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ #this;
   #this = self::Bar|constructor#_<self::Bar|constructor#::T%>(i);
   return #this;
 }
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic {
   self::expect(44, self::Foo|constructor#(42) as{Unchecked} core::int);
   self::expect(42, self::Foo|constructor#_(42) as{Unchecked} core::int);
   self::expect(3, self::Foo|constructor#redirectNamed1(5, 2) as{Unchecked} core::int);
   self::expect(5, self::Foo|constructor#redirectNamed2(7, 2) as{Unchecked} core::int);
-  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} dynamic);
-  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} invalid-type);
+  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} invalid-type);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect
index 5441e956..450f4e8 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.outline.expect
@@ -24,8 +24,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -55,13 +55,13 @@
   ;
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */
   ;
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */
   ;
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect
index fcb85ff..13aab61 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.weak.transformed.expect
@@ -36,8 +36,8 @@
   constructor erroneous = self::Foo|constructor#erroneous;
   constructor tearoff erroneous = self::Foo|constructor#_#erroneous#tearOff;
 }
-extension type Bar<T extends core::Object? = dynamic>(dynamic i) {
-  abstract extension-type-member representation-field get i() → dynamic;
+extension type Bar<T extends core::Object? = dynamic>(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
   constructor _ = self::Bar|constructor#_;
   constructor tearoff _ = self::Bar|constructor#_#_#tearOff;
   constructor • = self::Bar|constructor#;
@@ -86,28 +86,28 @@
 }
 static extension-type-member method Foo|constructor#_#erroneous#tearOff() → self::Foo /* = core::int */
   return self::Foo|constructor#erroneous();
-static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#_::T%> /* = dynamic */ #this = i;
+static extension-type-member method Bar|constructor#_<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#_::T%> /* = invalid-type */ #this = i;
   return #this;
 }
-static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#_#tearOff<T extends core::Object? = dynamic>(invalid-type i) → self::Bar<self::Bar|constructor#_#_#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#_<self::Bar|constructor#_#_#tearOff::T%>(i);
-static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = dynamic */ {
-  lowered final self::Bar<self::Bar|constructor#::T%> /* = dynamic */ #this;
+static extension-type-member method Bar|constructor#<T extends core::Object? = dynamic>(self::Bar|constructor#::T% i) → self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ {
+  lowered final self::Bar<self::Bar|constructor#::T%> /* = invalid-type */ #this;
   #this = self::Bar|constructor#_<self::Bar|constructor#::T%>(i);
   return #this;
 }
-static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = dynamic */
+static extension-type-member method Bar|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|constructor#_#new#tearOff::T% i) → self::Bar<self::Bar|constructor#_#new#tearOff::T%>% /* = invalid-type */
   return self::Bar|constructor#<self::Bar|constructor#_#new#tearOff::T%>(i);
 static method main() → dynamic {
   self::expect(44, self::Foo|constructor#(42) as{Unchecked} core::int);
   self::expect(42, self::Foo|constructor#_(42) as{Unchecked} core::int);
   self::expect(3, self::Foo|constructor#redirectNamed1(5, 2) as{Unchecked} core::int);
   self::expect(5, self::Foo|constructor#redirectNamed2(7, 2) as{Unchecked} core::int);
-  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} dynamic);
-  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} dynamic);
-  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|constructor#<core::int>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#<core::String>("foo") as{Unchecked} invalid-type);
+  self::expect(5, self::Bar|constructor#_<dynamic>(5) as{Unchecked} invalid-type);
+  self::expect("foo", self::Bar|constructor#_<dynamic>("foo") as{Unchecked} invalid-type);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.strong.expect
index 959bcc6..fa2b1d7 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.strong.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -87,11 +87,11 @@
 }
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar = #C1]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */ {
-  lowered final self::E4 /* = dynamic */ #this = foo;
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */ {
+  lowered final self::E4 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
 
 constants  {
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.strong.transformed.expect
index 959bcc6..fa2b1d7 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.strong.transformed.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -87,11 +87,11 @@
 }
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar = #C1]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */ {
-  lowered final self::E4 /* = dynamic */ #this = foo;
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */ {
+  lowered final self::E4 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
 
 constants  {
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.expect
index 959bcc6..fa2b1d7 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -87,11 +87,11 @@
 }
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar = #C1]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */ {
-  lowered final self::E4 /* = dynamic */ #this = foo;
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */ {
+  lowered final self::E4 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
 
 constants  {
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.modular.expect
index 959bcc6..fa2b1d7 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.modular.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -87,11 +87,11 @@
 }
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar = #C1]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */ {
-  lowered final self::E4 /* = dynamic */ #this = foo;
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */ {
+  lowered final self::E4 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
 
 constants  {
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.outline.expect
index cec71ca..3b36ac5 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.outline.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -75,7 +75,7 @@
   ;
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */
   ;
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
diff --git a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.transformed.expect
index 959bcc6..fa2b1d7 100644
--- a/pkg/front_end/testcases/extension_types/issue53212.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53212.dart.weak.transformed.expect
@@ -46,8 +46,8 @@
   constructor named = self::E3|constructor#named;
   constructor tearoff named = self::E3|constructor#_#named#tearOff;
 }
-extension type E4(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E4(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
@@ -87,11 +87,11 @@
 }
 static extension-type-member method E3|constructor#_#named#tearOff(core::int foo, [has-declared-initializer invalid-type bar = #C1]) → self::E3 /* = core::int */
   return self::E3|constructor#named(foo, bar);
-static extension-type-member method E4|constructor#(dynamic foo) → self::E4 /* = dynamic */ {
-  lowered final self::E4 /* = dynamic */ #this = foo;
+static extension-type-member method E4|constructor#(invalid-type foo) → self::E4 /* = invalid-type */ {
+  lowered final self::E4 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff(dynamic foo) → self::E4 /* = dynamic */
+static extension-type-member method E4|constructor#_#new#tearOff(invalid-type foo) → self::E4 /* = invalid-type */
   return self::E4|constructor#(foo);
 
 constants  {
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart b/pkg/front_end/testcases/extension_types/issue53324.dart
new file mode 100644
index 0000000..c0f7351
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by b
+// BSD-style license that can be found in the LICENSE file.
+
+void method(covariant int i) /* Error */ {}
+void setter(covariant int x) /* Error */ {}
+
+extension type ET1(num id) {
+  void method(covariant int i) /* Error */ {}
+}
+
+extension type ET2<T extends num>(T id) {
+  void setter(covariant int x) /* Error */ {}
+}
+
+extension type ET3(num id) {
+  int operator +(covariant int other) /* Error */ => other + id.floor();
+}
+
+extension type ET4(covariant num id) /* Error */ {}
+
+extension type ET5(required num id) /* Error */ {}
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.strong.expect
new file mode 100644
index 0000000..06bfcbd
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.strong.expect
@@ -0,0 +1,112 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void {}
+static method setter(covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */ {
+  lowered final self::ET1 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void {}
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ {
+  lowered final self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */ {
+  lowered final self::ET3 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  return other.{core::num::+}((#this as{Unchecked} core::num).{core::num::floor}(){() → core::int}){(core::num) → core::int};
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */ {
+  lowered final self::ET4 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */ {
+  lowered final self::ET5 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.strong.transformed.expect
new file mode 100644
index 0000000..06bfcbd
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.strong.transformed.expect
@@ -0,0 +1,112 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void {}
+static method setter(covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */ {
+  lowered final self::ET1 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void {}
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ {
+  lowered final self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */ {
+  lowered final self::ET3 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  return other.{core::num::+}((#this as{Unchecked} core::num).{core::num::floor}(){() → core::int}){(core::num) → core::int};
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */ {
+  lowered final self::ET4 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */ {
+  lowered final self::ET5 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline.expect
new file mode 100644
index 0000000..df18a33
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+void method(covariant int i) {}
+void setter(covariant int x) {}
+extension type ET1(num id) {
+  void method(covariant int i) {}
+}
+extension type ET2<T extends num>(T id) {
+  void setter(covariant int x) {}
+}
+extension type ET3(num id) {
+  int operator +(covariant int other) => other + id.floor();
+}
+extension type ET4(covariant num id) {}
+extension type ET5(required num id) {}
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9c57332
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+extension type ET1(num id) {
+  void method(covariant int i) {}
+}
+extension type ET2<T extends num>(T id) {
+  void setter(covariant int x) {}
+}
+extension type ET3(num id) {
+  int operator +(covariant int other) => other + id.floor();
+}
+extension type ET4(covariant num id) {}
+extension type ET5(required num id) {}
+void method(covariant int i) {}
+void setter(covariant int x) {}
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.expect
new file mode 100644
index 0000000..06bfcbd
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.expect
@@ -0,0 +1,112 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void {}
+static method setter(covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */ {
+  lowered final self::ET1 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void {}
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ {
+  lowered final self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */ {
+  lowered final self::ET3 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  return other.{core::num::+}((#this as{Unchecked} core::num).{core::num::floor}(){() → core::int}){(core::num) → core::int};
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */ {
+  lowered final self::ET4 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */ {
+  lowered final self::ET5 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.modular.expect
new file mode 100644
index 0000000..06bfcbd
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.modular.expect
@@ -0,0 +1,112 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void {}
+static method setter(covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */ {
+  lowered final self::ET1 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void {}
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ {
+  lowered final self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */ {
+  lowered final self::ET3 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  return other.{core::num::+}((#this as{Unchecked} core::num).{core::num::floor}(){() → core::int}){(core::num) → core::int};
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */ {
+  lowered final self::ET4 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */ {
+  lowered final self::ET5 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.outline.expect
new file mode 100644
index 0000000..cb1761c
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.outline.expect
@@ -0,0 +1,106 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void
+  ;
+static method setter(covariant-by-declaration core::int x) → void
+  ;
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */
+  ;
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void
+  ;
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */
+  ;
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void
+  ;
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */
+  ;
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  ;
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */
+  ;
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */
+  ;
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/issue53324.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.transformed.expect
new file mode 100644
index 0000000..06bfcbd
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/issue53324.dart.weak.transformed.expect
@@ -0,0 +1,112 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:5:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void method(covariant int i) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:6:13: Error: Can't have modifier 'covariant' here.
+// Try removing 'covariant'.
+// void setter(covariant int x) /* Error */ {}
+//             ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:9:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void method(covariant int i) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:13:15: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   void setter(covariant int x) /* Error */ {}
+//               ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:17:18: Error: Can't have modifier 'covariant' in an extension type.
+// Try removing 'covariant'.
+//   int operator +(covariant int other) /* Error */ => other + id.floor();
+//                  ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:20:20: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type ET4(covariant num id) /* Error */ {}
+//                    ^^^^^^^^^
+//
+// pkg/front_end/testcases/extension_types/issue53324.dart:22:20: Error: Can't have modifier 'required' here.
+// Try removing 'required'.
+// extension type ET5(required num id) /* Error */ {}
+//                    ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  method method = self::ET1|method;
+  method tearoff method = self::ET1|get#method;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2<T extends core::num>(T id) {
+  abstract extension-type-member representation-field get id() → T;
+  method setter = self::ET2|setter;
+  method tearoff setter = self::ET2|get#setter;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  operator + = self::ET3|+;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(core::num id) {
+  abstract extension-type-member representation-field get id() → core::num;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+static method method(covariant-by-declaration core::int i) → void {}
+static method setter(covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET1|constructor#(core::num id) → self::ET1 /* = core::num */ {
+  lowered final self::ET1 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET1|constructor#_#new#tearOff(core::num id) → self::ET1 /* = core::num */
+  return self::ET1|constructor#(id);
+static extension-type-member method ET1|method(lowered final self::ET1 /* = core::num */ #this, covariant-by-declaration core::int i) → void {}
+static extension-type-member method ET1|get#method(lowered final self::ET1 /* = core::num */ #this) → (core::int) → void
+  return (core::int i) → void => self::ET1|method(#this, i);
+static extension-type-member method ET2|constructor#<T extends core::num>(self::ET2|constructor#::T id) → self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ {
+  lowered final self::ET2<self::ET2|constructor#::T> /* = self::ET2|constructor#::T */ #this = id;
+  return #this;
+}
+static extension-type-member method ET2|constructor#_#new#tearOff<T extends core::num>(self::ET2|constructor#_#new#tearOff::T id) → self::ET2<self::ET2|constructor#_#new#tearOff::T>% /* = self::ET2|constructor#_#new#tearOff::T */
+  return self::ET2|constructor#<self::ET2|constructor#_#new#tearOff::T>(id);
+static extension-type-member method ET2|setter<T extends core::num>(lowered final self::ET2<self::ET2|setter::T> /* = self::ET2|setter::T */ #this, covariant-by-declaration core::int x) → void {}
+static extension-type-member method ET2|get#setter<T extends core::num>(lowered final self::ET2<self::ET2|get#setter::T>% /* = self::ET2|get#setter::T */ #this) → (core::int) → void
+  return (core::int x) → void => self::ET2|setter<self::ET2|get#setter::T>(#this, x);
+static extension-type-member method ET3|constructor#(core::num id) → self::ET3 /* = core::num */ {
+  lowered final self::ET3 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET3|constructor#_#new#tearOff(core::num id) → self::ET3 /* = core::num */
+  return self::ET3|constructor#(id);
+static extension-type-member method ET3|+(lowered final self::ET3 /* = core::num */ #this, covariant-by-declaration core::int other) → core::int
+  return other.{core::num::+}((#this as{Unchecked} core::num).{core::num::floor}(){() → core::int}){(core::num) → core::int};
+static extension-type-member method ET4|constructor#(covariant-by-declaration core::num id) → self::ET4 /* = core::num */ {
+  lowered final self::ET4 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET4|constructor#_#new#tearOff(core::num id) → self::ET4 /* = core::num */
+  return self::ET4|constructor#(id);
+static extension-type-member method ET5|constructor#(core::num id) → self::ET5 /* = core::num */ {
+  lowered final self::ET5 /* = core::num */ #this = id;
+  return #this;
+}
+static extension-type-member method ET5|constructor#_#new#tearOff(core::num id) → self::ET5 /* = core::num */
+  return self::ET5|constructor#(id);
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect
index 0f73142..59f4bb9 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,17 +207,17 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ {
-  lowered final self::E1 /* = dynamic */ #this = foo;
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */ {
+  lowered final self::E1 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */ {
-  lowered final self::E2 /* = dynamic */ #this = foo;
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */ {
+  lowered final self::E2 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */ {
   lowered final self::E3 /* = core::String */ #this = foo;
@@ -237,11 +243,11 @@
   lowered final self::E6 /* = core::double */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ {
-  lowered final self::E7 /* = dynamic */ #this = foo;
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */ {
+  lowered final self::E7 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */ {
   lowered final self::E8 /* = invalid-type */ #this;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect
index 0f73142..59f4bb9 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.transformed.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,17 +207,17 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ {
-  lowered final self::E1 /* = dynamic */ #this = foo;
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */ {
+  lowered final self::E1 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */ {
-  lowered final self::E2 /* = dynamic */ #this = foo;
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */ {
+  lowered final self::E2 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */ {
   lowered final self::E3 /* = core::String */ #this = foo;
@@ -237,11 +243,11 @@
   lowered final self::E6 /* = core::double */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ {
-  lowered final self::E7 /* = dynamic */ #this = foo;
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */ {
+  lowered final self::E7 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */ {
   lowered final self::E8 /* = invalid-type */ #this;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect
index 0f73142..59f4bb9 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,17 +207,17 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ {
-  lowered final self::E1 /* = dynamic */ #this = foo;
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */ {
+  lowered final self::E1 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */ {
-  lowered final self::E2 /* = dynamic */ #this = foo;
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */ {
+  lowered final self::E2 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */ {
   lowered final self::E3 /* = core::String */ #this = foo;
@@ -237,11 +243,11 @@
   lowered final self::E6 /* = core::double */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ {
-  lowered final self::E7 /* = dynamic */ #this = foo;
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */ {
+  lowered final self::E7 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */ {
   lowered final self::E8 /* = invalid-type */ #this;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect
index 0f73142..59f4bb9 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.modular.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,17 +207,17 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ {
-  lowered final self::E1 /* = dynamic */ #this = foo;
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */ {
+  lowered final self::E1 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */ {
-  lowered final self::E2 /* = dynamic */ #this = foo;
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */ {
+  lowered final self::E2 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */ {
   lowered final self::E3 /* = core::String */ #this = foo;
@@ -237,11 +243,11 @@
   lowered final self::E6 /* = core::double */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ {
-  lowered final self::E7 /* = dynamic */ #this = foo;
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */ {
+  lowered final self::E7 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */ {
   lowered final self::E8 /* = invalid-type */ #this;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect
index 0d041cb..1d39527 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.outline.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,13 +207,13 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */
   ;
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */
   ;
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */
   ;
@@ -225,9 +231,9 @@
   return self::E6|constructor#(foo);
 static extension-type-member method E6|constructor#(covariant-by-declaration final core::double foo) → self::E6 /* = core::double */
   ;
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */
   ;
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */
   ;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect
index 0f73142..59f4bb9 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.weak.transformed.expect
@@ -18,9 +18,10 @@
 // extension type E3(final String foo) {} // Error.
 //                                ^^^
 //
-// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:33: Error: Representation fields can't have modifiers.
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:8:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
 // extension type E4(covariant num foo) {} // Error.
-//                                 ^^^
+//                   ^^^^^^^^^
 //
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:9:19: Error: Can't have modifier 'const' here.
 // Try removing 'const'.
@@ -31,6 +32,11 @@
 // extension type E5(const bool foo) {} // Error.
 //                              ^^^
 //
+// pkg/front_end/testcases/extension_types/representation_field_error.dart:10:19: Error: Can't have modifier 'covariant' in a primary constructor.
+// Try removing 'covariant'.
+// extension type E6(covariant final double foo) {} // Error.
+//                   ^^^^^^^^^
+//
 // pkg/front_end/testcases/extension_types/representation_field_error.dart:10:42: Error: Representation fields can't have modifiers.
 // extension type E6(covariant final double foo) {} // Error.
 //                                          ^^^
@@ -105,13 +111,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension type E1(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E1(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E2(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -135,8 +141,8 @@
   constructor • = self::E6|constructor#;
   constructor tearoff • = self::E6|constructor#_#new#tearOff;
 }
-extension type E7(dynamic foo) {
-  abstract extension-type-member representation-field get foo() → dynamic;
+extension type E7(invalid-type foo) {
+  abstract extension-type-member representation-field get foo() → invalid-type;
   constructor • = self::E7|constructor#;
   constructor tearoff • = self::E7|constructor#_#new#tearOff;
 }
@@ -201,17 +207,17 @@
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
-static extension-type-member method E1|constructor#(dynamic foo) → self::E1 /* = dynamic */ {
-  lowered final self::E1 /* = dynamic */ #this = foo;
+static extension-type-member method E1|constructor#(invalid-type foo) → self::E1 /* = invalid-type */ {
+  lowered final self::E1 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E1|constructor#_#new#tearOff(dynamic foo) → self::E1 /* = dynamic */
+static extension-type-member method E1|constructor#_#new#tearOff(invalid-type foo) → self::E1 /* = invalid-type */
   return self::E1|constructor#(foo);
-static extension-type-member method E2|constructor#(final dynamic foo) → self::E2 /* = dynamic */ {
-  lowered final self::E2 /* = dynamic */ #this = foo;
+static extension-type-member method E2|constructor#(final invalid-type foo) → self::E2 /* = invalid-type */ {
+  lowered final self::E2 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff(dynamic foo) → self::E2 /* = dynamic */
+static extension-type-member method E2|constructor#_#new#tearOff(invalid-type foo) → self::E2 /* = invalid-type */
   return self::E2|constructor#(foo);
 static extension-type-member method E3|constructor#(final core::String foo) → self::E3 /* = core::String */ {
   lowered final self::E3 /* = core::String */ #this = foo;
@@ -237,11 +243,11 @@
   lowered final self::E6 /* = core::double */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#(dynamic foo) → self::E7 /* = dynamic */ {
-  lowered final self::E7 /* = dynamic */ #this = foo;
+static extension-type-member method E7|constructor#(invalid-type foo) → self::E7 /* = invalid-type */ {
+  lowered final self::E7 /* = invalid-type */ #this = foo;
   return #this;
 }
-static extension-type-member method E7|constructor#_#new#tearOff(dynamic foo) → self::E7 /* = dynamic */
+static extension-type-member method E7|constructor#_#new#tearOff(invalid-type foo) → self::E7 /* = invalid-type */
   return self::E7|constructor#(foo);
 static extension-type-member method E8|constructor#() → self::E8 /* = invalid-type */ {
   lowered final self::E8 /* = invalid-type */ #this;
diff --git a/tests/language/extension_type/covariant_parameter_error_test.dart b/tests/language/extension_type/covariant_parameter_error_test.dart
new file mode 100644
index 0000000..c882070
--- /dev/null
+++ b/tests/language/extension_type/covariant_parameter_error_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by b
+// BSD-style license that can be found in the LICENSE file.
+
+extension type ET1(num id) {
+  void method(covariant int i) {}
+  //          ^^^^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE
+  // [cfe] Can't have modifier 'covariant' in an extension type.
+}
+
+extension type ET2<T extends num>(T id) {
+  void setter(covariant int x) {}
+  //          ^^^^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE
+  // [cfe] Can't have modifier 'covariant' in an extension type.
+}
+
+extension type ET3(num id) {
+  int operator +(covariant int other) => other + id.floor();
+  //             ^^^^^^^^^
+  // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE
+  // [cfe] Can't have modifier 'covariant' in an extension type.
+}
+
+extension type ET4(covariant num id) {}
+//                 ^^^^^^^^^
+// [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR
+// [cfe] Can't have modifier 'covariant' in a primary constructor.
diff --git a/tests/language/extension_type/regress_53625_error_test.dart b/tests/language/extension_type/regress_53625_error_test.dart
index 4ff91ab..b073396 100644
--- a/tests/language/extension_type/regress_53625_error_test.dart
+++ b/tests/language/extension_type/regress_53625_error_test.dart
@@ -20,66 +20,70 @@
 extension type E00(int) {}
 //                 ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_TYPE
-//                    ^
-// [cfe] unspecified
+// [cfe] Expected a representation type.
 
 extension type E01(int x,) {}
 //                      ^
-// [analyzer] unspecified
-// [cfe] unspecified
+// [analyzer] SYNTACTIC_ERROR.REPRESENTATION_FIELD_TRAILING_COMMA
+// [cfe] The representation field can't have a trailing comma.
 
 extension type E02(final int x) {}
 //                 ^^^^^
 // [analyzer] SYNTACTIC_ERROR.REPRESENTATION_FIELD_MODIFIER
-// [cfe] unspecified
+//                           ^
+// [cfe] Representation fields can't have modifiers.
 
 extension type E03(var x) {}
 //                 ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_TYPE
 // [analyzer] SYNTACTIC_ERROR.REPRESENTATION_FIELD_MODIFIER
-// [cfe] unspecified
+//                     ^
+// [cfe] Expected a representation type.
 
 extension type E04(final x) {}
 //                 ^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_TYPE
 // [analyzer] SYNTACTIC_ERROR.REPRESENTATION_FIELD_MODIFIER
-// [cfe] unspecified
+//                       ^
+// [cfe] Expected a representation type.
+// [cfe] Representation fields can't have modifiers.
 
 extension type E05(covariant int x) {}
 //                 ^^^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
-// [cfe] unspecified
+// [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR
+// [cfe] Can't have modifier 'covariant' in a primary constructor.
 
 extension type E06(required int x) {}
 //                 ^^^^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
-// [cfe] unspecified
+// [cfe] Can't have modifier 'required' here.
 
 extension type E07(int this.x) {} // Initializing formal.
-//                     ^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+//                 ^^^
+// [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
 
 extension type E08(this.x) {} // Initializing formal.
-//                 ^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+//                 ^^^^
+// [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
+//                      ^
+// [cfe] Expected a representation type.
 
 extension type E09(int super.x) implements E {} // Constructor super-parameter.
-//                     ^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+//                 ^^^
+// [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
+//                           ^
+// [cfe] Extension type constructors can't declare super formal parameters.
 
 extension type E10(super.x) implements E {} // Constructor super-parameter.
 //                 ^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-//                 ^^^^^^^
-// [cfe] unspecified
+//                       ^
+// [cfe] Expected a representation type.
+// [cfe] Extension type constructors can't declare super formal parameters.
 
 extension type E11(int x()) {} // Old-style function parameter syntax.
-//                 ^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+//                 ^^^
+// [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
 
 // The "primary parameter" declares a "field",
 // but still does not accept field modifiers or initializers.
@@ -87,94 +91,109 @@
 extension type E12(late int x) {}
 //                 ^^^^
 // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
-// [cfe] unspecified
+// [cfe] Can't have modifier 'late' here.
 
 extension type E13(int x = 0) {}
-//                       ^^^
-// [analyzer] unspecified
-// [cfe] unspecified
+//                 ^^^
+// [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
+//                       ^
+// [analyzer] SYNTACTIC_ERROR.NAMED_PARAMETER_OUTSIDE_GROUP
+// [cfe] Non-optional parameters can't have a default value.
 
 extension type E14(static int x) {}
 //                 ^^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
-// [cfe] unspecified
+// [cfe] Can't have modifier 'static' here.
 
 extension type const E15(const int x) {}
 //                       ^^^^^
 // [analyzer] SYNTACTIC_ERROR.EXTRANEOUS_MODIFIER
-// [cfe] unspecified
+// [cfe] Can't have modifier 'const' here.
+//                                 ^
+// [cfe] Representation fields can't have modifiers.
 
 // Precisely one parameter is allowed and required.
 
 extension type E16() {}
+//                ^
+// [cfe] Expected a representation field.
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
 
 extension type E17(int x, String y) {}
+//                ^
+// [cfe] Each extension type should have exactly one representation field.
 //                      ^
 // [analyzer] SYNTACTIC_ERROR.MULTIPLE_REPRESENTATION_FIELDS
-// [cfe] unspecified
 
 extension type E18(int x, [String y = "2"]) {}
 //                      ^
 // [analyzer] SYNTACTIC_ERROR.MULTIPLE_REPRESENTATION_FIELDS
-// [cfe] unspecified
+//                                ^
+// [cfe] Extension type declarations can't have optional parameters.
 
 extension type E19(int x, {required String y}) {}
 //                      ^
 // [analyzer] SYNTACTIC_ERROR.MULTIPLE_REPRESENTATION_FIELDS
-// [cfe] unspecified
+//                                         ^
+// [cfe] Extension type declarations can't have named parameters.
 
 extension type E20(int x, {String y = "2"}) {}
 //                      ^
 // [analyzer] SYNTACTIC_ERROR.MULTIPLE_REPRESENTATION_FIELDS
-// [cfe] unspecified
+//                                ^
+// [cfe] Extension type declarations can't have named parameters.
 
 extension type E21([int x = 0]) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
+//                      ^
+// [cfe] Extension type declarations can't have optional parameters.
 
 extension type E22([int x = 0, int y = 0]) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
+//                                 ^
+// [cfe] Extension type declarations can't have optional parameters.
 
 extension type E23({required int x}) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
+//                               ^
+// [cfe] Extension type declarations can't have named parameters.
 
 extension type E24({int x = 0}) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
+//                      ^
+// [cfe] Extension type declarations can't have named parameters.
 
 extension type E25({int x = 0, int y = 0}) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_FIELD
-// [cfe] unspecified
+//                                 ^
+// [cfe] Extension type declarations can't have named parameters.
 
 // Annotations are allowed, but only at the start.
 
 extension type E26(@anno int) {}
 //                 ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_TYPE
-//                          ^
-// [cfe] unspecified
+//                       ^
+// [cfe] Expected a representation type.
 
 extension type E27(int @anno x) {}
 //                 ^^^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_REPRESENTATION_TYPE
+// [cfe] Expected a representation type.
 //                     ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] unspecified
+// [cfe] Expected ')' before this.
 
 extension type E28(int x @anno) {}
 //                       ^
 // [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] unspecified
+// [cfe] Expected ')' before this.
 
 
 // Helpers