[cfe] Create builders for extension type declarations

Change-Id: I12251865e0657a6241e9e3ce905df83bda24e260
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/313566
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 5e4cbfe..6662deb 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -199,6 +199,22 @@
         type.clone(newTypes, contextLibrary, contextDeclaration), name);
   }
 
+  FormalParameterBuilder forPrimaryConstructor() {
+    return new FormalParameterBuilder(
+        metadata,
+        kind,
+        modifiers | initializingFormalMask,
+        const ImplicitTypeBuilder(),
+        name,
+        null,
+        charOffset,
+        fileUri: fileUri,
+        isExtensionThis: isExtensionThis,
+        hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer)
+      ..parent = parent
+      ..variable = variable;
+  }
+
   FormalParameterBuilder forFormalParameterInitializerScope() {
     if (isInitializingFormal) {
       return new FormalParameterBuilder(
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 8df48c2..74e0c4e 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -303,7 +303,8 @@
       TypeVariableBuilder typeParameterBuilder =
           _declaration as TypeVariableBuilder;
       if (typeParameterBuilder.kind == TypeVariableKind.classMixinOrEnum ||
-          typeParameterBuilder.kind == TypeVariableKind.extension ||
+          typeParameterBuilder.kind ==
+              TypeVariableKind.extensionOrExtensionType ||
           typeParameterBuilder.kind == TypeVariableKind.extensionSynthesized) {
         switch (_instanceTypeVariableAccess) {
           case InstanceTypeVariableAccessState.Disallowed:
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index 373977d..0d4f649 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -34,16 +34,13 @@
   /// A type variable declared on a class, mixin or enum.
   classMixinOrEnum,
 
-  /// A type variable declared on an extension.
-  extension,
+  /// A type variable declared on an extension or an extension type.
+  extensionOrExtensionType,
 
   /// A type variable on an extension instance member synthesized from an
   /// extension type variable.
   extensionSynthesized,
 
-  /// A type variable declared on an extension type.
-  extensionType,
-
   /// A type variable builder created from a kernel node.
   fromKernel,
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
index e41df3f..3a888fc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
@@ -264,6 +264,7 @@
   diet_listener_buildFields,
   diet_listener_buildFunctionBody,
   diet_listener_buildFunctionBody_parseFunctionBody,
+  diet_listener_buildPrimaryConstructor,
   diet_listener_buildRedirectingFactoryMethod,
 
   inferImplicitFieldType,
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 7ca7acb..0e846dc5e 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -636,7 +636,8 @@
     if (name is ParserRecovery || currentClassIsParserRecovery) return;
 
     SourceFunctionBuilderImpl builder =
-        lookupConstructor(beginToken, name!) as SourceFunctionBuilderImpl;
+        lookupConstructor(beginToken, _getConstructorName(name!))
+            as SourceFunctionBuilderImpl;
     if (_inRedirectingFactory) {
       buildRedirectingFactoryMethod(
           bodyToken, builder, MemberKind.Factory, metadata);
@@ -737,6 +738,11 @@
   void _endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken, bool isConstructor) {
     debugEvent("Method");
+    assert(checkState(beginToken, [
+      /* bodyToken */ ValueKinds.Token,
+      /* name */ ValueKinds.NameOrQualifiedNameOrOperatorOrParserRecovery,
+      /* metadata token */ ValueKinds.TokenOrNull,
+    ]));
     // TODO(danrubel): Consider removing the beginParam parameter
     // and using bodyToken, but pushing a NullValue on the stack
     // in handleNoFormalParameters rather than the supplied token.
@@ -747,7 +753,8 @@
     if (name is ParserRecovery || currentClassIsParserRecovery) return;
     SourceFunctionBuilder builder;
     if (isConstructor) {
-      builder = lookupConstructor(beginToken, name!) as SourceFunctionBuilder;
+      builder = lookupConstructor(beginToken, _getConstructorName(name!))
+          as SourceFunctionBuilder;
     } else {
       Builder? memberBuilder =
           lookupBuilder(beginToken, getOrSet, name as String);
@@ -995,6 +1002,59 @@
   }
 
   @override
+  void beginExtensionTypeDeclaration(Token extensionKeyword, Token nameToken) {
+    debugEvent("beginExtensionTypeDeclaration");
+    push(nameToken.lexeme);
+    push(extensionKeyword);
+
+    // The current declaration is set in [beginClassOrMixinOrExtensionBody] but
+    // for primary constructors we need it before the body so we set it here.
+    // TODO(johnniwinther): Normalize the setting of the current declaration.
+    assert(currentDeclaration == null);
+    assert(memberScope == libraryBuilder.scope);
+
+    currentDeclaration = lookupBuilder(extensionKeyword, null, nameToken.lexeme)
+        as DeclarationBuilder;
+    memberScope = currentDeclaration!.scope;
+  }
+
+  @override
+  void beginPrimaryConstructor(Token beginToken) {
+    debugEvent("beginPrimaryConstructor");
+  }
+
+  @override
+  void endPrimaryConstructor(Token beginToken, bool hasConstructorName) {
+    assert(checkState(beginToken, [
+      /* formals begin token */ ValueKinds.Token,
+      if (hasConstructorName) ValueKinds.NameOrParserRecovery,
+    ]));
+    debugEvent("endPrimaryConstructor");
+    Token formalsToken = pop() as Token; // Pop formals begin token.
+    String constructorName = '';
+    if (hasConstructorName) {
+      constructorName = pop() as String; // Pop constructor name.
+    }
+    SourceFunctionBuilder builder =
+        lookupConstructor(formalsToken, constructorName)
+            as SourceFunctionBuilder;
+    buildPrimaryConstructor(createFunctionListener(builder), formalsToken);
+
+    // The current declaration is set in [beginClassOrMixinOrExtensionBody],
+    // assuming that it is currently `null`, so we reset it here.
+    // TODO(johnniwinther): Normalize the setting of the current declaration.
+    currentDeclaration = null;
+    memberScope = libraryBuilder.scope;
+  }
+
+  @override
+  void endExtensionTypeDeclaration(
+      Token extensionKeyword, Token typeKeyword, Token endToken) {
+    debugEvent("endExtensionTypeDeclaration");
+    checkEmpty(extensionKeyword.charOffset);
+  }
+
+  @override
   void beginEnum(Token enumKeyword) {
     assert(checkState(enumKeyword, [ValueKinds.NameOrParserRecovery]));
     debugEvent("Enum");
@@ -1095,6 +1155,29 @@
   AsyncMarker? getAsyncMarker(StackListenerImpl listener) =>
       listener.pop() as AsyncMarker?;
 
+  void buildPrimaryConstructor(BodyBuilder bodyBuilder, Token startToken) {
+    _benchmarker?.beginSubdivide(
+        BenchmarkSubdivides.diet_listener_buildPrimaryConstructor);
+    Token token = startToken;
+    try {
+      Parser parser = new Parser(bodyBuilder,
+          useImplicitCreationExpression: useImplicitCreationExpressionInCfe,
+          allowPatterns: libraryFeatures.patterns.isEnabled);
+      token = parser.parseFormalParametersOpt(
+          parser.syntheticPreviousToken(token), MemberKind.PrimaryConstructor);
+      FormalParameters? formals = bodyBuilder.pop() as FormalParameters?;
+      bodyBuilder.checkEmpty(token.next!.charOffset);
+      bodyBuilder.handleNoInitializers();
+      bodyBuilder.checkEmpty(token.charOffset);
+      bodyBuilder.finishFunction(formals, AsyncMarker.Sync, null);
+      _benchmarker?.endSubdivide();
+    } on DebugAbort {
+      rethrow;
+    } catch (e, s) {
+      throw new Crash(uri, token.charOffset, e, s);
+    }
+  }
+
   void buildFunctionBody(BodyBuilder bodyBuilder, Token startToken,
       Token? metadata, MemberKind kind) {
     _benchmarker
@@ -1188,11 +1271,7 @@
         .lookupLocalUnnamedExtension(uri, extensionToken.charOffset);
   }
 
-  Builder? lookupConstructor(Token token, Object nameOrQualified) {
-    assert(currentDeclaration != null);
-    assert(currentDeclaration is SourceClassBuilder ||
-        currentDeclaration is SourceInlineClassBuilder);
-    Builder? declaration;
+  String _getConstructorName(Object nameOrQualified) {
     String suffix;
     if (nameOrQualified is QualifiedName) {
       suffix = nameOrQualified.name;
@@ -1201,13 +1280,26 @@
           ? ""
           : nameOrQualified as String;
     }
+    return suffix;
+  }
+
+  Builder? lookupConstructor(Token token, String constructorName) {
+    assert(currentDeclaration != null);
+    assert(currentDeclaration is SourceClassBuilder ||
+        currentDeclaration is SourceInlineClassBuilder);
+    Builder? declaration;
     if (libraryFeatures.constructorTearoffs.isEnabled) {
-      suffix = suffix == "new" ? "" : suffix;
+      constructorName = constructorName == "new" ? "" : constructorName;
     }
     declaration =
-        currentDeclaration!.constructorScope.lookupLocalMember(suffix);
+        currentDeclaration!.constructorScope.lookupLocalMember(constructorName);
     declaration = handleDuplicatedName(declaration, token);
-    checkBuilder(token, declaration, nameOrQualified);
+    checkBuilder(
+        token,
+        declaration,
+        constructorName.isEmpty
+            ? currentDeclaration!.name
+            : '${currentDeclaration!.name}.$constructorName');
     return declaration;
   }
 
@@ -1240,9 +1332,9 @@
     }
   }
 
-  void checkBuilder(Token token, Builder? declaration, Object name) {
+  void checkBuilder(Token token, Builder? declaration, String name) {
     if (declaration == null) {
-      internalProblem(templateInternalProblemNotFound.withArguments("$name"),
+      internalProblem(templateInternalProblemNotFound.withArguments(name),
           token.charOffset, uri);
     }
     if (uri != declaration.fileUri) {
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 d585827..1ef040a 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -241,7 +241,14 @@
 
   /// In an extension declaration before the extension body.
   ///
-  /// This includes type parameters declared on the class declaration but
+  /// This includes type parameters declared on the extension declaration but
+  /// excludes annotations on the extension declaration itself, which are seen
+  /// in the [Library] context.
+  ExtensionOrExtensionType,
+
+  /// In an extension declaration before the extension body.
+  ///
+  /// This includes type parameters declared on the extension declaration but
   /// excludes annotations on the extension declaration itself, which are seen
   /// in the [Library] context.
   Extension,
@@ -402,6 +409,7 @@
       case DeclarationContext.Mixin:
       case DeclarationContext.MixinInstanceMethod:
       case DeclarationContext.MixinInstanceField:
+      case DeclarationContext.ExtensionOrExtensionType:
       case DeclarationContext.Extension:
       case DeclarationContext.ExtensionInstanceMethod:
       case DeclarationContext.ExtensionExternalInstanceField:
@@ -445,12 +453,12 @@
       case DeclarationContext.Mixin:
       case DeclarationContext.NamedMixinApplication:
         return TypeVariableKind.classMixinOrEnum;
+      case DeclarationContext.ExtensionOrExtensionType:
       case DeclarationContext.Extension:
       case DeclarationContext.ExtensionBody:
-        return TypeVariableKind.extension;
       case DeclarationContext.ExtensionType:
       case DeclarationContext.ExtensionTypeBody:
-        return TypeVariableKind.extensionType;
+        return TypeVariableKind.extensionOrExtensionType;
       case DeclarationContext.ClassBody:
       case DeclarationContext.ClassConstructor:
       case DeclarationContext.ClassFactory:
@@ -1551,9 +1559,10 @@
   void beginExtensionDeclarationPrelude(Token extensionKeyword) {
     assert(checkState(extensionKeyword, [ValueKinds.MetadataListOrNull]));
     debugEvent("beginExtensionDeclaration");
-    pushDeclarationContext(DeclarationContext.Extension);
+    pushDeclarationContext(DeclarationContext.ExtensionOrExtensionType);
     libraryBuilder.beginNestedDeclaration(
-        TypeParameterScopeKind.extensionDeclaration, "extension");
+        TypeParameterScopeKind.extensionOrExtensionTypeDeclaration,
+        "extension");
   }
 
   @override
@@ -1561,6 +1570,8 @@
     assert(checkState(extensionKeyword,
         [ValueKinds.TypeVariableListOrNull, ValueKinds.MetadataListOrNull]));
     debugEvent("beginExtensionDeclaration");
+    popDeclarationContext(DeclarationContext.ExtensionOrExtensionType);
+    pushDeclarationContext(DeclarationContext.Extension);
     List<TypeVariableBuilder>? typeVariables =
         pop() as List<TypeVariableBuilder>?;
     int offset = nameToken?.charOffset ?? extensionKeyword.charOffset;
@@ -1661,6 +1672,116 @@
     popDeclarationContext(DeclarationContext.Extension);
   }
 
+  @override
+  void beginExtensionTypeDeclaration(Token extensionKeyword, Token nameToken) {
+    assert(checkState(extensionKeyword,
+        [ValueKinds.TypeVariableListOrNull, ValueKinds.MetadataListOrNull]));
+    debugEvent("beginExtensionTypeDeclaration");
+    popDeclarationContext(DeclarationContext.ExtensionOrExtensionType);
+    pushDeclarationContext(DeclarationContext.ExtensionType);
+    List<TypeVariableBuilder>? typeVariables =
+        pop() as List<TypeVariableBuilder>?;
+    int offset = nameToken.charOffset;
+    push(nameToken.lexeme);
+    push(offset);
+    push(typeVariables ?? NullValues.TypeVariables);
+    libraryBuilder.currentTypeParameterScopeBuilder
+        .markAsExtensionTypeDeclaration(
+            nameToken.lexeme, offset, typeVariables);
+  }
+
+  @override
+  void endExtensionTypeDeclaration(
+      Token extensionKeyword, Token typeKeyword, Token endToken) {
+    assert(checkState(extensionKeyword, [
+      ValueKinds.TypeBuilderListOrNull,
+      ValueKinds.TypeVariableListOrNull,
+      ValueKinds.Integer,
+      ValueKinds.Name,
+      ValueKinds.MetadataListOrNull,
+    ]));
+    reportIfNotEnabled(libraryFeatures.inlineClass, typeKeyword.charOffset,
+        typeKeyword.length);
+
+    List<TypeBuilder>? interfaces =
+        pop(NullValues.TypeBuilderList) as List<TypeBuilder>?;
+    List<TypeVariableBuilder>? typeVariables =
+        pop(NullValues.TypeVariables) as List<TypeVariableBuilder>?;
+    int nameOffset = popCharOffset();
+    String name = pop() as String;
+    List<MetadataBuilder>? metadata =
+        pop(NullValues.Metadata) as List<MetadataBuilder>?;
+    checkEmpty(extensionKeyword.charOffset);
+
+    reportIfNotEnabled(libraryFeatures.inlineClass,
+        extensionKeyword.next!.charOffset, extensionKeyword.next!.length);
+    int startOffset = metadata == null
+        ? extensionKeyword.charOffset
+        : metadata.first.charOffset;
+    libraryBuilder.addExtensionTypeDeclaration(
+        metadata,
+        // TODO(johnniwinther): Support modifiers on extension types?
+        0,
+        name,
+        typeVariables,
+        interfaces,
+        startOffset,
+        nameOffset,
+        endToken.charOffset);
+
+    popDeclarationContext(DeclarationContext.ExtensionType);
+  }
+
+  @override
+  void beginPrimaryConstructor(Token beginToken) {}
+
+  @override
+  void endPrimaryConstructor(Token beginToken, bool hasConstructorName) {
+    assert(checkState(beginToken, [
+      ValueKinds.FormalListOrNull,
+      ValueKinds.Integer,
+      if (hasConstructorName) ValueKinds.Integer,
+      if (hasConstructorName) ValueKinds.Name,
+    ]));
+    List<FormalParameterBuilder>? formals =
+        pop(NullValues.FormalParameters) as List<FormalParameterBuilder>?;
+    int charOffset = pop() as int; // Pop formals char offset
+    String constructorName = '';
+    if (hasConstructorName) {
+      charOffset = pop() as int; // Pop name offset
+      constructorName = pop() as String; // Pop name
+    }
+    if (formals != null) {
+      for (int i = 0; i < formals.length; i++) {
+        FormalParameterBuilder formal = formals[i];
+        libraryBuilder.addPrimaryConstructorField(
+            metadata: formal.metadata,
+            type: formal.type,
+            name: formal.name,
+            charOffset: formal.charOffset);
+        formals[i] = formal.forPrimaryConstructor();
+      }
+    }
+
+    libraryBuilder.beginNestedDeclaration(
+        TypeParameterScopeKind.constructor, "#method",
+        hasMembers: false);
+    TypeParameterScopeBuilder scopeBuilder = libraryBuilder
+        .endNestedDeclaration(TypeParameterScopeKind.constructor, "#method");
+    var (
+      List<TypeVariableBuilder>? typeVariables,
+      _
+    ) = _createSyntheticTypeVariables(
+        libraryBuilder.currentTypeParameterScopeBuilder, scopeBuilder, null);
+    scopeBuilder.resolveNamedTypes(typeVariables, libraryBuilder);
+
+    libraryBuilder.addPrimaryConstructor(
+        constructorName: constructorName == "new" ? "" : constructorName,
+        charOffset: charOffset,
+        formals: formals,
+        typeVariables: typeVariables);
+  }
+
   ProcedureKind computeProcedureKind(Token? token) {
     if (token == null) return ProcedureKind.Method;
     if (optional("get", token)) return ProcedureKind.Getter;
@@ -1955,6 +2076,38 @@
         endToken, _MethodKind.extensionConstructor);
   }
 
+  (List<TypeVariableBuilder>?, Map<TypeVariableBuilder, TypeBuilder>?)
+      _createSyntheticTypeVariables(
+          TypeParameterScopeBuilder enclosingDeclarationScopeBuilder,
+          TypeParameterScopeBuilder memberScopeBuilder,
+          List<TypeVariableBuilder>? typeVariables) {
+    Map<TypeVariableBuilder, TypeBuilder>? substitution;
+    if (enclosingDeclarationScopeBuilder.typeVariables != null) {
+      // We synthesize the names of the generated [TypeParameter]s, i.e.
+      // rename 'T' to '#T'. We cannot do it on the builders because their
+      // names are used to create the scope.
+      List<TypeVariableBuilder> synthesizedTypeVariables =
+          libraryBuilder.copyTypeVariables(
+              enclosingDeclarationScopeBuilder.typeVariables!,
+              memberScopeBuilder,
+              kind: TypeVariableKind.extensionSynthesized);
+      substitution = {};
+      for (int i = 0; i < synthesizedTypeVariables.length; i++) {
+        substitution[enclosingDeclarationScopeBuilder.typeVariables![i]] =
+            new NamedTypeBuilder.fromTypeDeclarationBuilder(
+                synthesizedTypeVariables[i], const NullabilityBuilder.omitted(),
+                instanceTypeVariableAccess:
+                    declarationContext.instanceTypeVariableAccessState);
+      }
+      if (typeVariables != null) {
+        typeVariables = synthesizedTypeVariables..addAll(typeVariables);
+      } else {
+        typeVariables = synthesizedTypeVariables;
+      }
+    }
+    return (typeVariables, substitution);
+  }
+
   void _endClassMethod(Token? getOrSet, Token beginToken, Token beginParam,
       Token? beginInitializers, Token endToken, _MethodKind methodKind) {
     assert(checkState(beginToken, [ValueKinds.MethodBody]));
@@ -2115,32 +2268,14 @@
           (libraryBuilder.currentTypeParameterScopeBuilder.kind ==
                   TypeParameterScopeKind.extensionDeclaration ||
               libraryBuilder.currentTypeParameterScopeBuilder.kind ==
-                  TypeParameterScopeKind.inlineClassDeclaration)) {
+                  TypeParameterScopeKind.inlineClassDeclaration ||
+              libraryBuilder.currentTypeParameterScopeBuilder.kind ==
+                  TypeParameterScopeKind.extensionTypeDeclaration)) {
         TypeParameterScopeBuilder declaration =
             libraryBuilder.currentTypeParameterScopeBuilder;
         Map<TypeVariableBuilder, TypeBuilder>? substitution;
-        if (declaration.typeVariables != null) {
-          // We synthesize the names of the generated [TypeParameter]s, i.e.
-          // rename 'T' to '#T'. We cannot do it on the builders because their
-          // names are used to create the scope.
-          List<TypeVariableBuilder> synthesizedTypeVariables = libraryBuilder
-              .copyTypeVariables(declaration.typeVariables!, declarationBuilder,
-                  kind: TypeVariableKind.extensionSynthesized);
-          substitution = {};
-          for (int i = 0; i < synthesizedTypeVariables.length; i++) {
-            substitution[declaration.typeVariables![i]] =
-                new NamedTypeBuilder.fromTypeDeclarationBuilder(
-                    synthesizedTypeVariables[i],
-                    const NullabilityBuilder.omitted(),
-                    instanceTypeVariableAccess:
-                        declarationContext.instanceTypeVariableAccessState);
-          }
-          if (typeVariables != null) {
-            typeVariables = synthesizedTypeVariables..addAll(typeVariables);
-          } else {
-            typeVariables = synthesizedTypeVariables;
-          }
-        }
+        (typeVariables, substitution) = _createSyntheticTypeVariables(
+            declaration, declarationBuilder, typeVariables);
         if (!isConstructor) {
           List<FormalParameterBuilder> synthesizedFormals = [];
           TypeBuilder thisType;
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 3baaa6f..cffd0c7 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -2188,7 +2188,8 @@
       int startOffset,
       int nameOffset,
       int endOffset) {
-    // Nested declaration began in `OutlineBuilder.beginExtensionDeclaration`.
+    // Nested declaration began in
+    // `OutlineBuilder.beginExtensionDeclarationPrelude`.
     TypeParameterScopeBuilder declaration =
         endNestedDeclaration(TypeParameterScopeKind.extensionDeclaration, name)
           ..resolveNamedTypes(typeVariables, this);
@@ -2259,6 +2260,99 @@
         getterReference: referenceFrom?.reference);
   }
 
+  void addExtensionTypeDeclaration(
+      List<MetadataBuilder>? metadata,
+      int modifiers,
+      String name,
+      List<TypeVariableBuilder>? typeVariables,
+      List<TypeBuilder>? interfaces,
+      int startOffset,
+      int nameOffset,
+      int endOffset) {
+    // Nested declaration began in `OutlineBuilder.beginExtensionDeclaration`.
+    TypeParameterScopeBuilder declaration = endNestedDeclaration(
+        TypeParameterScopeKind.extensionTypeDeclaration, name)
+      ..resolveNamedTypes(typeVariables, this);
+    assert(declaration.parent == _libraryTypeParameterScopeBuilder);
+    Map<String, Builder> members = declaration.members!;
+    Map<String, MemberBuilder> constructors = declaration.constructors!;
+    Map<String, MemberBuilder> setters = declaration.setters!;
+
+    Scope memberScope = new Scope(
+        kind: ScopeKind.declaration,
+        local: members,
+        setters: setters,
+        parent: scope.withTypeVariables(typeVariables),
+        debugName: "inline class $name",
+        isModifiable: false);
+    ConstructorScope constructorScope =
+        new ConstructorScope(name, constructors);
+
+    InlineClass? referenceFrom = referencesFromIndexed?.lookupInlineClass(name);
+
+    SourceFieldBuilder? representationFieldBuilder;
+    outer:
+    for (Builder? member in members.values) {
+      while (member != null) {
+        if (!member.isDuplicate &&
+            member is SourceFieldBuilder &&
+            !member.isStatic) {
+          representationFieldBuilder = member;
+          break outer;
+        }
+        member = member.next;
+      }
+    }
+
+    InlineClassBuilder inlineClassBuilder = new SourceInlineClassBuilder(
+        metadata,
+        modifiers,
+        declaration.name,
+        typeVariables,
+        interfaces,
+        memberScope,
+        constructorScope,
+        this,
+        new List<ConstructorReferenceBuilder>.of(constructorReferences),
+        startOffset,
+        nameOffset,
+        endOffset,
+        referenceFrom,
+        representationFieldBuilder);
+    constructorReferences.clear();
+    Map<String, TypeVariableBuilder>? typeVariablesByName =
+        checkTypeVariables(typeVariables, inlineClassBuilder);
+    void setParent(MemberBuilder? member) {
+      while (member != null) {
+        member.parent = inlineClassBuilder;
+        member = member.next as MemberBuilder?;
+      }
+    }
+
+    void setParentAndCheckConflicts(String name, Builder member) {
+      if (typeVariablesByName != null) {
+        TypeVariableBuilder? tv = typeVariablesByName[name];
+        if (tv != null) {
+          inlineClassBuilder.addProblem(
+              templateConflictsWithTypeVariable.withArguments(name),
+              member.charOffset,
+              name.length,
+              context: [
+                messageConflictsWithTypeVariableCause.withLocation(
+                    tv.fileUri!, tv.charOffset, name.length)
+              ]);
+        }
+      }
+      setParent(member as MemberBuilder);
+    }
+
+    members.forEach(setParentAndCheckConflicts);
+    constructors.forEach(setParentAndCheckConflicts);
+    setters.forEach(setParentAndCheckConflicts);
+    addBuilder(inlineClassBuilder.name, inlineClassBuilder, nameOffset,
+        getterReference: referenceFrom?.reference);
+  }
+
   void addInlineClassDeclaration(
       List<MetadataBuilder>? metadata,
       int modifiers,
@@ -2734,7 +2828,7 @@
     checkTypeVariables(typeVariables, supertype.declaration);
   }
 
-  void addField(
+  SourceFieldBuilder addField(
       List<MetadataBuilder>? metadata,
       int modifiers,
       bool isTopLevel,
@@ -2855,6 +2949,44 @@
     addBuilder(name, fieldBuilder, charOffset,
         getterReference: fieldGetterReference,
         setterReference: fieldSetterReference);
+    return fieldBuilder;
+  }
+
+  void addPrimaryConstructorField(
+      {required List<MetadataBuilder>? metadata,
+      required TypeBuilder type,
+      required String name,
+      required int charOffset}) {
+    addField(
+        metadata,
+        finalMask,
+        /* isTopLevel = */ false,
+        type,
+        name,
+        /* charOffset = */ charOffset,
+        /* charEndOffset = */ charOffset,
+        /* initializerToken = */ null,
+        /* hasInitializer = */ false);
+  }
+
+  void addPrimaryConstructor(
+      {required String constructorName,
+      required List<TypeVariableBuilder>? typeVariables,
+      required List<FormalParameterBuilder>? formals,
+      required int charOffset}) {
+    addConstructor(
+        null,
+        constMask,
+        null,
+        constructorName,
+        typeVariables,
+        formals,
+        /* startCharOffset = */ charOffset,
+        charOffset,
+        /* charOpenParenOffset = */ charOffset,
+        /* charEndOffset = */ charOffset,
+        /* nativeMethodName = */ null,
+        forAbstractClass: false);
   }
 
   void addConstructor(
@@ -2896,7 +3028,9 @@
             ? new LibraryName(referencesFrom!.reference)
             : libraryName);
     if (currentTypeParameterScopeBuilder.kind ==
-        TypeParameterScopeKind.inlineClassDeclaration) {
+            TypeParameterScopeKind.inlineClassDeclaration ||
+        currentTypeParameterScopeBuilder.kind ==
+            TypeParameterScopeKind.extensionTypeDeclaration) {
       constructorBuilder = new SourceInlineClassConstructorBuilder(
           metadata,
           modifiers & ~abstractMask,
@@ -5243,7 +5377,9 @@
   mixinDeclaration,
   unnamedMixinApplication,
   namedMixinApplication,
+  extensionOrExtensionTypeDeclaration,
   extensionDeclaration,
+  extensionTypeDeclaration,
   inlineClassDeclaration,
   typedef,
   staticMethod,
@@ -5268,6 +5404,7 @@
       case TypeParameterScopeKind.unnamedMixinApplication:
       case TypeParameterScopeKind.namedMixinApplication:
       case TypeParameterScopeKind.enumDeclaration:
+      case TypeParameterScopeKind.extensionTypeDeclaration:
       case TypeParameterScopeKind.inlineClassDeclaration:
         return new ClassName(name);
       case TypeParameterScopeKind.extensionDeclaration:
@@ -5279,6 +5416,7 @@
       case TypeParameterScopeKind.topLevelMethod:
       case TypeParameterScopeKind.factoryMethod:
       case TypeParameterScopeKind.functionType:
+      case TypeParameterScopeKind.extensionOrExtensionTypeDeclaration:
         throw new UnsupportedError("Unexpected field container: ${this}");
     }
   }
@@ -5297,6 +5435,7 @@
         return ContainerType.Class;
       case TypeParameterScopeKind.extensionDeclaration:
         return ContainerType.Extension;
+      case TypeParameterScopeKind.extensionTypeDeclaration:
       case TypeParameterScopeKind.inlineClassDeclaration:
         return ContainerType.InlineClass;
       case TypeParameterScopeKind.typedef:
@@ -5306,6 +5445,7 @@
       case TypeParameterScopeKind.topLevelMethod:
       case TypeParameterScopeKind.factoryMethod:
       case TypeParameterScopeKind.functionType:
+      case TypeParameterScopeKind.extensionOrExtensionTypeDeclaration:
         throw new UnsupportedError("Unexpected field container: ${this}");
     }
   }
@@ -5430,8 +5570,9 @@
   /// the given [name] and [typeVariables] located [charOffset].
   void markAsExtensionDeclaration(
       String? name, int charOffset, List<TypeVariableBuilder>? typeVariables) {
-    assert(_kind == TypeParameterScopeKind.extensionDeclaration,
+    assert(_kind == TypeParameterScopeKind.extensionOrExtensionTypeDeclaration,
         "Unexpected declaration kind: $_kind");
+    _kind = TypeParameterScopeKind.extensionDeclaration;
     _extensionName = name != null
         ? new FixedExtensionName(name)
         : new UnnamedExtensionName();
@@ -5440,6 +5581,18 @@
     _typeVariables = typeVariables;
   }
 
+  /// Registers that this builder is preparing for an extension type declaration
+  /// with the given [name] and [typeVariables] located [charOffset].
+  void markAsExtensionTypeDeclaration(
+      String name, int charOffset, List<TypeVariableBuilder>? typeVariables) {
+    assert(_kind == TypeParameterScopeKind.extensionOrExtensionTypeDeclaration,
+        "Unexpected declaration kind: $_kind");
+    _kind = TypeParameterScopeKind.extensionTypeDeclaration;
+    _name = name;
+    _charOffset = charOffset;
+    _typeVariables = typeVariables;
+  }
+
   /// Registers that this builder is preparing for an inline class declaration
   /// with the given [name] and [typeVariables] located [charOffset].
   void markAsInlineClassDeclaration(
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 72f8a07..96eb3bdf 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -3161,6 +3161,10 @@
 class Function {}
 
 class Record {}
+
+class StateError {
+  StateError(String message);
+}
 """;
 
 /// A minimal implementation of dart:async that is sufficient to create an
diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
index be06561..890ef53 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -132,6 +132,8 @@
       const UnionValueKind([Name, Operator]);
   static const ValueKind NameOrQualifiedNameOrOperator =
       const UnionValueKind([Name, QualifiedName, Operator]);
+  static const ValueKind NameOrQualifiedNameOrOperatorOrParserRecovery =
+      const UnionValueKind([Name, QualifiedName, Operator, ParserRecovery]);
   static const ValueKind NameOrParserRecovery =
       const UnionValueKind([Name, ParserRecovery]);
   static const ValueKind NameOrParserRecoveryOrNull =
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index 91708d2..7d8144f 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -196,7 +196,8 @@
     }
 
     Parser parser = new Parser(description.listener,
-        useImplicitCreationExpression: useImplicitCreationExpressionInCfe);
+        useImplicitCreationExpression: useImplicitCreationExpressionInCfe,
+        allowPatterns: true);
     parser.parseUnit(description.cache.firstToken!);
 
     if (description.listener.problems.isEmpty) {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart
new file mode 100644
index 0000000..e610cdf
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart
@@ -0,0 +1,12 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+@Deprecated('')
+extension type A(@Deprecated('') int i) {
+  @Deprecated('')
+  A.constructor(this.i);
+
+  @Deprecated('')
+  void m() {}
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect
new file mode 100644
index 0000000..63ee54e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C2
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(@#C2 dynamic i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@#C2
+static inline-class-member method A|constructor(core::int i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@#C2
+static inline-class-member method A|m(lowered final self::A #this) → void {}
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+constants  {
+  #C1 = ""
+  #C2 = core::Deprecated {message:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- Deprecated. (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect
new file mode 100644
index 0000000..63ee54e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C2
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(@#C2 dynamic i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@#C2
+static inline-class-member method A|constructor(core::int i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@#C2
+static inline-class-member method A|m(lowered final self::A #this) → void {}
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+constants  {
+  #C1 = ""
+  #C2 = core::Deprecated {message:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- Deprecated. (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.textual_outline.expect
new file mode 100644
index 0000000..c763aaf
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+@Deprecated('')
+extension type A(
+@Deprecated('')
+int i) {
+@Deprecated('')
+A.constructor(this.i);
+@Deprecated('')
+void m() {}
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect
new file mode 100644
index 0000000..63ee54e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C2
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(@#C2 dynamic i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@#C2
+static inline-class-member method A|constructor(core::int i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@#C2
+static inline-class-member method A|m(lowered final self::A #this) → void {}
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+constants  {
+  #C1 = ""
+  #C2 = core::Deprecated {message:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- Deprecated. (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect
new file mode 100644
index 0000000..63ee54e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C2
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(@#C2 dynamic i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@#C2
+static inline-class-member method A|constructor(core::int i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@#C2
+static inline-class-member method A|m(lowered final self::A #this) → void {}
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+constants  {
+  #C1 = ""
+  #C2 = core::Deprecated {message:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- Deprecated. (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect
new file mode 100644
index 0000000..b9ce9f6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@core::Deprecated::•("")
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(dynamic i) → self::A
+  ;
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@core::Deprecated::•("")
+static inline-class-member method A|constructor(core::int i) → self::A
+  ;
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@core::Deprecated::•("")
+static inline-class-member method A|m(lowered final self::A #this) → void
+  ;
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:5:2 -> InstanceConstant(const Deprecated{Deprecated.message: ""})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:7:4 -> InstanceConstant(const Deprecated{Deprecated.message: ""})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:10:4 -> InstanceConstant(const Deprecated{Deprecated.message: ""})
+Extra constant evaluation: evaluated: 10, effectively constant: 3
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect
new file mode 100644
index 0000000..63ee54e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+@#C2
+inline class A /* declaredRepresentationType = core::int */ {
+  method m = self::A|m;
+  tearoff m = self::A|get#m;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+  constructor constructor = self::A|constructor;
+  tearoff constructor = self::A|_#constructor#tearOff;
+}
+static inline-class-member method A|(@#C2 dynamic i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic i) → self::A
+  return self::A|(i);
+@#C2
+static inline-class-member method A|constructor(core::int i) → self::A {
+  lowered final self::A #this = i;
+  return #this;
+}
+static inline-class-member method A|_#constructor#tearOff(core::int i) → self::A
+  return self::A|constructor(i);
+@#C2
+static inline-class-member method A|m(lowered final self::A #this) → void {}
+static inline-class-member method A|get#m(lowered final self::A #this) → () → void
+  return () → void => self::A|m(#this);
+
+constants  {
+  #C1 = ""
+  #C2 = core::Deprecated {message:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///annotations.dart:
+- Deprecated. (from org-dartlang-sdk:///sdk/lib/core/annotations.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart
new file mode 100644
index 0000000..fcf230e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart
@@ -0,0 +1,28 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class(int i) {
+  Class.named(this.i);
+
+  const factory Class.redirect(int i) = Class;
+
+  factory Class.fact(int i) => Class(i);
+
+  factory Class.redirect2(int i) = Class;
+}
+
+test() {
+  const Class.named(42); // Error
+  const Class.fact(87); // Error
+  const Class.redirect2(87); // Error
+}
+
+main() {
+  expect(42, const Class(42));
+  expect(87, const Class.redirect(87));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect
new file mode 100644
index 0000000..21f86e6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.named(42); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.fact(87); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.redirect2(87); // Error
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.named(42); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.fact(87); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.redirect2(87); // Error
+        ^^^^^";
+}
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(87, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..21f86e6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.named(42); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.fact(87); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.redirect2(87); // Error
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.named(42); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.fact(87); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.redirect2(87); // Error
+        ^^^^^";
+}
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(87, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..67e0cee
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension type Class(int i) {
+Class.named(this.i);
+const factory Class.redirect(int i) = Class;
+factory Class.fact(int i) => Class(i);
+factory Class.redirect2(int i) = Class;
+}
+test() {}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect
new file mode 100644
index 0000000..21f86e6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.named(42); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.fact(87); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.redirect2(87); // Error
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.named(42); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.fact(87); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.redirect2(87); // Error
+        ^^^^^";
+}
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(87, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..21f86e6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.named(42); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.fact(87); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.redirect2(87); // Error
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.named(42); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.fact(87); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.redirect2(87); // Error
+        ^^^^^";
+}
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(87, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..6fd717d
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class
+  ;
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class
+  ;
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  ;
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..21f86e6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect
@@ -0,0 +1,83 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.named(42); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.fact(87); // Error
+//         ^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   const Class.redirect2(87); // Error
+//         ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+  static redirecting-factory redirect = self::Class|redirect;
+  static tearoff redirect = self::Class|_#redirect#tearOff;
+  static factory fact = self::Class|fact;
+  static tearoff fact = self::Class|_#fact#tearOff;
+  static redirecting-factory redirect2 = self::Class|redirect2;
+  static tearoff redirect2 = self::Class|_#redirect2#tearOff;
+}
+static inline-class-member method Class|(dynamic i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|named(core::int i) → self::Class {
+  lowered final self::Class #this = i;
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int i) → self::Class
+  return self::Class|named(i);
+static inline-class-member method Class|redirect(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect#tearOff(core::int i) → self::Class;
+static inline-class-member method Class|fact(core::int i) → self::Class
+  return self::Class|(i);
+static inline-class-member method Class|_#fact#tearOff(core::int i) → self::Class
+  return self::Class|fact(i);
+static inline-class-member method Class|redirect2(core::int i) → self::Class /* redirection-target: self::Class| */
+  return self::Class|(i);
+static inline-class-member method Class|_#redirect2#tearOff(core::int i) → self::Class;
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:16:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.named(42); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:17:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.fact(87); // Error
+        ^^^^^";
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart:18:9: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  const Class.redirect2(87); // Error
+        ^^^^^";
+}
+static method main() → dynamic {
+  self::expect(42, #C1);
+  self::expect(87, #C2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = 42
+  #C2 = 87
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart
new file mode 100644
index 0000000..655e816
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart
@@ -0,0 +1,71 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class(int it) {
+  Class.named(int it) : this.it = it + 1;
+}
+
+extension type GenericClass<T>(T it) {}
+
+main() {
+  var a = new Class(3);
+  var b = Class(4);
+  var b2 = (Class.new)(4);
+  var c = new Class.named(5);
+  var c2 = (Class.named)(5);
+  var d = new GenericClass<String>('foo');
+  var d2 = (GenericClass<String>.new)('foo');
+  var d3 = (GenericClass.new)<String>('foo');
+  var e = GenericClass<String>('bar');
+  var e2 = (GenericClass<String>.new)('bar');
+  var e3 = (GenericClass.new)<String>('bar');
+  var f = GenericClass<int>(42);
+  var f2 = (GenericClass<int>.new)(42);
+  var f3 = (GenericClass.new)<int>(42);
+  var g = GenericClass(87);
+  var g2 = (GenericClass.new)(87);
+  GenericClass<num> h = GenericClass(123);
+  GenericClass<num> h2 = (GenericClass.new)(123);
+
+  expect(3, a.it);
+  expect(3, a);
+  expect(4, b.it);
+  expect(4, b);
+  expect(4, b2.it);
+  expect(4, b2);
+  expect(6, c.it);
+  expect(6, c);
+  expect(6, c2.it);
+  expect(6, c2);
+  expect('foo', d.it);
+  expect('foo', d);
+  expect('foo', d2.it);
+  expect('foo', d2);
+  expect('foo', d3.it);
+  expect('foo', d3);
+  expect('bar', e.it);
+  expect('bar', e);
+  expect('bar', e2.it);
+  expect('bar', e2);
+  expect('bar', e3.it);
+  expect('bar', e3);
+  expect(42, f.it);
+  expect(42, f);
+  expect(42, f2.it);
+  expect(42, f2);
+  expect(42, f3.it);
+  expect(42, f3);
+  expect(87, g.it);
+  expect(87, g);
+  expect(87, g2.it);
+  expect(87, g2);
+  expect(123, h.it);
+  expect(123, h);
+  expect(123, h2.it);
+  expect(123, h2);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect
new file mode 100644
index 0000000..b56282e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect
@@ -0,0 +1,100 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class {
+  lowered final self::Class #this = it.{core::num::+}(1){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> {
+  lowered final self::GenericClass<self::GenericClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic {
+  self::Class a = self::Class|(3);
+  self::Class b = self::Class|(4);
+  self::Class b2 = #C1(4){(dynamic) → self::Class};
+  self::Class c = self::Class|named(5);
+  self::Class c2 = #C2(5){(core::int) → self::Class};
+  self::GenericClass<core::String> d = self::GenericClass|<core::String>("foo");
+  self::GenericClass<core::String> d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e = self::GenericClass|<core::String>("bar");
+  self::GenericClass<core::String> e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::int> f = self::GenericClass|<core::int>(42);
+  self::GenericClass<core::int> f2 = #C5(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<core::int> f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<dynamic> g = self::GenericClass|<dynamic>(87);
+  self::GenericClass<dynamic> g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic>};
+  self::GenericClass<core::num> h = self::GenericClass|<core::num>(123);
+  self::GenericClass<core::num> h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num>};
+  self::expect(3, a as{Unchecked} core::int);
+  self::expect(3, a);
+  self::expect(4, b as{Unchecked} core::int);
+  self::expect(4, b);
+  self::expect(4, b2 as{Unchecked} core::int);
+  self::expect(4, b2);
+  self::expect(6, c as{Unchecked} core::int);
+  self::expect(6, c);
+  self::expect(6, c2 as{Unchecked} core::int);
+  self::expect(6, c2);
+  self::expect("foo", d as{Unchecked} core::String);
+  self::expect("foo", d);
+  self::expect("foo", d2 as{Unchecked} core::String);
+  self::expect("foo", d2);
+  self::expect("foo", d3 as{Unchecked} core::String);
+  self::expect("foo", d3);
+  self::expect("bar", e as{Unchecked} core::String);
+  self::expect("bar", e);
+  self::expect("bar", e2 as{Unchecked} core::String);
+  self::expect("bar", e2);
+  self::expect("bar", e3 as{Unchecked} core::String);
+  self::expect("bar", e3);
+  self::expect(42, f as{Unchecked} core::int);
+  self::expect(42, f);
+  self::expect(42, f2 as{Unchecked} core::int);
+  self::expect(42, f2);
+  self::expect(42, f3 as{Unchecked} core::int);
+  self::expect(42, f3);
+  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g);
+  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2);
+  self::expect(123, h as{Unchecked} core::num);
+  self::expect(123, h);
+  self::expect(123, h2 as{Unchecked} core::num);
+  self::expect(123, h2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class|_#new#tearOff
+  #C2 = static-tearoff self::Class|_#named#tearOff
+  #C3 = static-tearoff self::GenericClass|_#new#tearOff
+  #C4 = instantiation #C3 <core::String>
+  #C5 = instantiation #C3 <core::int>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect
new file mode 100644
index 0000000..bf569c1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class {
+  lowered final self::Class #this = it.{core::num::+}(1){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> {
+  lowered final self::GenericClass<self::GenericClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic {
+  self::Class a = self::Class|(3);
+  self::Class b = self::Class|(4);
+  self::Class b2 = #C1(4){(dynamic) → self::Class};
+  self::Class c = self::Class|named(5);
+  self::Class c2 = #C2(5){(core::int) → self::Class};
+  self::GenericClass<core::String> d = self::GenericClass|<core::String>("foo");
+  self::GenericClass<core::String> d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e = self::GenericClass|<core::String>("bar");
+  self::GenericClass<core::String> e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::int> f = self::GenericClass|<core::int>(42);
+  self::GenericClass<core::int> f2 = #C5(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<core::int> f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<dynamic> g = self::GenericClass|<dynamic>(87);
+  self::GenericClass<dynamic> g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic>};
+  self::GenericClass<core::num> h = self::GenericClass|<core::num>(123);
+  self::GenericClass<core::num> h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num>};
+  self::expect(3, a as{Unchecked} core::int);
+  self::expect(3, a);
+  self::expect(4, b as{Unchecked} core::int);
+  self::expect(4, b);
+  self::expect(4, b2 as{Unchecked} core::int);
+  self::expect(4, b2);
+  self::expect(6, c as{Unchecked} core::int);
+  self::expect(6, c);
+  self::expect(6, c2 as{Unchecked} core::int);
+  self::expect(6, c2);
+  self::expect("foo", d as{Unchecked} core::String);
+  self::expect("foo", d);
+  self::expect("foo", d2 as{Unchecked} core::String);
+  self::expect("foo", d2);
+  self::expect("foo", d3 as{Unchecked} core::String);
+  self::expect("foo", d3);
+  self::expect("bar", e as{Unchecked} core::String);
+  self::expect("bar", e);
+  self::expect("bar", e2 as{Unchecked} core::String);
+  self::expect("bar", e2);
+  self::expect("bar", e3 as{Unchecked} core::String);
+  self::expect("bar", e3);
+  self::expect(42, f as{Unchecked} core::int);
+  self::expect(42, f);
+  self::expect(42, f2 as{Unchecked} core::int);
+  self::expect(42, f2);
+  self::expect(42, f3 as{Unchecked} core::int);
+  self::expect(42, f3);
+  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g);
+  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2);
+  self::expect(123, h as{Unchecked} core::num);
+  self::expect(123, h);
+  self::expect(123, h2 as{Unchecked} core::num);
+  self::expect(123, h2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class|_#new#tearOff
+  #C2 = static-tearoff self::Class|_#named#tearOff
+  #C3 = static-tearoff self::GenericClass|_#new#tearOff
+  #C4 = instantiation #C3 <core::String>
+  #C5 = instantiation #C3 <core::int>
+}
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:12:15 -> IntConstant(3)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:13:11 -> IntConstant(4)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:17:15 -> StringConstant("foo")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:20:11 -> StringConstant("bar")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:23:11 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:26:11 -> IntConstant(87)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:28:25 -> IntConstant(123)
+Extra constant evaluation: evaluated: 129, effectively constant: 7
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.textual_outline.expect
new file mode 100644
index 0000000..6ca8eb6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+extension type Class(int it) {
+Class.named(int it) : this.it = it + 1;
+} extension type GenericClass<T>(T it) {}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect
new file mode 100644
index 0000000..6f925c6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect
@@ -0,0 +1,100 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class {
+  lowered final self::Class #this = it.{core::num::+}(1){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> {
+  lowered final self::GenericClass<self::GenericClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic {
+  self::Class a = self::Class|(3);
+  self::Class b = self::Class|(4);
+  self::Class b2 = #C1(4){(dynamic) → self::Class};
+  self::Class c = self::Class|named(5);
+  self::Class c2 = #C2(5){(core::int) → self::Class};
+  self::GenericClass<core::String> d = self::GenericClass|<core::String>("foo");
+  self::GenericClass<core::String> d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e = self::GenericClass|<core::String>("bar");
+  self::GenericClass<core::String> e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::int> f = self::GenericClass|<core::int>(42);
+  self::GenericClass<core::int> f2 = #C5(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<core::int> f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<dynamic> g = self::GenericClass|<dynamic>(87);
+  self::GenericClass<dynamic> g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic>};
+  self::GenericClass<core::num> h = self::GenericClass|<core::num>(123);
+  self::GenericClass<core::num> h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num>};
+  self::expect(3, a as{Unchecked} core::int);
+  self::expect(3, a);
+  self::expect(4, b as{Unchecked} core::int);
+  self::expect(4, b);
+  self::expect(4, b2 as{Unchecked} core::int);
+  self::expect(4, b2);
+  self::expect(6, c as{Unchecked} core::int);
+  self::expect(6, c);
+  self::expect(6, c2 as{Unchecked} core::int);
+  self::expect(6, c2);
+  self::expect("foo", d as{Unchecked} core::String);
+  self::expect("foo", d);
+  self::expect("foo", d2 as{Unchecked} core::String);
+  self::expect("foo", d2);
+  self::expect("foo", d3 as{Unchecked} core::String);
+  self::expect("foo", d3);
+  self::expect("bar", e as{Unchecked} core::String);
+  self::expect("bar", e);
+  self::expect("bar", e2 as{Unchecked} core::String);
+  self::expect("bar", e2);
+  self::expect("bar", e3 as{Unchecked} core::String);
+  self::expect("bar", e3);
+  self::expect(42, f as{Unchecked} core::int);
+  self::expect(42, f);
+  self::expect(42, f2 as{Unchecked} core::int);
+  self::expect(42, f2);
+  self::expect(42, f3 as{Unchecked} core::int);
+  self::expect(42, f3);
+  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g);
+  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2);
+  self::expect(123, h as{Unchecked} core::num);
+  self::expect(123, h);
+  self::expect(123, h2 as{Unchecked} core::num);
+  self::expect(123, h2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class|_#new#tearOff
+  #C2 = static-tearoff self::Class|_#named#tearOff
+  #C3 = static-tearoff self::GenericClass|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+  #C5 = instantiation #C3 <core::int*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect
new file mode 100644
index 0000000..6f925c6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect
@@ -0,0 +1,100 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class {
+  lowered final self::Class #this = it.{core::num::+}(1){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> {
+  lowered final self::GenericClass<self::GenericClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic {
+  self::Class a = self::Class|(3);
+  self::Class b = self::Class|(4);
+  self::Class b2 = #C1(4){(dynamic) → self::Class};
+  self::Class c = self::Class|named(5);
+  self::Class c2 = #C2(5){(core::int) → self::Class};
+  self::GenericClass<core::String> d = self::GenericClass|<core::String>("foo");
+  self::GenericClass<core::String> d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e = self::GenericClass|<core::String>("bar");
+  self::GenericClass<core::String> e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::int> f = self::GenericClass|<core::int>(42);
+  self::GenericClass<core::int> f2 = #C5(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<core::int> f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<dynamic> g = self::GenericClass|<dynamic>(87);
+  self::GenericClass<dynamic> g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic>};
+  self::GenericClass<core::num> h = self::GenericClass|<core::num>(123);
+  self::GenericClass<core::num> h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num>};
+  self::expect(3, a as{Unchecked} core::int);
+  self::expect(3, a);
+  self::expect(4, b as{Unchecked} core::int);
+  self::expect(4, b);
+  self::expect(4, b2 as{Unchecked} core::int);
+  self::expect(4, b2);
+  self::expect(6, c as{Unchecked} core::int);
+  self::expect(6, c);
+  self::expect(6, c2 as{Unchecked} core::int);
+  self::expect(6, c2);
+  self::expect("foo", d as{Unchecked} core::String);
+  self::expect("foo", d);
+  self::expect("foo", d2 as{Unchecked} core::String);
+  self::expect("foo", d2);
+  self::expect("foo", d3 as{Unchecked} core::String);
+  self::expect("foo", d3);
+  self::expect("bar", e as{Unchecked} core::String);
+  self::expect("bar", e);
+  self::expect("bar", e2 as{Unchecked} core::String);
+  self::expect("bar", e2);
+  self::expect("bar", e3 as{Unchecked} core::String);
+  self::expect("bar", e3);
+  self::expect(42, f as{Unchecked} core::int);
+  self::expect(42, f);
+  self::expect(42, f2 as{Unchecked} core::int);
+  self::expect(42, f2);
+  self::expect(42, f3 as{Unchecked} core::int);
+  self::expect(42, f3);
+  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g);
+  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2);
+  self::expect(123, h as{Unchecked} core::num);
+  self::expect(123, h);
+  self::expect(123, h2 as{Unchecked} core::num);
+  self::expect(123, h2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class|_#new#tearOff
+  #C2 = static-tearoff self::Class|_#named#tearOff
+  #C3 = static-tearoff self::GenericClass|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+  #C5 = instantiation #C3 <core::int*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect
new file mode 100644
index 0000000..83e8632
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class
+  ;
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class
+  ;
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%>
+  ;
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..ed5b3fe
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class|;
+  tearoff • = self::Class|_#new#tearOff;
+  constructor named = self::Class|named;
+  tearoff named = self::Class|_#named#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::GenericClass|;
+  tearoff • = self::GenericClass|_#new#tearOff;
+}
+static inline-class-member method Class|(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class
+  return self::Class|(it);
+static inline-class-member method Class|named(core::int it) → self::Class {
+  lowered final self::Class #this = it.{core::num::+}(1){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class
+  return self::Class|named(it);
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> {
+  lowered final self::GenericClass<self::GenericClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%>
+  return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
+static method main() → dynamic {
+  self::Class a = self::Class|(3);
+  self::Class b = self::Class|(4);
+  self::Class b2 = #C1(4){(dynamic) → self::Class};
+  self::Class c = self::Class|named(5);
+  self::Class c2 = #C2(5){(core::int) → self::Class};
+  self::GenericClass<core::String> d = self::GenericClass|<core::String>("foo");
+  self::GenericClass<core::String> d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e = self::GenericClass|<core::String>("bar");
+  self::GenericClass<core::String> e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::String> e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String>};
+  self::GenericClass<core::int> f = self::GenericClass|<core::int>(42);
+  self::GenericClass<core::int> f2 = #C5(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<core::int> f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int>};
+  self::GenericClass<dynamic> g = self::GenericClass|<dynamic>(87);
+  self::GenericClass<dynamic> g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic>};
+  self::GenericClass<core::num> h = self::GenericClass|<core::num>(123);
+  self::GenericClass<core::num> h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num>};
+  self::expect(3, a as{Unchecked} core::int);
+  self::expect(3, a);
+  self::expect(4, b as{Unchecked} core::int);
+  self::expect(4, b);
+  self::expect(4, b2 as{Unchecked} core::int);
+  self::expect(4, b2);
+  self::expect(6, c as{Unchecked} core::int);
+  self::expect(6, c);
+  self::expect(6, c2 as{Unchecked} core::int);
+  self::expect(6, c2);
+  self::expect("foo", d as{Unchecked} core::String);
+  self::expect("foo", d);
+  self::expect("foo", d2 as{Unchecked} core::String);
+  self::expect("foo", d2);
+  self::expect("foo", d3 as{Unchecked} core::String);
+  self::expect("foo", d3);
+  self::expect("bar", e as{Unchecked} core::String);
+  self::expect("bar", e);
+  self::expect("bar", e2 as{Unchecked} core::String);
+  self::expect("bar", e2);
+  self::expect("bar", e3 as{Unchecked} core::String);
+  self::expect("bar", e3);
+  self::expect(42, f as{Unchecked} core::int);
+  self::expect(42, f);
+  self::expect(42, f2 as{Unchecked} core::int);
+  self::expect(42, f2);
+  self::expect(42, f3 as{Unchecked} core::int);
+  self::expect(42, f3);
+  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g);
+  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2);
+  self::expect(123, h as{Unchecked} core::num);
+  self::expect(123, h);
+  self::expect(123, h2 as{Unchecked} core::num);
+  self::expect(123, h2);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::Class|_#new#tearOff
+  #C2 = static-tearoff self::Class|_#named#tearOff
+  #C3 = static-tearoff self::GenericClass|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+  #C5 = instantiation #C3 <core::int*>
+}
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:12:15 -> IntConstant(3)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:13:11 -> IntConstant(4)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:17:15 -> StringConstant("foo")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:20:11 -> StringConstant("bar")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:23:11 -> IntConstant(42)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:26:11 -> IntConstant(87)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///constructor_access.dart:28:25 -> IntConstant(123)
+Extra constant evaluation: evaluated: 129, effectively constant: 7
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart
new file mode 100644
index 0000000..6007e8e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart
@@ -0,0 +1,39 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class1(int it) {
+  Class1.named1(this.it, int additional);
+
+  Class1.named2(int this.it, int additional) {
+    print(additional);
+  }
+
+  Class1.named3(int it) : this.it = it;
+
+  Class1.named4(int additional, int it) : this.it = it;
+
+  Class1.named5(int additional, int it) : this.it = it {
+    print(additional);
+  }
+
+  Class1.named6(String text) : it = text.length;
+}
+
+extension type Class2<T>(T it) {
+  Class2.named1(this.it, int additional);
+
+  Class2.named2(T this.it, int additional) {
+    print(additional);
+  }
+
+  Class2.named3(T it) : this.it = it;
+
+  Class2.named4(int additional, T it) : this.it = it;
+
+  Class2.named5(int additional, T it) : this.it = it {
+    print(additional);
+  }
+
+  Class2.named6(List<T> list) : it = list.first;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect
new file mode 100644
index 0000000..f828a3b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect
@@ -0,0 +1,132 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1 {
+  lowered final self::Class1 #this = text.{core::String::length}{core::int};
+  return #this;
+}
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> {
+  lowered final self::Class2<self::Class2|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> {
+  lowered final self::Class2<self::Class2|named1::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%> {
+  lowered final self::Class2<self::Class2|named2::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%> {
+  lowered final self::Class2<self::Class2|named3::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%> {
+  lowered final self::Class2<self::Class2|named4::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%> {
+  lowered final self::Class2<self::Class2|named5::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%> {
+  lowered final self::Class2<self::Class2|named6::T%> #this = list.{core::Iterable::first}{self::Class2|named6::T%};
+  return #this;
+}
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect
new file mode 100644
index 0000000..f828a3b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect
@@ -0,0 +1,132 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1 {
+  lowered final self::Class1 #this = text.{core::String::length}{core::int};
+  return #this;
+}
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> {
+  lowered final self::Class2<self::Class2|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> {
+  lowered final self::Class2<self::Class2|named1::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%> {
+  lowered final self::Class2<self::Class2|named2::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%> {
+  lowered final self::Class2<self::Class2|named3::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%> {
+  lowered final self::Class2<self::Class2|named4::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%> {
+  lowered final self::Class2<self::Class2|named5::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%> {
+  lowered final self::Class2<self::Class2|named6::T%> #this = list.{core::Iterable::first}{self::Class2|named6::T%};
+  return #this;
+}
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.textual_outline.expect
new file mode 100644
index 0000000..9fa74a1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+extension type Class1(int it) {
+Class1.named1(this.it, int additional);
+Class1.named2(int this.it, int additional) {}
+Class1.named3(int it) : this.it = it;
+Class1.named4(int additional, int it) : this.it = it;
+Class1.named5(int additional, int it) : this.it = it {}
+Class1.named6(String text) : it = text.length;
+} extension type Class2<T>(T it) {
+Class2.named1(this.it, int additional);
+Class2.named2(T this.it, int additional) {}
+Class2.named3(T it) : this.it = it;
+Class2.named4(int additional, T it) : this.it = it;
+Class2.named5(int additional, T it) : this.it = it {}
+Class2.named6(List<T> list) : it = list.first;
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect
new file mode 100644
index 0000000..f828a3b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect
@@ -0,0 +1,132 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1 {
+  lowered final self::Class1 #this = text.{core::String::length}{core::int};
+  return #this;
+}
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> {
+  lowered final self::Class2<self::Class2|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> {
+  lowered final self::Class2<self::Class2|named1::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%> {
+  lowered final self::Class2<self::Class2|named2::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%> {
+  lowered final self::Class2<self::Class2|named3::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%> {
+  lowered final self::Class2<self::Class2|named4::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%> {
+  lowered final self::Class2<self::Class2|named5::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%> {
+  lowered final self::Class2<self::Class2|named6::T%> #this = list.{core::Iterable::first}{self::Class2|named6::T%};
+  return #this;
+}
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect
new file mode 100644
index 0000000..f828a3b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect
@@ -0,0 +1,132 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1 {
+  lowered final self::Class1 #this = text.{core::String::length}{core::int};
+  return #this;
+}
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> {
+  lowered final self::Class2<self::Class2|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> {
+  lowered final self::Class2<self::Class2|named1::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%> {
+  lowered final self::Class2<self::Class2|named2::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%> {
+  lowered final self::Class2<self::Class2|named3::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%> {
+  lowered final self::Class2<self::Class2|named4::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%> {
+  lowered final self::Class2<self::Class2|named5::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%> {
+  lowered final self::Class2<self::Class2|named6::T%> #this = list.{core::Iterable::first}{self::Class2|named6::T%};
+  return #this;
+}
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect
new file mode 100644
index 0000000..b208a17
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect
@@ -0,0 +1,92 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1
+  ;
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1
+  ;
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1
+  ;
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1
+  ;
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1
+  ;
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1
+  ;
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1
+  ;
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%>
+  ;
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%>
+  ;
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%>
+  ;
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%>
+  ;
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%>
+  ;
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%>
+  ;
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%>
+  ;
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect
new file mode 100644
index 0000000..f828a3b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect
@@ -0,0 +1,132 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+  constructor named1 = self::Class1|named1;
+  tearoff named1 = self::Class1|_#named1#tearOff;
+  constructor named2 = self::Class1|named2;
+  tearoff named2 = self::Class1|_#named2#tearOff;
+  constructor named3 = self::Class1|named3;
+  tearoff named3 = self::Class1|_#named3#tearOff;
+  constructor named4 = self::Class1|named4;
+  tearoff named4 = self::Class1|_#named4#tearOff;
+  constructor named5 = self::Class1|named5;
+  tearoff named5 = self::Class1|_#named5#tearOff;
+  constructor named6 = self::Class1|named6;
+  tearoff named6 = self::Class1|_#named6#tearOff;
+}
+inline class Class2<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+  constructor named1 = self::Class2|named1;
+  tearoff named1 = self::Class2|_#named1#tearOff;
+  constructor named2 = self::Class2|named2;
+  tearoff named2 = self::Class2|_#named2#tearOff;
+  constructor named3 = self::Class2|named3;
+  tearoff named3 = self::Class2|_#named3#tearOff;
+  constructor named4 = self::Class2|named4;
+  tearoff named4 = self::Class2|_#named4#tearOff;
+  constructor named5 = self::Class2|named5;
+  tearoff named5 = self::Class2|_#named5#tearOff;
+  constructor named6 = self::Class2|named6;
+  tearoff named6 = self::Class2|_#named6#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named1#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named1(it, additional);
+static inline-class-member method Class1|named2(core::int it, core::int additional) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named2#tearOff(core::int it, core::int additional) → self::Class1
+  return self::Class1|named2(it, additional);
+static inline-class-member method Class1|named3(core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named3#tearOff(core::int it) → self::Class1
+  return self::Class1|named3(it);
+static inline-class-member method Class1|named4(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#named4#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named4(additional, it);
+static inline-class-member method Class1|named5(core::int additional, core::int it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class1|_#named5#tearOff(core::int additional, core::int it) → self::Class1
+  return self::Class1|named5(additional, it);
+static inline-class-member method Class1|named6(core::String text) → self::Class1 {
+  lowered final self::Class1 #this = text.{core::String::length}{core::int};
+  return #this;
+}
+static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1
+  return self::Class1|named6(text);
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> {
+  lowered final self::Class2<self::Class2|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%>
+  return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
+static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> {
+  lowered final self::Class2<self::Class2|named1::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named1#tearOff::T%>
+  return self::Class2|named1<self::Class2|_#named1#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named2<T extends core::Object? = dynamic>(self::Class2|named2::T% it, core::int additional) → self::Class2<self::Class2|named2::T%> {
+  lowered final self::Class2<self::Class2|named2::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|_#named2#tearOff::T%>
+  return self::Class2|named2<self::Class2|_#named2#tearOff::T%>(it, additional);
+static inline-class-member method Class2|named3<T extends core::Object? = dynamic>(self::Class2|named3::T% it) → self::Class2<self::Class2|named3::T%> {
+  lowered final self::Class2<self::Class2|named3::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|_#named3#tearOff::T% it) → self::Class2<self::Class2|_#named3#tearOff::T%>
+  return self::Class2|named3<self::Class2|_#named3#tearOff::T%>(it);
+static inline-class-member method Class2|named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|named4::T% it) → self::Class2<self::Class2|named4::T%> {
+  lowered final self::Class2<self::Class2|named4::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class2|_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named4#tearOff::T% it) → self::Class2<self::Class2|_#named4#tearOff::T%>
+  return self::Class2|named4<self::Class2|_#named4#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|named5::T% it) → self::Class2<self::Class2|named5::T%> {
+  lowered final self::Class2<self::Class2|named5::T%> #this = it;
+  {
+    core::print(additional);
+  }
+  return #this;
+}
+static inline-class-member method Class2|_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|_#named5#tearOff::T% it) → self::Class2<self::Class2|_#named5#tearOff::T%>
+  return self::Class2|named5<self::Class2|_#named5#tearOff::T%>(additional, it);
+static inline-class-member method Class2|named6<T extends core::Object? = dynamic>(core::List<self::Class2|named6::T%> list) → self::Class2<self::Class2|named6::T%> {
+  lowered final self::Class2<self::Class2|named6::T%> #this = list.{core::Iterable::first}{self::Class2|named6::T%};
+  return #this;
+}
+static inline-class-member method Class2|_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|_#named6#tearOff::T%> list) → self::Class2<self::Class2|_#named6#tearOff::T%>
+  return self::Class2|named6<self::Class2|_#named6#tearOff::T%>(list);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart
new file mode 100644
index 0000000..66925a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart
@@ -0,0 +1,28 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type I._(int it) {
+  I(int x, [int? y]) : it = x + (y ?? 42);
+
+  void m(String s, [int i = 1]) {}
+}
+
+extension type I2._(int it) {
+  I2(int x, {int? y}) : it = x + (y ?? 87);
+
+  void m(String s, {int i = 1}) {}
+}
+
+main() {
+  expect(42, I(0));
+  expect(0, I(0, 0));
+  expect(87, I2(0));
+  expect(0, I2(0, y: 0));
+}
+
+expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Expected $expected, actual $actual';
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect
new file mode 100644
index 0000000..c2bec4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I {
+  lowered final self::I #this = it;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I {
+  lowered final self::I #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [core::int i = #C2]) → void {}
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2 {
+  lowered final self::I2 #this = it;
+  return #this;
+}
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 {
+  lowered final self::I2 #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {core::int i = #C2}) → void {}
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C2}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic {
+  self::expect(42, self::I|(0));
+  self::expect(0, self::I|(0, 0));
+  self::expect(87, self::I2|(0));
+  self::expect(0, self::I2|(0, y: 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..c2bec4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I {
+  lowered final self::I #this = it;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I {
+  lowered final self::I #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [core::int i = #C2]) → void {}
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2 {
+  lowered final self::I2 #this = it;
+  return #this;
+}
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 {
+  lowered final self::I2 #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {core::int i = #C2}) → void {}
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C2}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic {
+  self::expect(42, self::I|(0));
+  self::expect(0, self::I|(0, 0));
+  self::expect(87, self::I2|(0));
+  self::expect(0, self::I2|(0, y: 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..5758452
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension type I._(int it) {
+I(int x, [int? y]) : it = x + (y ?? 42);
+void m(String s, [int i = 1]) {}
+} extension type I2._(int it) {
+I2(int x, {int? y}) : it = x + (y ?? 87);
+void m(String s, {int i = 1}) {}
+}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect
new file mode 100644
index 0000000..c2bec4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I {
+  lowered final self::I #this = it;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I {
+  lowered final self::I #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [core::int i = #C2]) → void {}
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2 {
+  lowered final self::I2 #this = it;
+  return #this;
+}
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 {
+  lowered final self::I2 #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {core::int i = #C2}) → void {}
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C2}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic {
+  self::expect(42, self::I|(0));
+  self::expect(0, self::I|(0, 0));
+  self::expect(87, self::I2|(0));
+  self::expect(0, self::I2|(0, y: 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect
new file mode 100644
index 0000000..c2bec4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I {
+  lowered final self::I #this = it;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I {
+  lowered final self::I #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [core::int i = #C2]) → void {}
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2 {
+  lowered final self::I2 #this = it;
+  return #this;
+}
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 {
+  lowered final self::I2 #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {core::int i = #C2}) → void {}
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C2}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic {
+  self::expect(42, self::I|(0));
+  self::expect(0, self::I|(0, 0));
+  self::expect(87, self::I2|(0));
+  self::expect(0, self::I2|(0, y: 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect
new file mode 100644
index 0000000..5ac3298
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I
+  ;
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = null]) → self::I
+  ;
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [has-declared-initializer core::int i]) → void
+  ;
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2
+  ;
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = null}) → self::I2
+  ;
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {has-declared-initializer core::int i}) → void
+  ;
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect
new file mode 100644
index 0000000..c2bec4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  method m = self::I|m;
+  tearoff m = self::I|get#m;
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+inline class I2 /* declaredRepresentationType = core::int */ {
+  method m = self::I2|m;
+  tearoff m = self::I2|get#m;
+  constructor _ = self::I2|_;
+  tearoff _ = self::I2|_#_#tearOff;
+  constructor • = self::I2|;
+  tearoff • = self::I2|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic it) → self::I {
+  lowered final self::I #this = it;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic it) → self::I
+  return self::I|_(it);
+static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I {
+  lowered final self::I #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(core::int x, [core::int? y]) → self::I
+  return self::I|(x, y);
+static inline-class-member method I|m(lowered final self::I #this, core::String s, [core::int i = #C2]) → void {}
+static inline-class-member method I|get#m(lowered final self::I #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
+static inline-class-member method I2|_(dynamic it) → self::I2 {
+  lowered final self::I2 #this = it;
+  return #this;
+}
+static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2
+  return self::I2|_(it);
+static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 {
+  lowered final self::I2 #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method I2|_#new#tearOff(core::int x, {core::int? y}) → self::I2
+  return self::I2|(x, y: y);
+static inline-class-member method I2|m(lowered final self::I2 #this, core::String s, {core::int i = #C2}) → void {}
+static inline-class-member method I2|get#m(lowered final self::I2 #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C2}) → void => self::I2|m(#this, s, i: i);
+static method main() → dynamic {
+  self::expect(42, self::I|(0));
+  self::expect(0, self::I|(0, 0));
+  self::expect(87, self::I2|(0));
+  self::expect(0, self::I2|(0, y: 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart
new file mode 100644
index 0000000..f017c99
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart
@@ -0,0 +1,7 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class1(int field) {}
+
+extension type Class2(int field) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect
new file mode 100644
index 0000000..3bb3868
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..3bb3868
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..833bde4
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.textual_outline.expect
@@ -0,0 +1 @@
+extension type Class1(int field) {} extension type Class2(int field) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect
new file mode 100644
index 0000000..3bb3868
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..3bb3868
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..a0de25d
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1
+  ;
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2
+  ;
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..3bb3868
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2
+  return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart
new file mode 100644
index 0000000..f7099cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart
@@ -0,0 +1,28 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type ExtensionType1(int it) {}
+extension type ExtensionType2(int it) implements ExtensionType1, int {}
+extension type ExtensionType3<T extends num>(T it) {}
+extension type ExtensionType4(int it) {
+  const ExtensionType4.constructor(this.it);
+  const ExtensionType4.redirect(int it) : this(it);
+  factory ExtensionType4.fact(int it) => ExtensionType4(it);
+  factory ExtensionType4.redirectingFactory(int it) = ExtensionType4;
+
+  final int field = 42;
+  int get getter => it;
+  void set setter(int value) {}
+  int method() => it;
+  int operator[](int index) => it;
+  void operator[]=(int index, int value) {}
+
+  static int staticField = 42;
+  static int get staticGetter => 42;
+  static void set staticSetter(int value) {}
+  static int staticMethod() => 42;
+}
+extension type ExtensionType5.new(int it) {}
+extension type ExtensionType6.id(int it) {}
+extension type ExtensionType7<T extends num>.id(int it) {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect
new file mode 100644
index 0000000..859e9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect
@@ -0,0 +1,128 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField = 42;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 {
+  lowered final self::ExtensionType1 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 {
+  lowered final self::ExtensionType2 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> {
+  lowered final self::ExtensionType3<self::ExtensionType3|::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this;
+  #this = self::ExtensionType4|(it);
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void {}
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void {}
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  return 42;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  return 42;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 {
+  lowered final self::ExtensionType5 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 {
+  lowered final self::ExtensionType6 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> {
+  lowered final self::ExtensionType7<self::ExtensionType7|id::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect
new file mode 100644
index 0000000..859e9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect
@@ -0,0 +1,128 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField = 42;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 {
+  lowered final self::ExtensionType1 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 {
+  lowered final self::ExtensionType2 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> {
+  lowered final self::ExtensionType3<self::ExtensionType3|::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this;
+  #this = self::ExtensionType4|(it);
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void {}
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void {}
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  return 42;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  return 42;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 {
+  lowered final self::ExtensionType5 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 {
+  lowered final self::ExtensionType6 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> {
+  lowered final self::ExtensionType7<self::ExtensionType7|id::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.textual_outline.expect
new file mode 100644
index 0000000..363a3f7
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+extension type ExtensionType1(int it) {} extension type ExtensionType2(int it) implements ExtensionType1, int {} extension type ExtensionType3<T extends num>(T it) {} extension type ExtensionType4(int it) {
+const ExtensionType4.constructor(this.it);
+const ExtensionType4.redirect(int it) : this(it);
+factory ExtensionType4.fact(int it) => ExtensionType4(it);
+factory ExtensionType4.redirectingFactory(int it) = ExtensionType4;
+final int field = 42;
+int get getter => it;
+void set setter(int value) {}
+int method() => it;
+int operator[](int index) => it;
+void operator[]=(int index, int value) {}
+static int staticField = 42;
+static int get staticGetter => 42;
+static void set staticSetter(int value) {}
+static int staticMethod() => 42;
+} extension type ExtensionType5.new(int it) {} extension type ExtensionType6.id(int it) {} extension type ExtensionType7<T extends num>.id(int it) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect
new file mode 100644
index 0000000..859e9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect
@@ -0,0 +1,128 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField = 42;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 {
+  lowered final self::ExtensionType1 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 {
+  lowered final self::ExtensionType2 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> {
+  lowered final self::ExtensionType3<self::ExtensionType3|::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this;
+  #this = self::ExtensionType4|(it);
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void {}
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void {}
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  return 42;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  return 42;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 {
+  lowered final self::ExtensionType5 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 {
+  lowered final self::ExtensionType6 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> {
+  lowered final self::ExtensionType7<self::ExtensionType7|id::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect
new file mode 100644
index 0000000..859e9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect
@@ -0,0 +1,128 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField = 42;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 {
+  lowered final self::ExtensionType1 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 {
+  lowered final self::ExtensionType2 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> {
+  lowered final self::ExtensionType3<self::ExtensionType3|::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this;
+  #this = self::ExtensionType4|(it);
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void {}
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void {}
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  return 42;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  return 42;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 {
+  lowered final self::ExtensionType5 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 {
+  lowered final self::ExtensionType6 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> {
+  lowered final self::ExtensionType7<self::ExtensionType7|id::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect
new file mode 100644
index 0000000..0656c3a
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect
@@ -0,0 +1,112 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1
+  ;
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2
+  ;
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T>
+  ;
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4
+  ;
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4
+  ;
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4
+  ;
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  ;
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  ;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void
+  ;
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  ;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  ;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void
+  ;
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  ;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void
+  ;
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  ;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5
+  ;
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6
+  ;
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T>
+  ;
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect
new file mode 100644
index 0000000..859e9cd
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect
@@ -0,0 +1,128 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class ExtensionType1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType1|;
+  tearoff • = self::ExtensionType1|_#new#tearOff;
+}
+inline class ExtensionType2 /* declaredRepresentationType = core::int */ implements self::ExtensionType1 {
+  constructor • = self::ExtensionType2|;
+  tearoff • = self::ExtensionType2|_#new#tearOff;
+}
+inline class ExtensionType3<T extends core::num> /* declaredRepresentationType = T */ {
+  constructor • = self::ExtensionType3|;
+  tearoff • = self::ExtensionType3|_#new#tearOff;
+}
+inline class ExtensionType4 /* declaredRepresentationType = core::int */ {
+  get getter = self::ExtensionType4|get#getter;
+  method method = self::ExtensionType4|method;
+  tearoff method = self::ExtensionType4|get#method;
+  operator [] = self::ExtensionType4|[];
+  operator []= = self::ExtensionType4|[]=;
+  static field staticField = self::ExtensionType4|staticField;
+  static get staticGetter = get self::ExtensionType4|staticGetter;
+  static method staticMethod = self::ExtensionType4|staticMethod;
+  set setter = self::ExtensionType4|set#setter;
+  static set staticSetter = set self::ExtensionType4|staticSetter;
+  constructor • = self::ExtensionType4|;
+  tearoff • = self::ExtensionType4|_#new#tearOff;
+  constructor constructor = self::ExtensionType4|constructor;
+  tearoff constructor = self::ExtensionType4|_#constructor#tearOff;
+  constructor redirect = self::ExtensionType4|redirect;
+  tearoff redirect = self::ExtensionType4|_#redirect#tearOff;
+  static factory fact = self::ExtensionType4|fact;
+  static tearoff fact = self::ExtensionType4|_#fact#tearOff;
+  static redirecting-factory redirectingFactory = self::ExtensionType4|redirectingFactory;
+  static tearoff redirectingFactory = self::ExtensionType4|_#redirectingFactory#tearOff;
+}
+inline class ExtensionType5 /* declaredRepresentationType = core::int */ {
+  constructor • = self::ExtensionType5|;
+  tearoff • = self::ExtensionType5|_#new#tearOff;
+}
+inline class ExtensionType6 /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType6|id;
+  tearoff id = self::ExtensionType6|_#id#tearOff;
+}
+inline class ExtensionType7<T extends core::num> /* declaredRepresentationType = core::int */ {
+  constructor id = self::ExtensionType7|id;
+  tearoff id = self::ExtensionType7|_#id#tearOff;
+}
+static field core::int ExtensionType4|staticField = 42;
+static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 {
+  lowered final self::ExtensionType1 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1
+  return self::ExtensionType1|(it);
+static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 {
+  lowered final self::ExtensionType2 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2
+  return self::ExtensionType2|(it);
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> {
+  lowered final self::ExtensionType3<self::ExtensionType3|::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T>
+  return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
+static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#constructor#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|constructor(it);
+static inline-class-member method ExtensionType4|redirect(core::int it) → self::ExtensionType4 {
+  lowered final self::ExtensionType4 #this;
+  #this = self::ExtensionType4|(it);
+  return #this;
+}
+static inline-class-member method ExtensionType4|_#redirect#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|redirect(it);
+static inline-class-member method ExtensionType4|fact(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#fact#tearOff(core::int it) → self::ExtensionType4
+  return self::ExtensionType4|fact(it);
+static inline-class-member method ExtensionType4|redirectingFactory(core::int it) → self::ExtensionType4 /* redirection-target: self::ExtensionType4| */
+  return self::ExtensionType4|(it);
+static inline-class-member method ExtensionType4|_#redirectingFactory#tearOff(core::int it) → self::ExtensionType4;
+static inline-class-member method ExtensionType4|get#getter(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|set#setter(lowered final self::ExtensionType4 #this, core::int value) → void {}
+static inline-class-member method ExtensionType4|method(lowered final self::ExtensionType4 #this) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|get#method(lowered final self::ExtensionType4 #this) → () → core::int
+  return () → core::int => self::ExtensionType4|method(#this);
+static inline-class-member method ExtensionType4|[](lowered final self::ExtensionType4 #this, core::int index) → core::int
+  return #this as{Unchecked} core::int;
+static inline-class-member method ExtensionType4|[]=(lowered final self::ExtensionType4 #this, core::int index, core::int value) → void {}
+static inline-class-member get ExtensionType4|staticGetter() → core::int
+  return 42;
+static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
+static inline-class-member method ExtensionType4|staticMethod() → core::int
+  return 42;
+static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 {
+  lowered final self::ExtensionType5 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5
+  return self::ExtensionType5|(it);
+static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 {
+  lowered final self::ExtensionType6 #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6
+  return self::ExtensionType6|id(it);
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> {
+  lowered final self::ExtensionType7<self::ExtensionType7|id::T> #this = it;
+  return #this;
+}
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T>
+  return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart b/pkg/front_end/testcases/inline_class/extension_types/external.dart
new file mode 100644
index 0000000..ae15aa1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart
@@ -0,0 +1,54 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class A {}
+
+extension type B._(A a) {
+  external B(A a);
+
+  external B.named(int i);
+
+  external A field;
+
+  external A method();
+
+  external T genericMethod<T>(T t);
+
+  external B get getter;
+
+  external void set setter(B b);
+
+  external static A staticField;
+
+  external static A staticMethod();
+
+  external static T staticGenericMethod<T>(T t);
+
+  external static B get staticGetter;
+
+  external static void set staticSetter(B b);
+}
+
+void method(A a) {
+  B b1 = new B(a);
+  B b2 = new B.named(0);
+  a = b1.field;
+  b1.field = a;
+  a = b1.method();
+  var f1 = b1.method;
+  b2 = b2.genericMethod(b2);
+  var f2 = b2.genericMethod;
+  int Function(int) f3 = b2.genericMethod;
+  b1 = b2.getter;
+  b1.setter = b2;
+  a = B.staticField;
+  B.staticField = a;
+  a = B.staticMethod();
+  var f4 = B.staticMethod;
+  b2 = B.staticGenericMethod(b2);
+  var f5 = B.staticGenericMethod;
+  String Function(String) f6 = B.staticGenericMethod;
+  b1 = B.staticGetter;
+  B.staticSetter = b2;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect
new file mode 100644
index 0000000..9eb8e57
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B {
+  lowered final self::B #this = a;
+  return #this;
+}
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void {
+  self::B b1 = self::B|(a);
+  self::B b2 = self::B|named(0);
+  a = self::B|get#field(b1);
+  self::B|set#field(b1, a);
+  a = self::B|method(b1);
+  () → self::A f1 = self::B|get#method(b1);
+  b2 = self::B|genericMethod<self::B>(b2, b2);
+  <T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
+  (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
+  b1 = self::B|get#getter(b2);
+  self::B|set#setter(b1, b2);
+  a = self::B|staticField;
+  self::B|staticField = a;
+  a = self::B|staticMethod();
+  () → self::A f4 = #C1;
+  b2 = self::B|staticGenericMethod<self::B>(b2);
+  <T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
+  (core::String) → core::String f6 = #C3;
+  b1 = self::B|staticGetter;
+  self::B|staticSetter = b2;
+}
+
+constants  {
+  #C1 = static-tearoff self::B|staticMethod
+  #C2 = static-tearoff self::B|staticGenericMethod
+  #C3 = instantiation #C2 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect
new file mode 100644
index 0000000..9eb8e57
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B {
+  lowered final self::B #this = a;
+  return #this;
+}
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void {
+  self::B b1 = self::B|(a);
+  self::B b2 = self::B|named(0);
+  a = self::B|get#field(b1);
+  self::B|set#field(b1, a);
+  a = self::B|method(b1);
+  () → self::A f1 = self::B|get#method(b1);
+  b2 = self::B|genericMethod<self::B>(b2, b2);
+  <T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
+  (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
+  b1 = self::B|get#getter(b2);
+  self::B|set#setter(b1, b2);
+  a = self::B|staticField;
+  self::B|staticField = a;
+  a = self::B|staticMethod();
+  () → self::A f4 = #C1;
+  b2 = self::B|staticGenericMethod<self::B>(b2);
+  <T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
+  (core::String) → core::String f6 = #C3;
+  b1 = self::B|staticGetter;
+  self::B|staticSetter = b2;
+}
+
+constants  {
+  #C1 = static-tearoff self::B|staticMethod
+  #C2 = static-tearoff self::B|staticGenericMethod
+  #C3 = instantiation #C2 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.textual_outline.expect
new file mode 100644
index 0000000..6e325696
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+abstract class A {}
+extension type B._(A a) {
+external B(A a);
+external B.named(int i);
+external A field;
+external A method();
+external T genericMethod<T>(T t);
+external B get getter;
+external void set setter(B b);
+external static A staticField;
+external static A staticMethod();
+external static T staticGenericMethod<T>(T t);
+external static B get staticGetter;
+external static void set staticSetter(B b);
+}
+void method(A a) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect
new file mode 100644
index 0000000..ce3e6f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B {
+  lowered final self::B #this = a;
+  return #this;
+}
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void {
+  self::B b1 = self::B|(a);
+  self::B b2 = self::B|named(0);
+  a = self::B|get#field(b1);
+  self::B|set#field(b1, a);
+  a = self::B|method(b1);
+  () → self::A f1 = self::B|get#method(b1);
+  b2 = self::B|genericMethod<self::B>(b2, b2);
+  <T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
+  (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
+  b1 = self::B|get#getter(b2);
+  self::B|set#setter(b1, b2);
+  a = self::B|staticField;
+  self::B|staticField = a;
+  a = self::B|staticMethod();
+  () → self::A f4 = #C1;
+  b2 = self::B|staticGenericMethod<self::B>(b2);
+  <T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
+  (core::String) → core::String f6 = #C3;
+  b1 = self::B|staticGetter;
+  self::B|staticSetter = b2;
+}
+
+constants  {
+  #C1 = static-tearoff self::B|staticMethod
+  #C2 = static-tearoff self::B|staticGenericMethod
+  #C3 = instantiation #C2 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect
new file mode 100644
index 0000000..ce3e6f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B {
+  lowered final self::B #this = a;
+  return #this;
+}
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void {
+  self::B b1 = self::B|(a);
+  self::B b2 = self::B|named(0);
+  a = self::B|get#field(b1);
+  self::B|set#field(b1, a);
+  a = self::B|method(b1);
+  () → self::A f1 = self::B|get#method(b1);
+  b2 = self::B|genericMethod<self::B>(b2, b2);
+  <T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
+  (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
+  b1 = self::B|get#getter(b2);
+  self::B|set#setter(b1, b2);
+  a = self::B|staticField;
+  self::B|staticField = a;
+  a = self::B|staticMethod();
+  () → self::A f4 = #C1;
+  b2 = self::B|staticGenericMethod<self::B>(b2);
+  <T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
+  (core::String) → core::String f6 = #C3;
+  b1 = self::B|staticGetter;
+  self::B|staticSetter = b2;
+}
+
+constants  {
+  #C1 = static-tearoff self::B|staticMethod
+  #C2 = static-tearoff self::B|staticGenericMethod
+  #C3 = instantiation #C2 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect
new file mode 100644
index 0000000..af494a2
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect
@@ -0,0 +1,58 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B
+  ;
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect
new file mode 100644
index 0000000..ce3e6f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect
@@ -0,0 +1,87 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+inline class B /* declaredRepresentationType = self::A */ {
+  get field = self::B|get#field;
+  set field = self::B|set#field;
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  method genericMethod = self::B|genericMethod;
+  tearoff genericMethod = self::B|get#genericMethod;
+  get getter = self::B|get#getter;
+  static get staticField = get self::B|staticField;
+  static set staticField = set self::B|staticField;
+  static method staticMethod = self::B|staticMethod;
+  static method staticGenericMethod = self::B|staticGenericMethod;
+  static get staticGetter = get self::B|staticGetter;
+  set setter = self::B|set#setter;
+  static set staticSetter = set self::B|staticSetter;
+  constructor _ = self::B|_;
+  tearoff _ = self::B|_#_#tearOff;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+  constructor named = self::B|named;
+  tearoff named = self::B|_#named#tearOff;
+}
+static inline-class-member method B|_(dynamic a) → self::B {
+  lowered final self::B #this = a;
+  return #this;
+}
+static inline-class-member method B|_#_#tearOff(dynamic a) → self::B
+  return self::B|_(a);
+external static inline-class-member method B|(self::A a) → self::B;
+static inline-class-member method B|_#new#tearOff(self::A a) → self::B
+  return self::B|(a);
+external static inline-class-member method B|named(core::int i) → self::B;
+static inline-class-member method B|_#named#tearOff(core::int i) → self::B
+  return self::B|named(i);
+external static inline-class-member method B|get#field(lowered self::A #this) → self::A;
+external static inline-class-member method B|set#field(lowered self::A #this, self::A #externalFieldValue) → void;
+external static inline-class-member method B|method(lowered final self::B #this) → self::A;
+static inline-class-member method B|get#method(lowered final self::B #this) → () → self::A
+  return () → self::A => self::B|method(#this);
+external static inline-class-member method B|genericMethod<T extends core::Object? = dynamic>(lowered final self::B #this, self::B|genericMethod::T% t) → self::B|genericMethod::T%;
+static inline-class-member method B|get#genericMethod(lowered final self::B #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::B|genericMethod<T%>(#this, t);
+external static inline-class-member method B|get#getter(lowered final self::B #this) → self::B;
+external static inline-class-member method B|set#setter(lowered final self::B #this, self::B b) → void;
+external static inline-class-member get B|staticField() → self::A;
+external static inline-class-member set B|staticField(self::A #externalFieldValue) → void;
+external static inline-class-member method B|staticMethod() → self::A;
+external static inline-class-member method B|staticGenericMethod<T extends core::Object? = dynamic>(self::B|staticGenericMethod::T% t) → self::B|staticGenericMethod::T%;
+external static inline-class-member get B|staticGetter() → self::B;
+external static inline-class-member set B|staticSetter(self::B b) → void;
+static method method(self::A a) → void {
+  self::B b1 = self::B|(a);
+  self::B b2 = self::B|named(0);
+  a = self::B|get#field(b1);
+  self::B|set#field(b1, a);
+  a = self::B|method(b1);
+  () → self::A f1 = self::B|get#method(b1);
+  b2 = self::B|genericMethod<self::B>(b2, b2);
+  <T extends core::Object? = dynamic>(T%) → T% f2 = self::B|get#genericMethod(b2);
+  (core::int) → core::int f3 = self::B|get#genericMethod(b2)<core::int>;
+  b1 = self::B|get#getter(b2);
+  self::B|set#setter(b1, b2);
+  a = self::B|staticField;
+  self::B|staticField = a;
+  a = self::B|staticMethod();
+  () → self::A f4 = #C1;
+  b2 = self::B|staticGenericMethod<self::B>(b2);
+  <T extends core::Object? = dynamic>(T%) → T% f5 = #C2;
+  (core::String) → core::String f6 = #C3;
+  b1 = self::B|staticGetter;
+  self::B|staticSetter = b2;
+}
+
+constants  {
+  #C1 = static-tearoff self::B|staticMethod
+  #C2 = static-tearoff self::B|staticGenericMethod
+  #C3 = instantiation #C2 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart
new file mode 100644
index 0000000..78f8c4e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart
@@ -0,0 +1,160 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'field_access_lib.dart';
+
+extension on dynamic {
+  void set it(value) {}
+}
+
+extension type InlineClass(int it) {
+  void test() {
+    var a1 = this.it;
+    var a2 = it;
+    var b1 = this.it<int>; // Error
+    var b2 = it<int>; // Error
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+  }
+}
+
+extension type GenericInlineClass<T>(T it) {
+  void test(T t) {
+    var a1 = this.it;
+    var a2 = it;
+    var b1 = this.it<int>; // Error
+    var b2 = it<int>; // Error
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+    var c2 = it = t; // Error, should not resolve to extension method.
+  }
+}
+
+extension type FunctionInlineClass<T>(T Function() it) {
+  void test(T Function()  t) {
+    var a1 = this.it;
+    var a2 = it;
+    var b1 = this.it<int>; // Error
+    var b2 = it<int>; // Error
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+    var c2 = it = t; // Error, should not resolve to extension method.
+    var d1 = this.it();
+    var d2 = it();
+    var d3 = this.it.call();
+    var d4 = it.call();
+  }
+}
+
+extension type GenericFunctionInlineClass(T Function<T>() it) {
+  void test() {
+    var a1 = this.it;
+    var a2 = it;
+    int Function() a3 = this.it;
+    int Function() a4 = it;
+    var b1 = this.it<int>;
+    var b2 = it<int>;
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+    var c2 = it = t; // Error, should not resolve to extension method.
+    var d1 = this.it();
+    var d2 = it();
+    var d3 = this.it.call();
+    var d4 = it.call();
+    var e1 = this.it<int>();
+    var e2 = it<int>();
+  }
+}
+
+
+extension type DynamicInlineClass(dynamic it) {
+  void test() {
+    var a1 = this.it;
+    var a2 = it;
+    var b1 = this.it<int>; // Error
+    var b2 = it<int>; // Error
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+    var d1 = this.it();
+    var d2 = it();
+    var d3 = this.it.call();
+    var d4 = it.call();
+  }
+}
+
+extension type ErroneousInlineClass(int a, String b) {
+  void test() {
+    var a1 = this.a;
+    var a2 = a;
+    var a3 = this.b; // Error
+    var a4 = b; // Error
+    var b1 = this.a<int>; // Error
+    var b2 = a<int>; // Error
+    var b3 = this.b<int>; // Error
+    var b4 = b<int>; // Error
+    var c1 = this.a = 42; // Error
+    var c2 = a = 42; // Error
+    var c3 = this.b = '42'; // Error
+    var c4 = b = '42'; // Error
+    var d1 = this.a(); // Error
+    var d2 = a(); // Error
+    var d3 = this.a.call(); // Error
+    var d4 = a.call(); // Error
+    var e1 = this.b(); // Error
+    var e2 = b(); // Error
+    var e3 = this.b.call(); // Error
+    var e4 = b.call(); // Error
+  }
+}
+
+void test(
+    InlineClass inlineClass,
+    GenericInlineClass<String> genericInlineClass,
+    FunctionInlineClass<String> functionInlineClass,
+    GenericFunctionInlineClass genericFunctionInlineClass,
+    DynamicInlineClass dynamicInlineClass,
+    ErroneousInlineClass erroneousInlineClass,
+    PrivateInlineClass privateInlineClass) {
+
+  var a1 = inlineClass.it;
+  var a2 = inlineClass.it<int>; // Error
+  var a3 = inlineClass.it = 42; // Error,
+                                // should not resolve to extension method.
+
+  var b1 = genericInlineClass.it;
+  var b2 = genericInlineClass.it<int>; // Error
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                                         // resolve to extension method.
+
+  var c1 = functionInlineClass.it;
+  var c2 = functionInlineClass.it<int>; // Error
+  var c3 = functionInlineClass.it();
+  var c4 = functionInlineClass.it.call();
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                                                // resolve to extension method.
+
+  var d1 = genericFunctionInlineClass.it;
+  int Function() d2 = genericFunctionInlineClass.it;
+  var d3 = genericFunctionInlineClass.it<int>;
+  var d4 = genericFunctionInlineClass.it<int>();
+  var d5 = genericFunctionInlineClass.it.call<int>();
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                           // not resolve to extension method.
+
+  var e1 = dynamicInlineClass.it;
+  var e2 = dynamicInlineClass.it<int>; // Error
+  var e3 = dynamicInlineClass.it();
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                                         // to extension method.
+
+  var f1 = erroneousInlineClass.a;
+  var f2 = erroneousInlineClass.a<int>; // Error
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                       // to extension method.
+  var g1 = erroneousInlineClass.b;
+  var g2 = erroneousInlineClass.a<int>; // Error
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                         // to extension method.
+
+  var h1 = privateInlineClass._it; // Error
+  var h2 = privateInlineClass._it<int>; // Error
+  var h3 = privateInlineClass._it = 42; // Error
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect
new file mode 100644
index 0000000..85da5a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect
@@ -0,0 +1,724 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a3 = this.b; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a4 = b; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.a<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = a<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b3 = this.b<int>; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b3 = this.b<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b4 = b<int>; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b4 = b<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c1 = this.a = 42; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c2 = a = 42; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c3 = this.b = '42'; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c4 = b = '42'; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d1 = this.a(); // Error
+//                    ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d2 = a(); // Error
+//               ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d3 = this.a.call(); // Error
+//                     ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d4 = a.call(); // Error
+//                ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e1 = this.b(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e2 = b(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e3 = this.b.call(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e4 = b.call(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var a2 = inlineClass.it<int>; // Error
+//                          ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var a3 = inlineClass.it = 42; // Error,
+//                        ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   var b2 = genericInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var b3 = genericInlineClass.it = '42'; // Error, should not
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+//   var c2 = functionInlineClass.it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var c5 = functionInlineClass.it = () => '42'; // Error, should not
+//                                ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+//                                       ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var e2 = dynamicInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//   var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   var g1 = erroneousInlineClass.b;
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var g2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//   var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h1 = privateInlineClass._it; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//   var h3 = privateInlineClass._it = 42; // Error
+//                               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> {
+  lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void {
+  self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  self::GenericInlineClass|test::T% a2 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  self::GenericInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  self::GenericInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+}
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> {
+  lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void {
+  () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  () → self::FunctionInlineClass|test::T% a2 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  () → self::FunctionInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  () → self::FunctionInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+  self::FunctionInlineClass|test::T% d1 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d2 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d3 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d4 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+}
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass {
+  lowered final self::GenericFunctionInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void {
+  <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  <T extends core::Object? = dynamic>() → T% a2 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int a3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int a4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  dynamic c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                       ^" in #this{<unresolved>}.t;
+  dynamic c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+                  ^" in #this{<unresolved>}.t;
+  dynamic d1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  core::int e1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int e2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+}
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass {
+  lowered final self::DynamicInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void {
+  dynamic a1 = #this as{Unchecked} dynamic;
+  dynamic a2 = #this as{Unchecked} dynamic;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+  dynamic d1 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d2 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d3 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d4 = (#this as{Unchecked} dynamic){dynamic}.call();
+}
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass {
+  lowered final self::ErroneousInlineClass #this = b;
+  return #this;
+}
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  dynamic a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a3 = this.b; // Error
+                  ^" in #this{<unresolved>}.b;
+  dynamic a4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a4 = b; // Error
+             ^" in #this{<unresolved>}.b;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.a<int>; // Error
+                   ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = a<int>; // Error
+              ^";
+  invalid-type b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b3 = this.b<int>; // Error
+                   ^";
+  invalid-type b4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b4 = b<int>; // Error
+              ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c1 = this.a = 42; // Error
+                  ^" in #this{<unresolved>}.a = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c2 = a = 42; // Error
+             ^" in #this{<unresolved>}.a = 42;
+  core::String c3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c3 = this.b = '42'; // Error
+                  ^" in #this{<unresolved>}.b = "42";
+  core::String c4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c4 = b = '42'; // Error
+             ^" in #this{<unresolved>}.b = "42";
+  dynamic d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d1 = this.a(); // Error
+                   ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d2 = a(); // Error
+              ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d3 = this.a.call(); // Error
+                    ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d4 = a.call(); // Error
+               ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic e1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e1 = this.b(); // Error
+                  ^" in #this{<unresolved>}.b();
+  dynamic e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e2 = b(); // Error
+             ^" in #this{<unresolved>}.b();
+  dynamic e3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e3 = this.b.call(); // Error
+                  ^" in #this{<unresolved>}.b{dynamic}.call();
+  dynamic e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e4 = b.call(); // Error
+             ^" in #this{<unresolved>}.b{dynamic}.call();
+}
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void {
+  core::int a1 = inlineClass as{Unchecked} core::int;
+  invalid-type a2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var a2 = inlineClass.it<int>; // Error
+                         ^";
+  core::int a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var a3 = inlineClass.it = 42; // Error,
+                       ^^" in inlineClass{<unresolved>}.it = 42;
+  core::String b1 = genericInlineClass as{Unchecked} core::String;
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  var b2 = genericInlineClass.it<int>; // Error
+                                ^";
+  core::String b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                              ^^" in genericInlineClass{<unresolved>}.it = "42";
+  () → core::String c1 = functionInlineClass as{Unchecked} () → core::String;
+  invalid-type c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+  var c2 = functionInlineClass.it<int>; // Error
+                                 ^";
+  core::String c3 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  core::String c4 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  () → core::String c5 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                               ^^" in functionInlineClass{<unresolved>}.it = () → core::String => "42";
+  <T extends core::Object? = dynamic>() → T% d1 = genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int d2 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int d3 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  core::int d4 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int d5 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  <T extends core::Object? = dynamic>() → Never d6 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                      ^^" in genericFunctionInlineClass{<unresolved>}.it = <T extends core::Object? = dynamic>() → Never => throw "";
+  dynamic e1 = dynamicInlineClass as{Unchecked} dynamic;
+  invalid-type e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var e2 = dynamicInlineClass.it<int>; // Error
+                                ^";
+  dynamic e3 = (dynamicInlineClass as{Unchecked} dynamic){dynamic}.call();
+  core::String e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                              ^^" in dynamicInlineClass{<unresolved>}.it = "42";
+  core::int f1 = erroneousInlineClass as{Unchecked} core::int;
+  invalid-type f2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::int f3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.a = 42;
+  dynamic g1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  var g1 = erroneousInlineClass.b;
+                                ^" in erroneousInlineClass{<unresolved>}.b;
+  invalid-type g2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var g2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::String g3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.b = "42";
+  dynamic h1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+  var h1 = privateInlineClass._it; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it;
+  invalid-type h2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var h2 = privateInlineClass._it<int>; // Error
+                                 ^";
+  core::int h3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+  var h3 = privateInlineClass._it = 42; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it = 42;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this._it<int>; // Error
+//                      ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = _it<int>; // Error
+//                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c1 = this._it = 42; // Error, should not resolve to extension method.
+//                   ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c2 = _it = 42; // Error, should not resolve to extension method.
+//              ^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass {
+  lowered final self2::PrivateInlineClass #this = _it;
+  return #this;
+}
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this._it<int>; // Error
+                     ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = _it<int>; // Error
+                ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+                  ^^^" in #this{<unresolved>}._it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+             ^^^" in #this{<unresolved>}._it = 42;
+}
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect
new file mode 100644
index 0000000..85da5a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect
@@ -0,0 +1,724 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a3 = this.b; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a4 = b; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.a<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = a<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b3 = this.b<int>; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b3 = this.b<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b4 = b<int>; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b4 = b<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c1 = this.a = 42; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c2 = a = 42; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c3 = this.b = '42'; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c4 = b = '42'; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d1 = this.a(); // Error
+//                    ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d2 = a(); // Error
+//               ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d3 = this.a.call(); // Error
+//                     ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d4 = a.call(); // Error
+//                ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e1 = this.b(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e2 = b(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e3 = this.b.call(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e4 = b.call(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var a2 = inlineClass.it<int>; // Error
+//                          ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var a3 = inlineClass.it = 42; // Error,
+//                        ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   var b2 = genericInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var b3 = genericInlineClass.it = '42'; // Error, should not
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+//   var c2 = functionInlineClass.it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var c5 = functionInlineClass.it = () => '42'; // Error, should not
+//                                ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+//                                       ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var e2 = dynamicInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//   var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   var g1 = erroneousInlineClass.b;
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var g2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//   var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h1 = privateInlineClass._it; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//   var h3 = privateInlineClass._it = 42; // Error
+//                               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> {
+  lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void {
+  self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  self::GenericInlineClass|test::T% a2 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  self::GenericInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  self::GenericInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+}
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> {
+  lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void {
+  () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  () → self::FunctionInlineClass|test::T% a2 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  () → self::FunctionInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  () → self::FunctionInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+  self::FunctionInlineClass|test::T% d1 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d2 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d3 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d4 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+}
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass {
+  lowered final self::GenericFunctionInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void {
+  <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  <T extends core::Object? = dynamic>() → T% a2 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int a3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int a4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  dynamic c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                       ^" in #this{<unresolved>}.t;
+  dynamic c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+                  ^" in #this{<unresolved>}.t;
+  dynamic d1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  core::int e1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int e2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+}
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass {
+  lowered final self::DynamicInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void {
+  dynamic a1 = #this as{Unchecked} dynamic;
+  dynamic a2 = #this as{Unchecked} dynamic;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+  dynamic d1 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d2 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d3 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d4 = (#this as{Unchecked} dynamic){dynamic}.call();
+}
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass {
+  lowered final self::ErroneousInlineClass #this = b;
+  return #this;
+}
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  dynamic a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a3 = this.b; // Error
+                  ^" in #this{<unresolved>}.b;
+  dynamic a4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a4 = b; // Error
+             ^" in #this{<unresolved>}.b;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.a<int>; // Error
+                   ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = a<int>; // Error
+              ^";
+  invalid-type b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b3 = this.b<int>; // Error
+                   ^";
+  invalid-type b4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b4 = b<int>; // Error
+              ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c1 = this.a = 42; // Error
+                  ^" in #this{<unresolved>}.a = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c2 = a = 42; // Error
+             ^" in #this{<unresolved>}.a = 42;
+  core::String c3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c3 = this.b = '42'; // Error
+                  ^" in #this{<unresolved>}.b = "42";
+  core::String c4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c4 = b = '42'; // Error
+             ^" in #this{<unresolved>}.b = "42";
+  dynamic d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d1 = this.a(); // Error
+                   ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d2 = a(); // Error
+              ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d3 = this.a.call(); // Error
+                    ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d4 = a.call(); // Error
+               ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic e1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e1 = this.b(); // Error
+                  ^" in #this{<unresolved>}.b();
+  dynamic e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e2 = b(); // Error
+             ^" in #this{<unresolved>}.b();
+  dynamic e3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e3 = this.b.call(); // Error
+                  ^" in #this{<unresolved>}.b{dynamic}.call();
+  dynamic e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e4 = b.call(); // Error
+             ^" in #this{<unresolved>}.b{dynamic}.call();
+}
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void {
+  core::int a1 = inlineClass as{Unchecked} core::int;
+  invalid-type a2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var a2 = inlineClass.it<int>; // Error
+                         ^";
+  core::int a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var a3 = inlineClass.it = 42; // Error,
+                       ^^" in inlineClass{<unresolved>}.it = 42;
+  core::String b1 = genericInlineClass as{Unchecked} core::String;
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  var b2 = genericInlineClass.it<int>; // Error
+                                ^";
+  core::String b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                              ^^" in genericInlineClass{<unresolved>}.it = "42";
+  () → core::String c1 = functionInlineClass as{Unchecked} () → core::String;
+  invalid-type c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+  var c2 = functionInlineClass.it<int>; // Error
+                                 ^";
+  core::String c3 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  core::String c4 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  () → core::String c5 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                               ^^" in functionInlineClass{<unresolved>}.it = () → core::String => "42";
+  <T extends core::Object? = dynamic>() → T% d1 = genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int d2 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int d3 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  core::int d4 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int d5 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  <T extends core::Object? = dynamic>() → Never d6 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                      ^^" in genericFunctionInlineClass{<unresolved>}.it = <T extends core::Object? = dynamic>() → Never => throw "";
+  dynamic e1 = dynamicInlineClass as{Unchecked} dynamic;
+  invalid-type e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var e2 = dynamicInlineClass.it<int>; // Error
+                                ^";
+  dynamic e3 = (dynamicInlineClass as{Unchecked} dynamic){dynamic}.call();
+  core::String e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                              ^^" in dynamicInlineClass{<unresolved>}.it = "42";
+  core::int f1 = erroneousInlineClass as{Unchecked} core::int;
+  invalid-type f2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::int f3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.a = 42;
+  dynamic g1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  var g1 = erroneousInlineClass.b;
+                                ^" in erroneousInlineClass{<unresolved>}.b;
+  invalid-type g2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var g2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::String g3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.b = "42";
+  dynamic h1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+  var h1 = privateInlineClass._it; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it;
+  invalid-type h2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var h2 = privateInlineClass._it<int>; // Error
+                                 ^";
+  core::int h3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+  var h3 = privateInlineClass._it = 42; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it = 42;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this._it<int>; // Error
+//                      ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = _it<int>; // Error
+//                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c1 = this._it = 42; // Error, should not resolve to extension method.
+//                   ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c2 = _it = 42; // Error, should not resolve to extension method.
+//              ^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass {
+  lowered final self2::PrivateInlineClass #this = _it;
+  return #this;
+}
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this._it<int>; // Error
+                     ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = _it<int>; // Error
+                ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+                  ^^^" in #this{<unresolved>}._it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+             ^^^" in #this{<unresolved>}._it = 42;
+}
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.textual_outline.expect
new file mode 100644
index 0000000..389cdbc
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.textual_outline.expect
@@ -0,0 +1,18 @@
+import 'field_access_lib.dart';
+extension on dynamic {
+  void set it(value) {}
+}
+extension type InlineClass(int it) {
+void test() {}
+} extension type GenericInlineClass<T>(T it) {
+void test(T t) {}
+} extension type FunctionInlineClass<T>(T Function() it) {
+void test(T Function() t) {}
+} extension type GenericFunctionInlineClass(T Function<T>() it) {
+void test() {}
+} extension type DynamicInlineClass(dynamic it) {
+void test() {}
+} extension type ErroneousInlineClass(int a, String b) {
+void test() {}
+}
+void test( InlineClass inlineClass, GenericInlineClass<String> genericInlineClass, FunctionInlineClass<String> functionInlineClass, GenericFunctionInlineClass genericFunctionInlineClass, DynamicInlineClass dynamicInlineClass, ErroneousInlineClass erroneousInlineClass, PrivateInlineClass privateInlineClass) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect
new file mode 100644
index 0000000..85da5a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect
@@ -0,0 +1,724 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a3 = this.b; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a4 = b; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.a<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = a<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b3 = this.b<int>; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b3 = this.b<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b4 = b<int>; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b4 = b<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c1 = this.a = 42; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c2 = a = 42; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c3 = this.b = '42'; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c4 = b = '42'; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d1 = this.a(); // Error
+//                    ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d2 = a(); // Error
+//               ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d3 = this.a.call(); // Error
+//                     ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d4 = a.call(); // Error
+//                ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e1 = this.b(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e2 = b(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e3 = this.b.call(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e4 = b.call(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var a2 = inlineClass.it<int>; // Error
+//                          ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var a3 = inlineClass.it = 42; // Error,
+//                        ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   var b2 = genericInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var b3 = genericInlineClass.it = '42'; // Error, should not
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+//   var c2 = functionInlineClass.it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var c5 = functionInlineClass.it = () => '42'; // Error, should not
+//                                ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+//                                       ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var e2 = dynamicInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//   var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   var g1 = erroneousInlineClass.b;
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var g2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//   var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h1 = privateInlineClass._it; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//   var h3 = privateInlineClass._it = 42; // Error
+//                               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> {
+  lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void {
+  self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  self::GenericInlineClass|test::T% a2 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  self::GenericInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  self::GenericInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+}
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> {
+  lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void {
+  () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  () → self::FunctionInlineClass|test::T% a2 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  () → self::FunctionInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  () → self::FunctionInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+  self::FunctionInlineClass|test::T% d1 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d2 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d3 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d4 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+}
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass {
+  lowered final self::GenericFunctionInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void {
+  <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  <T extends core::Object? = dynamic>() → T% a2 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int a3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int a4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  dynamic c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                       ^" in #this{<unresolved>}.t;
+  dynamic c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+                  ^" in #this{<unresolved>}.t;
+  dynamic d1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  core::int e1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int e2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+}
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass {
+  lowered final self::DynamicInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void {
+  dynamic a1 = #this as{Unchecked} dynamic;
+  dynamic a2 = #this as{Unchecked} dynamic;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+  dynamic d1 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d2 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d3 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d4 = (#this as{Unchecked} dynamic){dynamic}.call();
+}
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass {
+  lowered final self::ErroneousInlineClass #this = b;
+  return #this;
+}
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  dynamic a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a3 = this.b; // Error
+                  ^" in #this{<unresolved>}.b;
+  dynamic a4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a4 = b; // Error
+             ^" in #this{<unresolved>}.b;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.a<int>; // Error
+                   ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = a<int>; // Error
+              ^";
+  invalid-type b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b3 = this.b<int>; // Error
+                   ^";
+  invalid-type b4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b4 = b<int>; // Error
+              ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c1 = this.a = 42; // Error
+                  ^" in #this{<unresolved>}.a = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c2 = a = 42; // Error
+             ^" in #this{<unresolved>}.a = 42;
+  core::String c3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c3 = this.b = '42'; // Error
+                  ^" in #this{<unresolved>}.b = "42";
+  core::String c4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c4 = b = '42'; // Error
+             ^" in #this{<unresolved>}.b = "42";
+  dynamic d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d1 = this.a(); // Error
+                   ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d2 = a(); // Error
+              ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d3 = this.a.call(); // Error
+                    ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d4 = a.call(); // Error
+               ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic e1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e1 = this.b(); // Error
+                  ^" in #this{<unresolved>}.b();
+  dynamic e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e2 = b(); // Error
+             ^" in #this{<unresolved>}.b();
+  dynamic e3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e3 = this.b.call(); // Error
+                  ^" in #this{<unresolved>}.b{dynamic}.call();
+  dynamic e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e4 = b.call(); // Error
+             ^" in #this{<unresolved>}.b{dynamic}.call();
+}
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void {
+  core::int a1 = inlineClass as{Unchecked} core::int;
+  invalid-type a2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var a2 = inlineClass.it<int>; // Error
+                         ^";
+  core::int a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var a3 = inlineClass.it = 42; // Error,
+                       ^^" in inlineClass{<unresolved>}.it = 42;
+  core::String b1 = genericInlineClass as{Unchecked} core::String;
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  var b2 = genericInlineClass.it<int>; // Error
+                                ^";
+  core::String b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                              ^^" in genericInlineClass{<unresolved>}.it = "42";
+  () → core::String c1 = functionInlineClass as{Unchecked} () → core::String;
+  invalid-type c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+  var c2 = functionInlineClass.it<int>; // Error
+                                 ^";
+  core::String c3 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  core::String c4 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  () → core::String c5 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                               ^^" in functionInlineClass{<unresolved>}.it = () → core::String => "42";
+  <T extends core::Object? = dynamic>() → T% d1 = genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int d2 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int d3 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  core::int d4 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int d5 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  <T extends core::Object? = dynamic>() → Never d6 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                      ^^" in genericFunctionInlineClass{<unresolved>}.it = <T extends core::Object? = dynamic>() → Never => throw "";
+  dynamic e1 = dynamicInlineClass as{Unchecked} dynamic;
+  invalid-type e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var e2 = dynamicInlineClass.it<int>; // Error
+                                ^";
+  dynamic e3 = (dynamicInlineClass as{Unchecked} dynamic){dynamic}.call();
+  core::String e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                              ^^" in dynamicInlineClass{<unresolved>}.it = "42";
+  core::int f1 = erroneousInlineClass as{Unchecked} core::int;
+  invalid-type f2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::int f3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.a = 42;
+  dynamic g1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  var g1 = erroneousInlineClass.b;
+                                ^" in erroneousInlineClass{<unresolved>}.b;
+  invalid-type g2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var g2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::String g3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.b = "42";
+  dynamic h1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+  var h1 = privateInlineClass._it; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it;
+  invalid-type h2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var h2 = privateInlineClass._it<int>; // Error
+                                 ^";
+  core::int h3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+  var h3 = privateInlineClass._it = 42; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it = 42;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this._it<int>; // Error
+//                      ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = _it<int>; // Error
+//                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c1 = this._it = 42; // Error, should not resolve to extension method.
+//                   ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c2 = _it = 42; // Error, should not resolve to extension method.
+//              ^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass {
+  lowered final self2::PrivateInlineClass #this = _it;
+  return #this;
+}
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this._it<int>; // Error
+                     ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = _it<int>; // Error
+                ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+                  ^^^" in #this{<unresolved>}._it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+             ^^^" in #this{<unresolved>}._it = 42;
+}
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect
new file mode 100644
index 0000000..85da5a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect
@@ -0,0 +1,724 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a3 = this.b; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a4 = b; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.a<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = a<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b3 = this.b<int>; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b3 = this.b<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b4 = b<int>; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b4 = b<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c1 = this.a = 42; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c2 = a = 42; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c3 = this.b = '42'; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c4 = b = '42'; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d1 = this.a(); // Error
+//                    ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d2 = a(); // Error
+//               ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d3 = this.a.call(); // Error
+//                     ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d4 = a.call(); // Error
+//                ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e1 = this.b(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e2 = b(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e3 = this.b.call(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e4 = b.call(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var a2 = inlineClass.it<int>; // Error
+//                          ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var a3 = inlineClass.it = 42; // Error,
+//                        ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   var b2 = genericInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var b3 = genericInlineClass.it = '42'; // Error, should not
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+//   var c2 = functionInlineClass.it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var c5 = functionInlineClass.it = () => '42'; // Error, should not
+//                                ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+//                                       ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var e2 = dynamicInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//   var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   var g1 = erroneousInlineClass.b;
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var g2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//   var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h1 = privateInlineClass._it; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//   var h3 = privateInlineClass._it = 42; // Error
+//                               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> {
+  lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void {
+  self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  self::GenericInlineClass|test::T% a2 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  self::GenericInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  self::GenericInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+}
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> {
+  lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void {
+  () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  () → self::FunctionInlineClass|test::T% a2 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  () → self::FunctionInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  () → self::FunctionInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+  self::FunctionInlineClass|test::T% d1 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d2 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d3 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d4 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+}
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass {
+  lowered final self::GenericFunctionInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void {
+  <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  <T extends core::Object? = dynamic>() → T% a2 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int a3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int a4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  dynamic c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                       ^" in #this{<unresolved>}.t;
+  dynamic c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+                  ^" in #this{<unresolved>}.t;
+  dynamic d1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  core::int e1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int e2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+}
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass {
+  lowered final self::DynamicInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void {
+  dynamic a1 = #this as{Unchecked} dynamic;
+  dynamic a2 = #this as{Unchecked} dynamic;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+  dynamic d1 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d2 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d3 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d4 = (#this as{Unchecked} dynamic){dynamic}.call();
+}
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass {
+  lowered final self::ErroneousInlineClass #this = b;
+  return #this;
+}
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  dynamic a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a3 = this.b; // Error
+                  ^" in #this{<unresolved>}.b;
+  dynamic a4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a4 = b; // Error
+             ^" in #this{<unresolved>}.b;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.a<int>; // Error
+                   ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = a<int>; // Error
+              ^";
+  invalid-type b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b3 = this.b<int>; // Error
+                   ^";
+  invalid-type b4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b4 = b<int>; // Error
+              ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c1 = this.a = 42; // Error
+                  ^" in #this{<unresolved>}.a = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c2 = a = 42; // Error
+             ^" in #this{<unresolved>}.a = 42;
+  core::String c3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c3 = this.b = '42'; // Error
+                  ^" in #this{<unresolved>}.b = "42";
+  core::String c4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c4 = b = '42'; // Error
+             ^" in #this{<unresolved>}.b = "42";
+  dynamic d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d1 = this.a(); // Error
+                   ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d2 = a(); // Error
+              ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d3 = this.a.call(); // Error
+                    ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d4 = a.call(); // Error
+               ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic e1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e1 = this.b(); // Error
+                  ^" in #this{<unresolved>}.b();
+  dynamic e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e2 = b(); // Error
+             ^" in #this{<unresolved>}.b();
+  dynamic e3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e3 = this.b.call(); // Error
+                  ^" in #this{<unresolved>}.b{dynamic}.call();
+  dynamic e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e4 = b.call(); // Error
+             ^" in #this{<unresolved>}.b{dynamic}.call();
+}
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void {
+  core::int a1 = inlineClass as{Unchecked} core::int;
+  invalid-type a2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var a2 = inlineClass.it<int>; // Error
+                         ^";
+  core::int a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var a3 = inlineClass.it = 42; // Error,
+                       ^^" in inlineClass{<unresolved>}.it = 42;
+  core::String b1 = genericInlineClass as{Unchecked} core::String;
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  var b2 = genericInlineClass.it<int>; // Error
+                                ^";
+  core::String b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                              ^^" in genericInlineClass{<unresolved>}.it = "42";
+  () → core::String c1 = functionInlineClass as{Unchecked} () → core::String;
+  invalid-type c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+  var c2 = functionInlineClass.it<int>; // Error
+                                 ^";
+  core::String c3 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  core::String c4 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  () → core::String c5 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                               ^^" in functionInlineClass{<unresolved>}.it = () → core::String => "42";
+  <T extends core::Object? = dynamic>() → T% d1 = genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int d2 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int d3 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  core::int d4 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int d5 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  <T extends core::Object? = dynamic>() → Never d6 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                      ^^" in genericFunctionInlineClass{<unresolved>}.it = <T extends core::Object? = dynamic>() → Never => throw "";
+  dynamic e1 = dynamicInlineClass as{Unchecked} dynamic;
+  invalid-type e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var e2 = dynamicInlineClass.it<int>; // Error
+                                ^";
+  dynamic e3 = (dynamicInlineClass as{Unchecked} dynamic){dynamic}.call();
+  core::String e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                              ^^" in dynamicInlineClass{<unresolved>}.it = "42";
+  core::int f1 = erroneousInlineClass as{Unchecked} core::int;
+  invalid-type f2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::int f3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.a = 42;
+  dynamic g1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  var g1 = erroneousInlineClass.b;
+                                ^" in erroneousInlineClass{<unresolved>}.b;
+  invalid-type g2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var g2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::String g3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.b = "42";
+  dynamic h1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+  var h1 = privateInlineClass._it; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it;
+  invalid-type h2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var h2 = privateInlineClass._it<int>; // Error
+                                 ^";
+  core::int h3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+  var h3 = privateInlineClass._it = 42; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it = 42;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this._it<int>; // Error
+//                      ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = _it<int>; // Error
+//                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c1 = this._it = 42; // Error, should not resolve to extension method.
+//                   ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c2 = _it = 42; // Error, should not resolve to extension method.
+//              ^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass {
+  lowered final self2::PrivateInlineClass #this = _it;
+  return #this;
+}
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this._it<int>; // Error
+                     ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = _it<int>; // Error
+                ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+                  ^^^" in #this{<unresolved>}._it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+             ^^^" in #this{<unresolved>}._it = 42;
+}
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect
new file mode 100644
index 0000000..b42d010
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect
@@ -0,0 +1,116 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void
+  ;
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass
+  ;
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void
+  ;
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%>
+  ;
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void
+  ;
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%>
+  ;
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void
+  ;
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass
+  ;
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void
+  ;
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass
+  ;
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void
+  ;
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass
+  ;
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void
+  ;
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void
+  ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass
+  ;
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void
+  ;
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..85da5a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect
@@ -0,0 +1,724 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = t; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = t; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.it<int>; // Error
+//                     ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = it<int>; // Error
+//                ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c1 = this.it = 42; // Error, should not resolve to extension method.
+//                   ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//     var c2 = it = 42; // Error, should not resolve to extension method.
+//              ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a3 = this.b; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var a4 = b; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this.a<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = a<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b3 = this.b<int>; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b3 = this.b<int>; // Error
+//                    ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var b4 = b<int>; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//     var b4 = b<int>; // Error
+//               ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c1 = this.a = 42; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//     var c2 = a = 42; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c3 = this.b = '42'; // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//     var c4 = b = '42'; // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d1 = this.a(); // Error
+//                    ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d2 = a(); // Error
+//               ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d3 = this.a.call(); // Error
+//                     ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+// Try correcting the name to the name of an existing method, or defining a method named 'call'.
+//     var d4 = a.call(); // Error
+//                ^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e1 = this.b(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing method, or defining a method named 'b'.
+//     var e2 = b(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e3 = this.b.call(); // Error
+//                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//     var e4 = b.call(); // Error
+//              ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var a2 = inlineClass.it<int>; // Error
+//                          ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var a3 = inlineClass.it = 42; // Error,
+//                        ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+// Try changing the operand or remove the type arguments.
+//   var b2 = genericInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var b3 = genericInlineClass.it = '42'; // Error, should not
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+// Try changing the operand or remove the type arguments.
+//   var c2 = functionInlineClass.it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var c5 = functionInlineClass.it = () => '42'; // Error, should not
+//                                ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+//                                       ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var e2 = dynamicInlineClass.it<int>; // Error
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+//   var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+//                               ^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var f2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+//   var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+//   var g1 = erroneousInlineClass.b;
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//   var g2 = erroneousInlineClass.a<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+//   var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+//                                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h1 = privateInlineClass._it; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                               ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+// Try changing the operand or remove the type arguments.
+//   var h2 = privateInlineClass._it<int>; // Error
+//                                  ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//   var h3 = privateInlineClass._it = 42; // Error
+//                               ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///field_access_lib.dart";
+
+extension /* unnamed */ _extension#0 on dynamic {
+  set it = self::_extension#0|set#it;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+inline class GenericInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method test = self::GenericInlineClass|test;
+  tearoff test = self::GenericInlineClass|get#test;
+  constructor • = self::GenericInlineClass|;
+  tearoff • = self::GenericInlineClass|_#new#tearOff;
+}
+inline class FunctionInlineClass<T extends core::Object? = dynamic> /* declaredRepresentationType = () → T% */ {
+  method test = self::FunctionInlineClass|test;
+  tearoff test = self::FunctionInlineClass|get#test;
+  constructor • = self::FunctionInlineClass|;
+  tearoff • = self::FunctionInlineClass|_#new#tearOff;
+}
+inline class GenericFunctionInlineClass /* declaredRepresentationType = <T extends core::Object? = dynamic>() → T% */ {
+  method test = self::GenericFunctionInlineClass|test;
+  tearoff test = self::GenericFunctionInlineClass|get#test;
+  constructor • = self::GenericFunctionInlineClass|;
+  tearoff • = self::GenericFunctionInlineClass|_#new#tearOff;
+}
+inline class DynamicInlineClass /* declaredRepresentationType = dynamic */ {
+  method test = self::DynamicInlineClass|test;
+  tearoff test = self::DynamicInlineClass|get#test;
+  constructor • = self::DynamicInlineClass|;
+  tearoff • = self::DynamicInlineClass|_#new#tearOff;
+}
+inline class ErroneousInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::ErroneousInlineClass|test;
+  tearoff test = self::ErroneousInlineClass|get#test;
+  constructor • = self::ErroneousInlineClass|;
+  tearoff • = self::ErroneousInlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:15:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:16:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:17:19: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:18:14: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → void
+  return () → void => self::InlineClass|test(#this);
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> {
+  lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%>
+  return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> #this, self::GenericInlineClass|test::T% t) → void {
+  self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  self::GenericInlineClass|test::T% a2 = #this as{Unchecked} self::GenericInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:26:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:27:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  self::GenericInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:28:19: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  self::GenericInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:29:14: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+}
+static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> #this) → (self::GenericInlineClass|get#test::T%) → void
+  return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> {
+  lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%>
+  return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
+static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> #this, () → self::FunctionInlineClass|test::T% t) → void {
+  () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  () → self::FunctionInlineClass|test::T% a2 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:37:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:38:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'T Function()'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  () → self::FunctionInlineClass|test::T% c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:39:19: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = t;
+  () → self::FunctionInlineClass|test::T% c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:40:14: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<T>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = t;
+  self::FunctionInlineClass|test::T% d1 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d2 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d3 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+  self::FunctionInlineClass|test::T% d4 = (#this as{Unchecked} () → self::FunctionInlineClass|test::T%)(){() → self::FunctionInlineClass|test::T%};
+}
+static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> #this) → (() → self::FunctionInlineClass|get#test::T%) → void
+  return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
+static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass {
+  lowered final self::GenericFunctionInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass
+  return self::GenericFunctionInlineClass|(it);
+static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass #this) → void {
+  <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  <T extends core::Object? = dynamic>() → T% a2 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int a3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int a4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int b2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  dynamic c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:19: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:56:24: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c1 = this.it = t; // Error, should not resolve to extension method.
+                       ^" in #this{<unresolved>}.t;
+  dynamic c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:14: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:57:19: Error: The getter 't' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 't'.
+    var c2 = it = t; // Error, should not resolve to extension method.
+                  ^" in #this{<unresolved>}.t;
+  dynamic d1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d3 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  dynamic d4 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<dynamic>(){() → dynamic};
+  core::int e1 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int e2 = (#this as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+}
+static inline-class-member method GenericFunctionInlineClass|get#test(lowered final self::GenericFunctionInlineClass #this) → () → void
+  return () → void => self::GenericFunctionInlineClass|test(#this);
+static inline-class-member method DynamicInlineClass|(dynamic it) → self::DynamicInlineClass {
+  lowered final self::DynamicInlineClass #this = it;
+  return #this;
+}
+static inline-class-member method DynamicInlineClass|_#new#tearOff(dynamic it) → self::DynamicInlineClass
+  return self::DynamicInlineClass|(it);
+static inline-class-member method DynamicInlineClass|test(lowered final self::DynamicInlineClass #this) → void {
+  dynamic a1 = #this as{Unchecked} dynamic;
+  dynamic a2 = #this as{Unchecked} dynamic;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:72:21: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.it<int>; // Error
+                    ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:73:16: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b2 = it<int>; // Error
+               ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:74:19: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c1 = this.it = 42; // Error, should not resolve to extension method.
+                  ^^" in #this{<unresolved>}.it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:75:14: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+    var c2 = it = 42; // Error, should not resolve to extension method.
+             ^^" in #this{<unresolved>}.it = 42;
+  dynamic d1 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d2 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d3 = (#this as{Unchecked} dynamic){dynamic}.call();
+  dynamic d4 = (#this as{Unchecked} dynamic){dynamic}.call();
+}
+static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass #this) → () → void
+  return () → void => self::DynamicInlineClass|test(#this);
+static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass {
+  lowered final self::ErroneousInlineClass #this = b;
+  return #this;
+}
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass
+  return self::ErroneousInlineClass|(a, b);
+static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  dynamic a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:87:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a3 = this.b; // Error
+                  ^" in #this{<unresolved>}.b;
+  dynamic a4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:88:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var a4 = b; // Error
+             ^" in #this{<unresolved>}.b;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:89:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this.a<int>; // Error
+                   ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:90:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = a<int>; // Error
+              ^";
+  invalid-type b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:91:20: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b3 = this.b<int>; // Error
+                   ^";
+  invalid-type b4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:92:15: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+    var b4 = b<int>; // Error
+              ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:93:19: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c1 = this.a = 42; // Error
+                  ^" in #this{<unresolved>}.a = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:94:14: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+    var c2 = a = 42; // Error
+             ^" in #this{<unresolved>}.a = 42;
+  core::String c3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:95:19: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c3 = this.b = '42'; // Error
+                  ^" in #this{<unresolved>}.b = "42";
+  core::String c4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:96:14: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+    var c4 = b = '42'; // Error
+             ^" in #this{<unresolved>}.b = "42";
+  dynamic d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:97:20: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d1 = this.a(); // Error
+                   ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:98:15: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d2 = a(); // Error
+              ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:99:21: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d3 = this.a.call(); // Error
+                    ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic d4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:100:16: Error: The method 'call' isn't defined for the class 'int'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+    var d4 = a.call(); // Error
+               ^^^^" in (#this as{Unchecked} core::int){<unresolved>}.call();
+  dynamic e1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:101:19: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e1 = this.b(); // Error
+                  ^" in #this{<unresolved>}.b();
+  dynamic e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:102:14: Error: The method 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing method, or defining a method named 'b'.
+    var e2 = b(); // Error
+             ^" in #this{<unresolved>}.b();
+  dynamic e3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:103:19: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e3 = this.b.call(); // Error
+                  ^" in #this{<unresolved>}.b{dynamic}.call();
+  dynamic e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:104:14: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+    var e4 = b.call(); // Error
+             ^" in #this{<unresolved>}.b{dynamic}.call();
+}
+static inline-class-member method ErroneousInlineClass|get#test(lowered final self::ErroneousInlineClass #this) → () → void
+  return () → void => self::ErroneousInlineClass|test(#this);
+static method test(self::InlineClass inlineClass, self::GenericInlineClass<core::String> genericInlineClass, self::FunctionInlineClass<core::String> functionInlineClass, self::GenericFunctionInlineClass genericFunctionInlineClass, self::DynamicInlineClass dynamicInlineClass, self::ErroneousInlineClass erroneousInlineClass, #lib1::PrivateInlineClass privateInlineClass) → void {
+  core::int a1 = inlineClass as{Unchecked} core::int;
+  invalid-type a2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:118:26: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var a2 = inlineClass.it<int>; // Error
+                         ^";
+  core::int a3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:119:24: Error: The setter 'it' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var a3 = inlineClass.it = 42; // Error,
+                       ^^" in inlineClass{<unresolved>}.it = 42;
+  core::String b1 = genericInlineClass as{Unchecked} core::String;
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:123:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String'.
+Try changing the operand or remove the type arguments.
+  var b2 = genericInlineClass.it<int>; // Error
+                                ^";
+  core::String b3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:124:31: Error: The setter 'it' isn't defined for the class 'GenericInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var b3 = genericInlineClass.it = '42'; // Error, should not
+                              ^^" in genericInlineClass{<unresolved>}.it = "42";
+  () → core::String c1 = functionInlineClass as{Unchecked} () → core::String;
+  invalid-type c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:128:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'String Function()'.
+Try changing the operand or remove the type arguments.
+  var c2 = functionInlineClass.it<int>; // Error
+                                 ^";
+  core::String c3 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  core::String c4 = (functionInlineClass as{Unchecked} () → core::String)(){() → core::String};
+  () → core::String c5 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:131:32: Error: The setter 'it' isn't defined for the class 'FunctionInlineClass<String>'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var c5 = functionInlineClass.it = () => '42'; // Error, should not
+                               ^^" in functionInlineClass{<unresolved>}.it = () → core::String => "42";
+  <T extends core::Object? = dynamic>() → T% d1 = genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%;
+  () → core::int d2 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  () → core::int d3 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>;
+  core::int d4 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  core::int d5 = (genericFunctionInlineClass as{Unchecked} <T extends core::Object? = dynamic>() → T%)<core::int>(){() → core::int};
+  <T extends core::Object? = dynamic>() → Never d6 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:139:39: Error: The setter 'it' isn't defined for the class 'GenericFunctionInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var d6 = genericFunctionInlineClass.it = <T>() => throw ''; // Error, should
+                                      ^^" in genericFunctionInlineClass{<unresolved>}.it = <T extends core::Object? = dynamic>() → Never => throw "";
+  dynamic e1 = dynamicInlineClass as{Unchecked} dynamic;
+  invalid-type e2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:143:33: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var e2 = dynamicInlineClass.it<int>; // Error
+                                ^";
+  dynamic e3 = (dynamicInlineClass as{Unchecked} dynamic){dynamic}.call();
+  core::String e4 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:145:31: Error: The setter 'it' isn't defined for the class 'DynamicInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'it'.
+  var e4 = dynamicInlineClass.it = '42'; // Error, should not resolve
+                              ^^" in dynamicInlineClass{<unresolved>}.it = "42";
+  core::int f1 = erroneousInlineClass as{Unchecked} core::int;
+  invalid-type f2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:149:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var f2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::int f3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:150:33: Error: The setter 'a' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'a'.
+  var f3 = erroneousInlineClass.a = 42; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.a = 42;
+  dynamic g1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:152:33: Error: The getter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'b'.
+  var g1 = erroneousInlineClass.b;
+                                ^" in erroneousInlineClass{<unresolved>}.b;
+  invalid-type g2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:153:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+  var g2 = erroneousInlineClass.a<int>; // Error
+                                 ^";
+  core::String g3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:154:33: Error: The setter 'b' isn't defined for the class 'ErroneousInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'b'.
+  var g3 = erroneousInlineClass.b = '42'; // Error, should not resolve
+                                ^" in erroneousInlineClass{<unresolved>}.b = "42";
+  dynamic h1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:157:31: Error: The getter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named '_it'.
+  var h1 = privateInlineClass._it; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it;
+  invalid-type h2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:158:34: Error: The static type of the explicit instantiation operand must be a generic function type but is 'dynamic'.
+Try changing the operand or remove the type arguments.
+  var h2 = privateInlineClass._it<int>; // Error
+                                 ^";
+  core::int h3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access.dart:159:31: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+  var h3 = privateInlineClass._it = 42; // Error
+                              ^^^" in privateInlineClass{<unresolved>}._it = 42;
+}
+
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b1 = this._it<int>; // Error
+//                      ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+// Try changing the operand or remove the type arguments.
+//     var b2 = _it<int>; // Error
+//                 ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c1 = this._it = 42; // Error, should not resolve to extension method.
+//                   ^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+//     var c2 = _it = 42; // Error, should not resolve to extension method.
+//              ^^^
+//
+import self as self2;
+import "dart:core" as core;
+
+inline class PrivateInlineClass /* declaredRepresentationType = core::int */ {
+  method test = self2::PrivateInlineClass|test;
+  tearoff test = self2::PrivateInlineClass|get#test;
+  constructor • = self2::PrivateInlineClass|;
+  tearoff • = self2::PrivateInlineClass|_#new#tearOff;
+}
+static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass {
+  lowered final self2::PrivateInlineClass #this = _it;
+  return #this;
+}
+static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass
+  return self2::PrivateInlineClass|(_it);
+static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass #this) → void {
+  core::int a1 = #this as{Unchecked} core::int;
+  core::int a2 = #this as{Unchecked} core::int;
+  invalid-type b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:9:22: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b1 = this._it<int>; // Error
+                     ^";
+  invalid-type b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:10:17: Error: The static type of the explicit instantiation operand must be a generic function type but is 'int'.
+Try changing the operand or remove the type arguments.
+    var b2 = _it<int>; // Error
+                ^";
+  core::int c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:11:19: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+                  ^^^" in #this{<unresolved>}._it = 42;
+  core::int c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart:12:14: Error: The setter '_it' isn't defined for the class 'PrivateInlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named '_it'.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+             ^^^" in #this{<unresolved>}._it = 42;
+}
+static inline-class-member method PrivateInlineClass|get#test(lowered final self2::PrivateInlineClass #this) → () → void
+  return () → void => self2::PrivateInlineClass|test(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart b/pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart
new file mode 100644
index 0000000..0bed772
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access_lib.dart
@@ -0,0 +1,14 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type PrivateInlineClass(int _it) {
+  void test() {
+    var a1 = this._it;
+    var a2 = _it;
+    var b1 = this._it<int>; // Error
+    var b2 = _it<int>; // Error
+    var c1 = this._it = 42; // Error, should not resolve to extension method.
+    var c2 = _it = 42; // Error, should not resolve to extension method.
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart
new file mode 100644
index 0000000..78ef8f4
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart
@@ -0,0 +1,7 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'has_part_lib.dart';
+
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect
new file mode 100644
index 0000000..79a13a6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void {}
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C {
+  lowered final has::C #this = i;
+  return #this;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect
new file mode 100644
index 0000000..79a13a6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void {}
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C {
+  lowered final has::C #this = i;
+  return #this;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline.expect
new file mode 100644
index 0000000..2a7131b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+export 'has_part_lib.dart';
+
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2a7131b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+export 'has_part_lib.dart';
+
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect
new file mode 100644
index 0000000..79a13a6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void {}
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C {
+  lowered final has::C #this = i;
+  return #this;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect
new file mode 100644
index 0000000..79a13a6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void {}
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C {
+  lowered final has::C #this = i;
+  return #this;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect
new file mode 100644
index 0000000..a4e164e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void
+  ;
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C
+  ;
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect
new file mode 100644
index 0000000..79a13a6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "has_part_lib.dart" as has;
+additionalExports = (has::C)
+
+export "org-dartlang-testcase:///has_part_lib.dart";
+
+static method main() → void {}
+
+library;
+import self as has;
+import "dart:core" as core;
+
+part has_part_of_lib.dart;
+inline class C /* declaredRepresentationType = core::int */ { // from org-dartlang-testcase:///has_part_of_lib.dart
+  constructor • = has::C|;
+  tearoff • = has::_#new#tearOff;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C {
+  lowered final has::C #this = i;
+  return #this;
+}
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C
+  return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_part_lib.dart b/pkg/front_end/testcases/inline_class/extension_types/has_part_lib.dart
new file mode 100644
index 0000000..4daef7c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_part_lib.dart
@@ -0,0 +1,5 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+part 'has_part_of_lib.dart';
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_part_of_lib.dart b/pkg/front_end/testcases/inline_class/extension_types/has_part_of_lib.dart
new file mode 100644
index 0000000..3708595
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_part_of_lib.dart
@@ -0,0 +1,7 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+part of 'has_part_lib.dart';
+
+extension type C(int i) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart b/pkg/front_end/testcases/inline_class/extension_types/implements.dart
new file mode 100644
index 0000000..b8f26b0
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart
@@ -0,0 +1,127 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type A(int it) {
+  int methodA() => it + 5;
+}
+
+extension type B<T>(T it) {
+  T methodB() => it;
+}
+
+extension type C1(int it) implements A {
+  int methodC1() => it + 42;
+}
+
+extension type C2(int it) implements A, B<int> {
+  int methodC2() => it + 87;
+}
+
+extension type D1(int it) implements C1 {
+  int methodD1() => it + 123;
+}
+
+errors(A a, B<String> b1, B<num> b2, C1 c1, C2 c2, D1 d1) {
+  a.methodB(); // Error
+  a.methodC1(); // Error
+  a.methodC2(); // Error
+  a.methodD1(); // Error
+
+  b1.methodA(); // Error
+  b1.methodC1(); // Error
+  b1.methodC2(); // Error
+  b1.methodD1(); // Error
+
+  b2.methodA(); // Error
+  b2.methodC1(); // Error
+  b2.methodC2(); // Error
+  b2.methodD1(); // Error
+
+  c1.methodB(); // Error
+  c1.methodC2(); // Error
+  c1.methodD1(); // Error
+
+  c2.methodC1(); // Error
+  c2.methodD1(); // Error
+
+  d1.methodB(); // Error
+  d1.methodC2(); // Error
+
+  a = b1; // Error
+  a = b2; // Error
+
+  b1 = a; // Error
+  b1 = b2; // Error
+  b1 = c1; // Error
+  b1 = c2; // Error
+  b1 = d1; // Error
+
+  b2 = a; // Error
+  b2 = b1; // Error
+  b2 = c1; // Error
+  b2 = d1; // Error
+
+  c1 = a; // Error
+  c1 = b1; // Error
+  c1 = b2; // Error
+  c1 = c2; // Error
+
+  c2 = a; // Error
+  c2 = b1; // Error
+  c2 = b2; // Error
+  c2 = c1; // Error
+  c2 = d1; // Error
+
+  d1 = a; // Error
+  d1 = b1; // Error
+  d1 = b2; // Error
+  d1 = c1; // Error
+  d1 = c2; // Error
+}
+
+method(A a, B<String> b1, B<num> b2, C1 c1, C2 c2, D1 d1) {
+  expect(0 + 5, a.methodA()); // OK
+
+  expect('0', b1.methodB()); // OK
+
+  expect(1 + 0, b2.methodB()); // OK
+
+  expect(2 + 5, c1.methodA()); // OK
+  expect(2 + 42, c1.methodC1()); // OK
+
+  expect(3 + 5, c2.methodA()); // OK
+  expect(3, c2.methodB()); // OK
+  expect(3 + 87, c2.methodC2()); // OK
+
+  expect(4 + 5, d1.methodA()); // OK
+  expect(4 + 42, d1.methodC1()); // OK
+  expect(4 + 123, d1.methodD1()); // OK
+
+  a = a; // OK
+  a = c1; // OK
+  a = c2; // OK
+  a = d1; // OK
+
+  b1 = b1; // OK
+
+  b2 = b2; // OK
+  b2 = c2; // OK
+
+  c1 = c1; // OK
+  c1 = d1; // OK
+
+  c2 = c2; // OK
+
+  d1 = d1; // OK
+}
+
+main() {
+  method(A(0), B<String>('0'), B<num>(1), C1(2), C2(3), D1(4));
+}
+
+expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Expected $expected, actual $actual';
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect
new file mode 100644
index 0000000..20e2f4c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect
@@ -0,0 +1,467 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   a.methodB(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   a.methodC1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   a.methodC2(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   a.methodD1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b1.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b1.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b2.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b2.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   c1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   c1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   c2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   d1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   d1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+//   a = b1; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+//   a = b2; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+//   b1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+//   b1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+//   b2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+//   b2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+//   c1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+//   c1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+//   c1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+//   c1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+//   c2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+//   c2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+//   c2 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+//   c2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+//   c2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+//   d1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+//   d1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+//   d1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+//   d1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+//   d1 = c2; // Error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A {
+  lowered final self::A #this = it;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> {
+  lowered final self::B<self::B|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  return #this as{Unchecked} self::B|methodB::T%;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1 {
+  lowered final self::C1 #this = it;
+  return #this;
+}
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2 {
+  lowered final self::C2 #this = it;
+  return #this;
+}
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1 {
+  lowered final self::D1 #this = it;
+  return #this;
+}
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  a.methodB(); // Error
+    ^^^^^^^" in a{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  a.methodC1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  a.methodC2(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  a.methodD1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b1.methodA(); // Error
+     ^^^^^^^" in b1{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b1.methodC1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b1.methodC2(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b1.methodD1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b2.methodA(); // Error
+     ^^^^^^^" in b2{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b2.methodC1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b2.methodC2(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b2.methodD1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  c1.methodB(); // Error
+     ^^^^^^^" in c1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  c1.methodC2(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c1.methodD1(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  c2.methodC1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c2.methodD1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  d1.methodB(); // Error
+     ^^^^^^^" in d1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  d1.methodC2(); // Error
+     ^^^^^^^^" in d1{<unresolved>}.methodC2();
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+  a = b1; // Error
+      ^" in b1 as{TypeError} self::A;
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+  a = b2; // Error
+      ^" in b2 as{TypeError} self::A;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+  b1 = a; // Error
+       ^" in a as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+  b1 = b2; // Error
+       ^" in b2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+  b1 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+  b1 = c2; // Error
+       ^" in c2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+  b1 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::String>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+  b2 = a; // Error
+       ^" in a as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+  b2 = b1; // Error
+       ^" in b1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+  b2 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+  b2 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::num>;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+  c1 = a; // Error
+       ^" in a as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+  c1 = b1; // Error
+       ^" in b1 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+  c1 = b2; // Error
+       ^" in b2 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+  c1 = c2; // Error
+       ^" in c2 as{TypeError} self::C1;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+  c2 = a; // Error
+       ^" in a as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+  c2 = b1; // Error
+       ^" in b1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+  c2 = b2; // Error
+       ^" in b2 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+  c2 = c1; // Error
+       ^" in c1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+  c2 = d1; // Error
+       ^" in d1 as{TypeError} self::C2;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+  d1 = a; // Error
+       ^" in a as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+  d1 = b1; // Error
+       ^" in b1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+  d1 = b2; // Error
+       ^" in b2 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+  d1 = c1; // Error
+       ^" in c1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+  d1 = c2; // Error
+       ^" in c2 as{TypeError} self::D1;
+}
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  self::expect(0.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(a));
+  self::expect("0", self::B|methodB<core::String>(b1));
+  self::expect(1.{core::num::+}(0){(core::num) → core::int}, self::B|methodB<core::num>(b2));
+  self::expect(2.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c1));
+  self::expect(2.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(c1));
+  self::expect(3.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c2));
+  self::expect(3, self::B|methodB<core::int>(c2));
+  self::expect(3.{core::num::+}(87){(core::num) → core::int}, self::C2|methodC2(c2));
+  self::expect(4.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(d1));
+  self::expect(4.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(d1));
+  self::expect(4.{core::num::+}(123){(core::num) → core::int}, self::D1|methodD1(d1));
+  a = a;
+  a = c1;
+  a = c2;
+  a = d1;
+  b1 = b1;
+  b2 = b2;
+  b2 = c2;
+  c1 = c1;
+  c1 = d1;
+  c2 = c2;
+  d1 = d1;
+}
+static method main() → dynamic {
+  self::method(self::A|(0), self::B|<core::String>("0"), self::B|<core::num>(1), self::C1|(2), self::C2|(3), self::D1|(4));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect
new file mode 100644
index 0000000..cc7dfa7
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect
@@ -0,0 +1,486 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   a.methodB(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   a.methodC1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   a.methodC2(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   a.methodD1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b1.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b1.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b2.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b2.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   c1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   c1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   c2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   d1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   d1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+//   a = b1; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+//   a = b2; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+//   b1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+//   b1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+//   b2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+//   b2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+//   c1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+//   c1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+//   c1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+//   c1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+//   c2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+//   c2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+//   c2 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+//   c2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+//   c2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+//   d1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+//   d1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+//   d1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+//   d1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+//   d1 = c2; // Error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A {
+  lowered final self::A #this = it;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> {
+  lowered final self::B<self::B|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  return #this as{Unchecked} self::B|methodB::T%;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1 {
+  lowered final self::C1 #this = it;
+  return #this;
+}
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2 {
+  lowered final self::C2 #this = it;
+  return #this;
+}
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1 {
+  lowered final self::D1 #this = it;
+  return #this;
+}
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  a.methodB(); // Error
+    ^^^^^^^" in a{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  a.methodC1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  a.methodC2(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  a.methodD1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b1.methodA(); // Error
+     ^^^^^^^" in b1{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b1.methodC1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b1.methodC2(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b1.methodD1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b2.methodA(); // Error
+     ^^^^^^^" in b2{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b2.methodC1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b2.methodC2(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b2.methodD1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  c1.methodB(); // Error
+     ^^^^^^^" in c1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  c1.methodC2(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c1.methodD1(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  c2.methodC1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c2.methodD1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  d1.methodB(); // Error
+     ^^^^^^^" in d1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  d1.methodC2(); // Error
+     ^^^^^^^^" in d1{<unresolved>}.methodC2();
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+  a = b1; // Error
+      ^" in b1 as{TypeError} self::A;
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+  a = b2; // Error
+      ^" in b2 as{TypeError} self::A;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+  b1 = a; // Error
+       ^" in a as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+  b1 = b2; // Error
+       ^" in b2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+  b1 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+  b1 = c2; // Error
+       ^" in c2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+  b1 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::String>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+  b2 = a; // Error
+       ^" in a as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+  b2 = b1; // Error
+       ^" in b1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+  b2 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+  b2 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::num>;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+  c1 = a; // Error
+       ^" in a as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+  c1 = b1; // Error
+       ^" in b1 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+  c1 = b2; // Error
+       ^" in b2 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+  c1 = c2; // Error
+       ^" in c2 as{TypeError} self::C1;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+  c2 = a; // Error
+       ^" in a as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+  c2 = b1; // Error
+       ^" in b1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+  c2 = b2; // Error
+       ^" in b2 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+  c2 = c1; // Error
+       ^" in c1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+  c2 = d1; // Error
+       ^" in d1 as{TypeError} self::C2;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+  d1 = a; // Error
+       ^" in a as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+  d1 = b1; // Error
+       ^" in b1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+  d1 = b2; // Error
+       ^" in b2 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+  d1 = c1; // Error
+       ^" in c1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+  d1 = c2; // Error
+       ^" in c2 as{TypeError} self::D1;
+}
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  self::expect(0.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(a));
+  self::expect("0", self::B|methodB<core::String>(b1));
+  self::expect(1.{core::num::+}(0){(core::num) → core::int}, self::B|methodB<core::num>(b2));
+  self::expect(2.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c1));
+  self::expect(2.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(c1));
+  self::expect(3.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c2));
+  self::expect(3, self::B|methodB<core::int>(c2));
+  self::expect(3.{core::num::+}(87){(core::num) → core::int}, self::C2|methodC2(c2));
+  self::expect(4.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(d1));
+  self::expect(4.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(d1));
+  self::expect(4.{core::num::+}(123){(core::num) → core::int}, self::D1|methodD1(d1));
+  a = a;
+  a = c1;
+  a = c2;
+  a = d1;
+  b1 = b1;
+  b2 = b2;
+  b2 = c2;
+  c1 = c1;
+  c1 = d1;
+  c2 = c2;
+  d1 = d1;
+}
+static method main() → dynamic {
+  self::method(self::A|(0), self::B|<core::String>("0"), self::B|<core::num>(1), self::C1|(2), self::C2|(3), self::D1|(4));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:84:12 -> IntConstant(5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:88:12 -> IntConstant(1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:90:12 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:91:12 -> IntConstant(44)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:93:12 -> IntConstant(8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:95:12 -> IntConstant(90)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:97:12 -> IntConstant(9)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:98:12 -> IntConstant(46)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:99:12 -> IntConstant(127)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:10 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:16 -> StringConstant("0")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:32 -> IntConstant(1)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:43 -> IntConstant(2)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:50 -> IntConstant(3)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:57 -> IntConstant(4)
+Extra constant evaluation: evaluated: 153, effectively constant: 15
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.textual_outline.expect
new file mode 100644
index 0000000..e815909
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+extension type A(int it) {
+int methodA() => it + 5;
+} extension type B<T>(T it) {
+T methodB() => it;
+} extension type C1(int it) implements A {
+int methodC1() => it + 42;
+} extension type C2(int it) implements A, B<int> {
+int methodC2() => it + 87;
+} extension type D1(int it) implements C1 {
+int methodD1() => it + 123;
+}
+errors(A a, B<String> b1, B<num> b2, C1 c1, C2 c2, D1 d1) {}
+method(A a, B<String> b1, B<num> b2, C1 c1, C2 c2, D1 d1) {}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect
new file mode 100644
index 0000000..20e2f4c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect
@@ -0,0 +1,467 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   a.methodB(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   a.methodC1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   a.methodC2(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   a.methodD1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b1.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b1.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b2.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b2.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   c1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   c1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   c2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   d1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   d1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+//   a = b1; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+//   a = b2; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+//   b1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+//   b1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+//   b2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+//   b2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+//   c1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+//   c1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+//   c1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+//   c1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+//   c2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+//   c2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+//   c2 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+//   c2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+//   c2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+//   d1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+//   d1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+//   d1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+//   d1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+//   d1 = c2; // Error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A {
+  lowered final self::A #this = it;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> {
+  lowered final self::B<self::B|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  return #this as{Unchecked} self::B|methodB::T%;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1 {
+  lowered final self::C1 #this = it;
+  return #this;
+}
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2 {
+  lowered final self::C2 #this = it;
+  return #this;
+}
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1 {
+  lowered final self::D1 #this = it;
+  return #this;
+}
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  a.methodB(); // Error
+    ^^^^^^^" in a{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  a.methodC1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  a.methodC2(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  a.methodD1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b1.methodA(); // Error
+     ^^^^^^^" in b1{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b1.methodC1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b1.methodC2(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b1.methodD1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b2.methodA(); // Error
+     ^^^^^^^" in b2{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b2.methodC1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b2.methodC2(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b2.methodD1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  c1.methodB(); // Error
+     ^^^^^^^" in c1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  c1.methodC2(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c1.methodD1(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  c2.methodC1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c2.methodD1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  d1.methodB(); // Error
+     ^^^^^^^" in d1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  d1.methodC2(); // Error
+     ^^^^^^^^" in d1{<unresolved>}.methodC2();
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+  a = b1; // Error
+      ^" in b1 as{TypeError} self::A;
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+  a = b2; // Error
+      ^" in b2 as{TypeError} self::A;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+  b1 = a; // Error
+       ^" in a as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+  b1 = b2; // Error
+       ^" in b2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+  b1 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+  b1 = c2; // Error
+       ^" in c2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+  b1 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::String>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+  b2 = a; // Error
+       ^" in a as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+  b2 = b1; // Error
+       ^" in b1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+  b2 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+  b2 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::num>;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+  c1 = a; // Error
+       ^" in a as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+  c1 = b1; // Error
+       ^" in b1 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+  c1 = b2; // Error
+       ^" in b2 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+  c1 = c2; // Error
+       ^" in c2 as{TypeError} self::C1;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+  c2 = a; // Error
+       ^" in a as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+  c2 = b1; // Error
+       ^" in b1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+  c2 = b2; // Error
+       ^" in b2 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+  c2 = c1; // Error
+       ^" in c1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+  c2 = d1; // Error
+       ^" in d1 as{TypeError} self::C2;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+  d1 = a; // Error
+       ^" in a as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+  d1 = b1; // Error
+       ^" in b1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+  d1 = b2; // Error
+       ^" in b2 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+  d1 = c1; // Error
+       ^" in c1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+  d1 = c2; // Error
+       ^" in c2 as{TypeError} self::D1;
+}
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  self::expect(0.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(a));
+  self::expect("0", self::B|methodB<core::String>(b1));
+  self::expect(1.{core::num::+}(0){(core::num) → core::int}, self::B|methodB<core::num>(b2));
+  self::expect(2.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c1));
+  self::expect(2.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(c1));
+  self::expect(3.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c2));
+  self::expect(3, self::B|methodB<core::int>(c2));
+  self::expect(3.{core::num::+}(87){(core::num) → core::int}, self::C2|methodC2(c2));
+  self::expect(4.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(d1));
+  self::expect(4.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(d1));
+  self::expect(4.{core::num::+}(123){(core::num) → core::int}, self::D1|methodD1(d1));
+  a = a;
+  a = c1;
+  a = c2;
+  a = d1;
+  b1 = b1;
+  b2 = b2;
+  b2 = c2;
+  c1 = c1;
+  c1 = d1;
+  c2 = c2;
+  d1 = d1;
+}
+static method main() → dynamic {
+  self::method(self::A|(0), self::B|<core::String>("0"), self::B|<core::num>(1), self::C1|(2), self::C2|(3), self::D1|(4));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect
new file mode 100644
index 0000000..20e2f4c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect
@@ -0,0 +1,467 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   a.methodB(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   a.methodC1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   a.methodC2(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   a.methodD1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b1.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b1.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b2.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b2.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   c1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   c1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   c2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   d1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   d1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+//   a = b1; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+//   a = b2; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+//   b1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+//   b1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+//   b2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+//   b2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+//   c1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+//   c1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+//   c1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+//   c1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+//   c2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+//   c2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+//   c2 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+//   c2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+//   c2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+//   d1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+//   d1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+//   d1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+//   d1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+//   d1 = c2; // Error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A {
+  lowered final self::A #this = it;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> {
+  lowered final self::B<self::B|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  return #this as{Unchecked} self::B|methodB::T%;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1 {
+  lowered final self::C1 #this = it;
+  return #this;
+}
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2 {
+  lowered final self::C2 #this = it;
+  return #this;
+}
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1 {
+  lowered final self::D1 #this = it;
+  return #this;
+}
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  a.methodB(); // Error
+    ^^^^^^^" in a{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  a.methodC1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  a.methodC2(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  a.methodD1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b1.methodA(); // Error
+     ^^^^^^^" in b1{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b1.methodC1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b1.methodC2(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b1.methodD1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b2.methodA(); // Error
+     ^^^^^^^" in b2{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b2.methodC1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b2.methodC2(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b2.methodD1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  c1.methodB(); // Error
+     ^^^^^^^" in c1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  c1.methodC2(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c1.methodD1(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  c2.methodC1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c2.methodD1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  d1.methodB(); // Error
+     ^^^^^^^" in d1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  d1.methodC2(); // Error
+     ^^^^^^^^" in d1{<unresolved>}.methodC2();
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+  a = b1; // Error
+      ^" in b1 as{TypeError} self::A;
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+  a = b2; // Error
+      ^" in b2 as{TypeError} self::A;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+  b1 = a; // Error
+       ^" in a as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+  b1 = b2; // Error
+       ^" in b2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+  b1 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+  b1 = c2; // Error
+       ^" in c2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+  b1 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::String>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+  b2 = a; // Error
+       ^" in a as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+  b2 = b1; // Error
+       ^" in b1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+  b2 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+  b2 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::num>;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+  c1 = a; // Error
+       ^" in a as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+  c1 = b1; // Error
+       ^" in b1 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+  c1 = b2; // Error
+       ^" in b2 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+  c1 = c2; // Error
+       ^" in c2 as{TypeError} self::C1;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+  c2 = a; // Error
+       ^" in a as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+  c2 = b1; // Error
+       ^" in b1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+  c2 = b2; // Error
+       ^" in b2 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+  c2 = c1; // Error
+       ^" in c1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+  c2 = d1; // Error
+       ^" in d1 as{TypeError} self::C2;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+  d1 = a; // Error
+       ^" in a as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+  d1 = b1; // Error
+       ^" in b1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+  d1 = b2; // Error
+       ^" in b2 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+  d1 = c1; // Error
+       ^" in c1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+  d1 = c2; // Error
+       ^" in c2 as{TypeError} self::D1;
+}
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  self::expect(0.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(a));
+  self::expect("0", self::B|methodB<core::String>(b1));
+  self::expect(1.{core::num::+}(0){(core::num) → core::int}, self::B|methodB<core::num>(b2));
+  self::expect(2.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c1));
+  self::expect(2.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(c1));
+  self::expect(3.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c2));
+  self::expect(3, self::B|methodB<core::int>(c2));
+  self::expect(3.{core::num::+}(87){(core::num) → core::int}, self::C2|methodC2(c2));
+  self::expect(4.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(d1));
+  self::expect(4.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(d1));
+  self::expect(4.{core::num::+}(123){(core::num) → core::int}, self::D1|methodD1(d1));
+  a = a;
+  a = c1;
+  a = c2;
+  a = d1;
+  b1 = b1;
+  b2 = b2;
+  b2 = c2;
+  c1 = c1;
+  c1 = d1;
+  c2 = c2;
+  d1 = d1;
+}
+static method main() → dynamic {
+  self::method(self::A|(0), self::B|<core::String>("0"), self::B|<core::num>(1), self::C1|(2), self::C2|(3), self::D1|(4));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect
new file mode 100644
index 0000000..69ef41e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect
@@ -0,0 +1,82 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A
+  ;
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  ;
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%>
+  ;
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  ;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1
+  ;
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  ;
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2
+  ;
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  ;
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1
+  ;
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  ;
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic
+  ;
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect
new file mode 100644
index 0000000..cc7dfa7
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect
@@ -0,0 +1,486 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   a.methodB(); // Error
+//     ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   a.methodC1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   a.methodC2(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   a.methodD1(); // Error
+//     ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b1.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b1.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+//   b2.methodA(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   b2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   b2.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   b2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   c1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   c1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c1.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+//   c2.methodC1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+//   c2.methodD1(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+//   d1.methodB(); // Error
+//      ^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+// Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+//   d1.methodC2(); // Error
+//      ^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+//   a = b1; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+//   a = b2; // Error
+//       ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+//   b1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+//   b1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+//   b1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+//   b1 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+//   b2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+//   b2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+//   b2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+//   c1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+//   c1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+//   c1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+//   c1 = c2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+//   c2 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+//   c2 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+//   c2 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+//   c2 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+//   c2 = d1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+//   d1 = a; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+//   d1 = b1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+//   d1 = b2; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+//   d1 = c1; // Error
+//        ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+//   d1 = c2; // Error
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  method methodA = self::A|methodA;
+  tearoff methodA = self::A|get#methodA;
+  constructor • = self::A|;
+  tearoff • = self::A|_#new#tearOff;
+}
+inline class B<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method methodB = self::B|methodB;
+  tearoff methodB = self::B|get#methodB;
+  constructor • = self::B|;
+  tearoff • = self::B|_#new#tearOff;
+}
+inline class C1 /* declaredRepresentationType = core::int */ implements self::A {
+  method methodC1 = self::C1|methodC1;
+  tearoff methodC1 = self::C1|get#methodC1;
+  constructor • = self::C1|;
+  tearoff • = self::C1|_#new#tearOff;
+}
+inline class C2 /* declaredRepresentationType = core::int */ implements self::A, self::B<core::int> {
+  method methodC2 = self::C2|methodC2;
+  tearoff methodC2 = self::C2|get#methodC2;
+  constructor • = self::C2|;
+  tearoff • = self::C2|_#new#tearOff;
+}
+inline class D1 /* declaredRepresentationType = core::int */ implements self::C1 {
+  method methodD1 = self::D1|methodD1;
+  tearoff methodD1 = self::D1|get#methodD1;
+  constructor • = self::D1|;
+  tearoff • = self::D1|_#new#tearOff;
+}
+static inline-class-member method A|(dynamic it) → self::A {
+  lowered final self::A #this = it;
+  return #this;
+}
+static inline-class-member method A|_#new#tearOff(dynamic it) → self::A
+  return self::A|(it);
+static inline-class-member method A|methodA(lowered final self::A #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
+static inline-class-member method A|get#methodA(lowered final self::A #this) → () → core::int
+  return () → core::int => self::A|methodA(#this);
+static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> {
+  lowered final self::B<self::B|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%>
+  return self::B|<self::B|_#new#tearOff::T%>(it);
+static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> #this) → self::B|methodB::T%
+  return #this as{Unchecked} self::B|methodB::T%;
+static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> #this) → () → self::B|get#methodB::T%
+  return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
+static inline-class-member method C1|(dynamic it) → self::C1 {
+  lowered final self::C1 #this = it;
+  return #this;
+}
+static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1
+  return self::C1|(it);
+static inline-class-member method C1|methodC1(lowered final self::C1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
+static inline-class-member method C1|get#methodC1(lowered final self::C1 #this) → () → core::int
+  return () → core::int => self::C1|methodC1(#this);
+static inline-class-member method C2|(dynamic it) → self::C2 {
+  lowered final self::C2 #this = it;
+  return #this;
+}
+static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2
+  return self::C2|(it);
+static inline-class-member method C2|methodC2(lowered final self::C2 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
+static inline-class-member method C2|get#methodC2(lowered final self::C2 #this) → () → core::int
+  return () → core::int => self::C2|methodC2(#this);
+static inline-class-member method D1|(dynamic it) → self::D1 {
+  lowered final self::D1 #this = it;
+  return #this;
+}
+static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1
+  return self::D1|(it);
+static inline-class-member method D1|methodD1(lowered final self::D1 #this) → core::int
+  return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
+static inline-class-member method D1|get#methodD1(lowered final self::D1 #this) → () → core::int
+  return () → core::int => self::D1|methodD1(#this);
+static method errors(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:26:5: Error: The method 'methodB' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  a.methodB(); // Error
+    ^^^^^^^" in a{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:27:5: Error: The method 'methodC1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  a.methodC1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:28:5: Error: The method 'methodC2' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  a.methodC2(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:29:5: Error: The method 'methodD1' isn't defined for the class 'A'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  a.methodD1(); // Error
+    ^^^^^^^^" in a{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:31:6: Error: The method 'methodA' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b1.methodA(); // Error
+     ^^^^^^^" in b1{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:32:6: Error: The method 'methodC1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b1.methodC1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:33:6: Error: The method 'methodC2' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b1.methodC2(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:34:6: Error: The method 'methodD1' isn't defined for the class 'B<String>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b1.methodD1(); // Error
+     ^^^^^^^^" in b1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:36:6: Error: The method 'methodA' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodA'.
+  b2.methodA(); // Error
+     ^^^^^^^" in b2{<unresolved>}.methodA();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:37:6: Error: The method 'methodC1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  b2.methodC1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:38:6: Error: The method 'methodC2' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  b2.methodC2(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:39:6: Error: The method 'methodD1' isn't defined for the class 'B<num>'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  b2.methodD1(); // Error
+     ^^^^^^^^" in b2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:41:6: Error: The method 'methodB' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  c1.methodB(); // Error
+     ^^^^^^^" in c1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:42:6: Error: The method 'methodC2' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  c1.methodC2(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodC2();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:43:6: Error: The method 'methodD1' isn't defined for the class 'C1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c1.methodD1(); // Error
+     ^^^^^^^^" in c1{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:45:6: Error: The method 'methodC1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC1'.
+  c2.methodC1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodC1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:46:6: Error: The method 'methodD1' isn't defined for the class 'C2'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodD1'.
+  c2.methodD1(); // Error
+     ^^^^^^^^" in c2{<unresolved>}.methodD1();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:48:6: Error: The method 'methodB' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodB'.
+  d1.methodB(); // Error
+     ^^^^^^^" in d1{<unresolved>}.methodB();
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:49:6: Error: The method 'methodC2' isn't defined for the class 'D1'.
+Try correcting the name to the name of an existing method, or defining a method named 'methodC2'.
+  d1.methodC2(); // Error
+     ^^^^^^^^" in d1{<unresolved>}.methodC2();
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:51:7: Error: A value of type 'B<String>' can't be assigned to a variable of type 'A'.
+  a = b1; // Error
+      ^" in b1 as{TypeError} self::A;
+  a = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:52:7: Error: A value of type 'B<num>' can't be assigned to a variable of type 'A'.
+  a = b2; // Error
+      ^" in b2 as{TypeError} self::A;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:54:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<String>'.
+  b1 = a; // Error
+       ^" in a as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:55:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'B<String>'.
+  b1 = b2; // Error
+       ^" in b2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:56:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<String>'.
+  b1 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:57:8: Error: A value of type 'C2' can't be assigned to a variable of type 'B<String>'.
+  b1 = c2; // Error
+       ^" in c2 as{TypeError} self::B<core::String>;
+  b1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:58:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<String>'.
+  b1 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::String>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:60:8: Error: A value of type 'A' can't be assigned to a variable of type 'B<num>'.
+  b2 = a; // Error
+       ^" in a as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:61:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'B<num>'.
+  b2 = b1; // Error
+       ^" in b1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:62:8: Error: A value of type 'C1' can't be assigned to a variable of type 'B<num>'.
+  b2 = c1; // Error
+       ^" in c1 as{TypeError} self::B<core::num>;
+  b2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:63:8: Error: A value of type 'D1' can't be assigned to a variable of type 'B<num>'.
+  b2 = d1; // Error
+       ^" in d1 as{TypeError} self::B<core::num>;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:65:8: Error: A value of type 'A' can't be assigned to a variable of type 'C1'.
+  c1 = a; // Error
+       ^" in a as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:66:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C1'.
+  c1 = b1; // Error
+       ^" in b1 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:67:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C1'.
+  c1 = b2; // Error
+       ^" in b2 as{TypeError} self::C1;
+  c1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:68:8: Error: A value of type 'C2' can't be assigned to a variable of type 'C1'.
+  c1 = c2; // Error
+       ^" in c2 as{TypeError} self::C1;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:70:8: Error: A value of type 'A' can't be assigned to a variable of type 'C2'.
+  c2 = a; // Error
+       ^" in a as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:71:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'C2'.
+  c2 = b1; // Error
+       ^" in b1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:72:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'C2'.
+  c2 = b2; // Error
+       ^" in b2 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:73:8: Error: A value of type 'C1' can't be assigned to a variable of type 'C2'.
+  c2 = c1; // Error
+       ^" in c1 as{TypeError} self::C2;
+  c2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:74:8: Error: A value of type 'D1' can't be assigned to a variable of type 'C2'.
+  c2 = d1; // Error
+       ^" in d1 as{TypeError} self::C2;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:76:8: Error: A value of type 'A' can't be assigned to a variable of type 'D1'.
+  d1 = a; // Error
+       ^" in a as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:77:8: Error: A value of type 'B<String>' can't be assigned to a variable of type 'D1'.
+  d1 = b1; // Error
+       ^" in b1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:78:8: Error: A value of type 'B<num>' can't be assigned to a variable of type 'D1'.
+  d1 = b2; // Error
+       ^" in b2 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:79:8: Error: A value of type 'C1' can't be assigned to a variable of type 'D1'.
+  d1 = c1; // Error
+       ^" in c1 as{TypeError} self::D1;
+  d1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/implements.dart:80:8: Error: A value of type 'C2' can't be assigned to a variable of type 'D1'.
+  d1 = c2; // Error
+       ^" in c2 as{TypeError} self::D1;
+}
+static method method(self::A a, self::B<core::String> b1, self::B<core::num> b2, self::C1 c1, self::C2 c2, self::D1 d1) → dynamic {
+  self::expect(0.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(a));
+  self::expect("0", self::B|methodB<core::String>(b1));
+  self::expect(1.{core::num::+}(0){(core::num) → core::int}, self::B|methodB<core::num>(b2));
+  self::expect(2.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c1));
+  self::expect(2.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(c1));
+  self::expect(3.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(c2));
+  self::expect(3, self::B|methodB<core::int>(c2));
+  self::expect(3.{core::num::+}(87){(core::num) → core::int}, self::C2|methodC2(c2));
+  self::expect(4.{core::num::+}(5){(core::num) → core::int}, self::A|methodA(d1));
+  self::expect(4.{core::num::+}(42){(core::num) → core::int}, self::C1|methodC1(d1));
+  self::expect(4.{core::num::+}(123){(core::num) → core::int}, self::D1|methodD1(d1));
+  a = a;
+  a = c1;
+  a = c2;
+  a = d1;
+  b1 = b1;
+  b2 = b2;
+  b2 = c2;
+  c1 = c1;
+  c1 = d1;
+  c2 = c2;
+  d1 = d1;
+}
+static method main() → dynamic {
+  self::method(self::A|(0), self::B|<core::String>("0"), self::B|<core::num>(1), self::C1|(2), self::C2|(3), self::D1|(4));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Expected ${expected}, actual ${actual}";
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:84:12 -> IntConstant(5)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:88:12 -> IntConstant(1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:90:12 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:91:12 -> IntConstant(44)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:93:12 -> IntConstant(8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:95:12 -> IntConstant(90)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:97:12 -> IntConstant(9)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:98:12 -> IntConstant(46)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///implements.dart:99:12 -> IntConstant(127)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:10 -> IntConstant(0)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:16 -> StringConstant("0")
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:32 -> IntConstant(1)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:43 -> IntConstant(2)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:50 -> IntConstant(3)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///implements.dart:120:57 -> IntConstant(4)
+Extra constant evaluation: evaluated: 153, effectively constant: 15
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart
new file mode 100644
index 0000000..9310e72
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart
@@ -0,0 +1,25 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class1._(int field) {
+  Class1(this.field);
+}
+
+extension type Class2._(int field) {
+  Class2(int field) : this.field = field;
+}
+
+extension type Class3._(int field) {}
+
+extension type Class4._(int field) {
+  Class4(this.field, this.nonexisting); // Error
+}
+
+extension type Class5._(int field) {
+  Class5(this.field) : this.field = 42; // Error
+}
+
+extension type Class6._(int field) {
+  Class6(this.field) : this.nonexisting = 42; // Error
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect
new file mode 100644
index 0000000..5db4620
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect
@@ -0,0 +1,128 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+//   Class4(this.field, this.nonexisting); // Error
+//                           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+//   Class5(this.field) : this.field = 42; // Error
+//                                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+//   Class6(this.field) : this.nonexisting = 42; // Error
+//                             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3 {
+  lowered final self::Class3 #this = field;
+  return #this;
+}
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  return #this;
+}
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  Class4(this.field, this.nonexisting); // Error
+                          ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  return #this;
+}
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  Class5(this.field) : this.field = 42; // Error
+                                  ^";
+  return #this;
+}
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  return #this;
+}
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  Class6(this.field) : this.nonexisting = 42; // Error
+                            ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect
new file mode 100644
index 0000000..5db4620
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect
@@ -0,0 +1,128 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+//   Class4(this.field, this.nonexisting); // Error
+//                           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+//   Class5(this.field) : this.field = 42; // Error
+//                                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+//   Class6(this.field) : this.nonexisting = 42; // Error
+//                             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3 {
+  lowered final self::Class3 #this = field;
+  return #this;
+}
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  return #this;
+}
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  Class4(this.field, this.nonexisting); // Error
+                          ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  return #this;
+}
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  Class5(this.field) : this.field = 42; // Error
+                                  ^";
+  return #this;
+}
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  return #this;
+}
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  Class6(this.field) : this.nonexisting = 42; // Error
+                            ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.textual_outline.expect
new file mode 100644
index 0000000..1358bee
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+extension type Class1._(int field) {
+Class1(this.field);
+} extension type Class2._(int field) {
+Class2(int field) : this.field = field;
+} extension type Class3._(int field) {} extension type Class4._(int field) {
+Class4(this.field, this.nonexisting);
+} extension type Class5._(int field) {
+Class5(this.field) : this.field = 42;
+} extension type Class6._(int field) {
+Class6(this.field) : this.nonexisting = 42;
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect
new file mode 100644
index 0000000..5db4620
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect
@@ -0,0 +1,128 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+//   Class4(this.field, this.nonexisting); // Error
+//                           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+//   Class5(this.field) : this.field = 42; // Error
+//                                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+//   Class6(this.field) : this.nonexisting = 42; // Error
+//                             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3 {
+  lowered final self::Class3 #this = field;
+  return #this;
+}
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  return #this;
+}
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  Class4(this.field, this.nonexisting); // Error
+                          ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  return #this;
+}
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  Class5(this.field) : this.field = 42; // Error
+                                  ^";
+  return #this;
+}
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  return #this;
+}
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  Class6(this.field) : this.nonexisting = 42; // Error
+                            ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect
new file mode 100644
index 0000000..5db4620
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect
@@ -0,0 +1,128 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+//   Class4(this.field, this.nonexisting); // Error
+//                           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+//   Class5(this.field) : this.field = 42; // Error
+//                                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+//   Class6(this.field) : this.nonexisting = 42; // Error
+//                             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3 {
+  lowered final self::Class3 #this = field;
+  return #this;
+}
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  return #this;
+}
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  Class4(this.field, this.nonexisting); // Error
+                          ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  return #this;
+}
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  Class5(this.field) : this.field = 42; // Error
+                                  ^";
+  return #this;
+}
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  return #this;
+}
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  Class6(this.field) : this.nonexisting = 42; // Error
+                            ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect
new file mode 100644
index 0000000..1f6955e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect
@@ -0,0 +1,82 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1
+  ;
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1
+  ;
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2
+  ;
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2
+  ;
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3
+  ;
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4
+  ;
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4
+  ;
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5
+  ;
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5
+  ;
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6
+  ;
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6
+  ;
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect
new file mode 100644
index 0000000..5db4620
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect
@@ -0,0 +1,128 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+//   Class4(this.field, this.nonexisting); // Error
+//                           ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+//   Class5(this.field) : this.field = 42; // Error
+//                                   ^
+//
+// pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+//   Class6(this.field) : this.nonexisting = 42; // Error
+//                             ^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class1|_;
+  tearoff _ = self::Class1|_#_#tearOff;
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class2 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class2|_;
+  tearoff _ = self::Class2|_#_#tearOff;
+  constructor • = self::Class2|;
+  tearoff • = self::Class2|_#new#tearOff;
+}
+inline class Class3 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class3|_;
+  tearoff _ = self::Class3|_#_#tearOff;
+}
+inline class Class4 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class4|_;
+  tearoff _ = self::Class4|_#_#tearOff;
+  constructor • = self::Class4|;
+  tearoff • = self::Class4|_#new#tearOff;
+}
+inline class Class5 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class5|_;
+  tearoff _ = self::Class5|_#_#tearOff;
+  constructor • = self::Class5|;
+  tearoff • = self::Class5|_#new#tearOff;
+}
+inline class Class6 /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Class6|_;
+  tearoff _ = self::Class6|_#_#tearOff;
+  constructor • = self::Class6|;
+  tearoff • = self::Class6|_#new#tearOff;
+}
+static inline-class-member method Class1|_(dynamic field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1
+  return self::Class1|_(field);
+static inline-class-member method Class1|(core::int field) → self::Class1 {
+  lowered final self::Class1 #this = field;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1
+  return self::Class1|(field);
+static inline-class-member method Class2|_(dynamic field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2
+  return self::Class2|_(field);
+static inline-class-member method Class2|(core::int field) → self::Class2 {
+  lowered final self::Class2 #this = field;
+  return #this;
+}
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2
+  return self::Class2|(field);
+static inline-class-member method Class3|_(dynamic field) → self::Class3 {
+  lowered final self::Class3 #this = field;
+  return #this;
+}
+static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3
+  return self::Class3|_(field);
+static inline-class-member method Class4|_(dynamic field) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  return #this;
+}
+static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4
+  return self::Class4|_(field);
+static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 {
+  lowered final self::Class4 #this = field;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  Class4(this.field, this.nonexisting); // Error
+                          ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4
+  return self::Class4|(field, nonexisting);
+static inline-class-member method Class5|_(dynamic field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  return #this;
+}
+static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5
+  return self::Class5|_(field);
+static inline-class-member method Class5|(core::int field) → self::Class5 {
+  lowered final self::Class5 #this = field;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  Class5(this.field) : this.field = 42; // Error
+                                  ^";
+  return #this;
+}
+static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5
+  return self::Class5|(field);
+static inline-class-member method Class6|_(dynamic field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  return #this;
+}
+static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6
+  return self::Class6|_(field);
+static inline-class-member method Class6|(core::int field) → self::Class6 {
+  lowered final self::Class6 #this = field;
+  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  Class6(this.field) : this.nonexisting = 42; // Error
+                            ^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Class6|_#new#tearOff(core::int field) → self::Class6
+  return self::Class6|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart
new file mode 100644
index 0000000..12d49ac6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart
@@ -0,0 +1,9 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+mixin Mixin {}
+extension type Class1(int it) {}
+extension type Class3<T>(List<T> it) {}
+
+method(Class1 c1, Class3<int> c3) {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect
new file mode 100644
index 0000000..b5a7c83
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> {
+  lowered final self::Class3<self::Class3|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect
new file mode 100644
index 0000000..b5a7c83
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> {
+  lowered final self::Class3<self::Class3|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.textual_outline.expect
new file mode 100644
index 0000000..7681f68
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+mixin Mixin {}
+extension type Class1(int it) {} extension type Class3<T>(List<T> it) {}
+method(Class1 c1, Class3<int> c3) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect
new file mode 100644
index 0000000..b5a7c83
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> {
+  lowered final self::Class3<self::Class3|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect
new file mode 100644
index 0000000..b5a7c83
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> {
+  lowered final self::Class3<self::Class3|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect
new file mode 100644
index 0000000..7f1e1ae
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1
+  ;
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%>
+  ;
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect
new file mode 100644
index 0000000..b5a7c83
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+}
+inline class Class1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::Class1|;
+  tearoff • = self::Class1|_#new#tearOff;
+}
+inline class Class3<T extends core::Object? = dynamic> /* declaredRepresentationType = core::List<T%> */ {
+  constructor • = self::Class3|;
+  tearoff • = self::Class3|_#new#tearOff;
+}
+static inline-class-member method Class1|(dynamic it) → self::Class1 {
+  lowered final self::Class1 #this = it;
+  return #this;
+}
+static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1
+  return self::Class1|(it);
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> {
+  lowered final self::Class3<self::Class3|::T%> #this = it;
+  return #this;
+}
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%>
+  return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
+static method method(self::Class1 c1, self::Class3<core::int> c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart
new file mode 100644
index 0000000..13b42ea
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart
@@ -0,0 +1,11 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type I<X, Y>(X value) {}
+
+void f(I<int, String> i) {}
+
+void main() {
+  f(I(2));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect
new file mode 100644
index 0000000..35ef719
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> {
+  lowered final self::I<self::I|::X%, self::I|::Y%> #this = value;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void {}
+static method main() → void {
+  self::f(self::I|<core::int, core::String>(2));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect
new file mode 100644
index 0000000..dd2c6ef
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> {
+  lowered final self::I<self::I|::X%, self::I|::Y%> #this = value;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void {}
+static method main() → void {
+  self::f(self::I|<core::int, core::String>(2));
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue51146.dart:10:5 -> IntConstant(2)
+Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.textual_outline.expect
new file mode 100644
index 0000000..6432297
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+extension type I<X, Y>(X value) {}
+void f(I<int, String> i) {}
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect
new file mode 100644
index 0000000..35ef719
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> {
+  lowered final self::I<self::I|::X%, self::I|::Y%> #this = value;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void {}
+static method main() → void {
+  self::f(self::I|<core::int, core::String>(2));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect
new file mode 100644
index 0000000..35ef719
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> {
+  lowered final self::I<self::I|::X%, self::I|::Y%> #this = value;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void {}
+static method main() → void {
+  self::f(self::I|<core::int, core::String>(2));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect
new file mode 100644
index 0000000..25ab585
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%>
+  ;
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect
new file mode 100644
index 0000000..dd2c6ef
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> /* declaredRepresentationType = X% */ {
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> {
+  lowered final self::I<self::I|::X%, self::I|::Y%> #this = value;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>
+  return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
+static method f(self::I<core::int, core::String> i) → void {}
+static method main() → void {
+  self::f(self::I|<core::int, core::String>(2));
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue51146.dart:10:5 -> IntConstant(2)
+Extra constant evaluation: evaluated: 6, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart
new file mode 100644
index 0000000..4879c58
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart
@@ -0,0 +1,31 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type I._(int i) {
+  factory I() => 0 as I;
+}
+
+extension type J._(int i) {
+  factory J(int i) => J._(i);
+}
+
+extension type K<T>._(T i) {
+  factory K(T i) => K._(i);
+}
+
+main() {
+  expect(0, I());
+  expect(0, (I.new)());
+  expect(42, J(42));
+  expect(87, J(87));
+  expect(123, (J.new)(123));
+  expect("foo", K("foo"));
+  expect("bar", K<String>("bar"));
+  expect("baz", (K.new)("baz"));
+  expect("boz", (K<String>.new)("boz"));
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect
new file mode 100644
index 0000000..729c929
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I {
+  lowered final self::I #this = i;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  return 0 as self::I;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J {
+  lowered final self::J #this = i;
+  return #this;
+}
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> {
+  lowered final self::K<self::K|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  return self::K|_<self::K|::T%>(i);
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(0, self::I|());
+  self::expect(0, #C1(){() → self::I});
+  self::expect(42, self::J|(42));
+  self::expect(87, self::J|(87));
+  self::expect(123, #C2(123){(core::int) → self::J});
+  self::expect("foo", self::K|<core::String>("foo"));
+  self::expect("bar", self::K|<core::String>("bar"));
+  self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>});
+  self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::I|_#new#tearOff
+  #C2 = static-tearoff self::J|_#new#tearOff
+  #C3 = static-tearoff self::K|_#new#tearOff
+  #C4 = instantiation #C3 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect
new file mode 100644
index 0000000..729c929
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I {
+  lowered final self::I #this = i;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  return 0 as self::I;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J {
+  lowered final self::J #this = i;
+  return #this;
+}
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> {
+  lowered final self::K<self::K|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  return self::K|_<self::K|::T%>(i);
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(0, self::I|());
+  self::expect(0, #C1(){() → self::I});
+  self::expect(42, self::J|(42));
+  self::expect(87, self::J|(87));
+  self::expect(123, #C2(123){(core::int) → self::J});
+  self::expect("foo", self::K|<core::String>("foo"));
+  self::expect("bar", self::K|<core::String>("bar"));
+  self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>});
+  self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::I|_#new#tearOff
+  #C2 = static-tearoff self::J|_#new#tearOff
+  #C3 = static-tearoff self::K|_#new#tearOff
+  #C4 = instantiation #C3 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.textual_outline.expect
new file mode 100644
index 0000000..4095218
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension type I._(int i) {
+factory I() => 0 as I;
+} extension type J._(int i) {
+factory J(int i) => J._(i);
+} extension type K<T>._(T i) {
+factory K(T i) => K._(i);
+}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect
new file mode 100644
index 0000000..619aeae
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I {
+  lowered final self::I #this = i;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  return 0 as self::I;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J {
+  lowered final self::J #this = i;
+  return #this;
+}
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> {
+  lowered final self::K<self::K|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  return self::K|_<self::K|::T%>(i);
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(0, self::I|());
+  self::expect(0, #C1(){() → self::I});
+  self::expect(42, self::J|(42));
+  self::expect(87, self::J|(87));
+  self::expect(123, #C2(123){(core::int) → self::J});
+  self::expect("foo", self::K|<core::String>("foo"));
+  self::expect("bar", self::K|<core::String>("bar"));
+  self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>});
+  self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::I|_#new#tearOff
+  #C2 = static-tearoff self::J|_#new#tearOff
+  #C3 = static-tearoff self::K|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect
new file mode 100644
index 0000000..619aeae
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I {
+  lowered final self::I #this = i;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  return 0 as self::I;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J {
+  lowered final self::J #this = i;
+  return #this;
+}
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> {
+  lowered final self::K<self::K|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  return self::K|_<self::K|::T%>(i);
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(0, self::I|());
+  self::expect(0, #C1(){() → self::I});
+  self::expect(42, self::J|(42));
+  self::expect(87, self::J|(87));
+  self::expect(123, #C2(123){(core::int) → self::J});
+  self::expect("foo", self::K|<core::String>("foo"));
+  self::expect("bar", self::K|<core::String>("bar"));
+  self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>});
+  self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::I|_#new#tearOff
+  #C2 = static-tearoff self::J|_#new#tearOff
+  #C3 = static-tearoff self::K|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect
new file mode 100644
index 0000000..407653b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect
@@ -0,0 +1,50 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I
+  ;
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  ;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J
+  ;
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  ;
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%>
+  ;
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  ;
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect
new file mode 100644
index 0000000..619aeae
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  constructor _ = self::I|_;
+  tearoff _ = self::I|_#_#tearOff;
+  static factory • = self::I|;
+  static tearoff • = self::I|_#new#tearOff;
+}
+inline class J /* declaredRepresentationType = core::int */ {
+  constructor _ = self::J|_;
+  tearoff _ = self::J|_#_#tearOff;
+  static factory • = self::J|;
+  static tearoff • = self::J|_#new#tearOff;
+}
+inline class K<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  constructor _ = self::K|_;
+  tearoff _ = self::K|_#_#tearOff;
+  static factory • = self::K|;
+  static tearoff • = self::K|_#new#tearOff;
+}
+static inline-class-member method I|_(dynamic i) → self::I {
+  lowered final self::I #this = i;
+  return #this;
+}
+static inline-class-member method I|_#_#tearOff(dynamic i) → self::I
+  return self::I|_(i);
+static inline-class-member method I|() → self::I
+  return 0 as self::I;
+static inline-class-member method I|_#new#tearOff() → self::I
+  return self::I|();
+static inline-class-member method J|_(dynamic i) → self::J {
+  lowered final self::J #this = i;
+  return #this;
+}
+static inline-class-member method J|_#_#tearOff(dynamic i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|(core::int i) → self::J
+  return self::J|_(i);
+static inline-class-member method J|_#new#tearOff(core::int i) → self::J
+  return self::J|(i);
+static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> {
+  lowered final self::K<self::K|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%>
+  return self::K|_<self::K|_#_#tearOff::T%>(i);
+static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%>
+  return self::K|_<self::K|::T%>(i);
+static inline-class-member method K|_#new#tearOff<T extends core::Object? = dynamic>(self::K|_#new#tearOff::T% i) → self::K<self::K|_#new#tearOff::T%>
+  return self::K|<self::K|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(0, self::I|());
+  self::expect(0, #C1(){() → self::I});
+  self::expect(42, self::J|(42));
+  self::expect(87, self::J|(87));
+  self::expect(123, #C2(123){(core::int) → self::J});
+  self::expect("foo", self::K|<core::String>("foo"));
+  self::expect("bar", self::K|<core::String>("bar"));
+  self::expect("baz", #C3<core::String>("baz"){(core::String) → self::K<core::String>});
+  self::expect("boz", #C4("boz"){(core::String) → self::K<core::String>});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = static-tearoff self::I|_#new#tearOff
+  #C2 = static-tearoff self::J|_#new#tearOff
+  #C3 = static-tearoff self::K|_#new#tearOff
+  #C4 = instantiation #C3 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart
new file mode 100644
index 0000000..4038ba1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart
@@ -0,0 +1,8 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type I(int _i) {
+  int get i => 0;
+  set i(int val) {}
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect
new file mode 100644
index 0000000..aa612b5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I {
+  lowered final self::I #this = _i;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  return 0;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect
new file mode 100644
index 0000000..aa612b5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I {
+  lowered final self::I #this = _i;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  return 0;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.textual_outline.expect
new file mode 100644
index 0000000..d395b35
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+extension type I(int _i) {
+int get i => 0;
+set i(int val) {}
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect
new file mode 100644
index 0000000..aa612b5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I {
+  lowered final self::I #this = _i;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  return 0;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect
new file mode 100644
index 0000000..aa612b5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I {
+  lowered final self::I #this = _i;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  return 0;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect
new file mode 100644
index 0000000..bf2914e
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I
+  ;
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  ;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect
new file mode 100644
index 0000000..aa612b5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class I /* declaredRepresentationType = core::int */ {
+  get i = self::I|get#i;
+  set i = self::I|set#i;
+  constructor • = self::I|;
+  tearoff • = self::I|_#new#tearOff;
+}
+static inline-class-member method I|(dynamic _i) → self::I {
+  lowered final self::I #this = _i;
+  return #this;
+}
+static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I
+  return self::I|(_i);
+static inline-class-member method I|get#i(lowered final self::I #this) → core::int
+  return 0;
+static inline-class-member method I|set#i(lowered final self::I #this, core::int val) → void {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart
new file mode 100644
index 0000000..1701f4f
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type JSAny(Object value) {}
+
+extension type JSObject(Object value) implements JSAny {}
+
+extension type JSArray(List<JSAny?> value) implements JSObject {}
+
+extension type JSExportedDartObject(Object value) implements JSObject {}
+
+extension type JSNumber(double value) implements JSAny {}
+
+extension ObjectToJSExportedDartObject on Object {
+  JSExportedDartObject get toJS => JSExportedDartObject(this);
+}
+
+extension ListToJSArray on List<JSAny?> {
+  JSArray get toJS => JSArray(this);
+}
+
+extension DoubleToJSNumber on double {
+  JSNumber get toJS => JSNumber(this);
+}
+
+void main() {
+  JSArray arr = [1.0.toJS, 'foo'.toJS].toJS;
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect
new file mode 100644
index 0000000..c7b2715
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny {
+  lowered final self::JSAny #this = value;
+  return #this;
+}
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject {
+  lowered final self::JSObject #this = value;
+  return #this;
+}
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray {
+  lowered final self::JSArray #this = value;
+  return #this;
+}
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject {
+  lowered final self::JSExportedDartObject #this = value;
+  return #this;
+}
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber {
+  lowered final self::JSNumber #this = value;
+  return #this;
+}
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(#this);
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  return self::JSArray|(#this);
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  return self::JSNumber|(#this);
+static method main() → void {
+  self::JSArray arr = self::ListToJSArray|get#toJS(<self::JSAny>[self::DoubleToJSNumber|get#toJS(1.0), self::ObjectToJSExportedDartObject|get#toJS("foo")]);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect
new file mode 100644
index 0000000..7d72395
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny {
+  lowered final self::JSAny #this = value;
+  return #this;
+}
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject {
+  lowered final self::JSObject #this = value;
+  return #this;
+}
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray {
+  lowered final self::JSArray #this = value;
+  return #this;
+}
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject {
+  lowered final self::JSExportedDartObject #this = value;
+  return #this;
+}
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber {
+  lowered final self::JSNumber #this = value;
+  return #this;
+}
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(#this);
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  return self::JSArray|(#this);
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  return self::JSNumber|(#this);
+static method main() → void {
+  self::JSArray arr = self::ListToJSArray|get#toJS(core::_GrowableList::_literal2<self::JSAny>(self::DoubleToJSNumber|get#toJS(1.0), self::ObjectToJSExportedDartObject|get#toJS("foo")));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.textual_outline.expect
new file mode 100644
index 0000000..3ba050b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+extension type JSAny(Object value) {} extension type JSObject(Object value) implements JSAny {} extension type JSArray(List<JSAny?> value) implements JSObject {} extension type JSExportedDartObject(Object value) implements JSObject {} extension type JSNumber(double value) implements JSAny {}
+extension ObjectToJSExportedDartObject on Object {
+  JSExportedDartObject get toJS => JSExportedDartObject(this);
+}
+extension ListToJSArray on List<JSAny?> {
+  JSArray get toJS => JSArray(this);
+}
+extension DoubleToJSNumber on double {
+  JSNumber get toJS => JSNumber(this);
+}
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect
new file mode 100644
index 0000000..c7b2715
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny {
+  lowered final self::JSAny #this = value;
+  return #this;
+}
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject {
+  lowered final self::JSObject #this = value;
+  return #this;
+}
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray {
+  lowered final self::JSArray #this = value;
+  return #this;
+}
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject {
+  lowered final self::JSExportedDartObject #this = value;
+  return #this;
+}
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber {
+  lowered final self::JSNumber #this = value;
+  return #this;
+}
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(#this);
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  return self::JSArray|(#this);
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  return self::JSNumber|(#this);
+static method main() → void {
+  self::JSArray arr = self::ListToJSArray|get#toJS(<self::JSAny>[self::DoubleToJSNumber|get#toJS(1.0), self::ObjectToJSExportedDartObject|get#toJS("foo")]);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect
new file mode 100644
index 0000000..c7b2715
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny {
+  lowered final self::JSAny #this = value;
+  return #this;
+}
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject {
+  lowered final self::JSObject #this = value;
+  return #this;
+}
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray {
+  lowered final self::JSArray #this = value;
+  return #this;
+}
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject {
+  lowered final self::JSExportedDartObject #this = value;
+  return #this;
+}
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber {
+  lowered final self::JSNumber #this = value;
+  return #this;
+}
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(#this);
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  return self::JSArray|(#this);
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  return self::JSNumber|(#this);
+static method main() → void {
+  self::JSArray arr = self::ListToJSArray|get#toJS(<self::JSAny>[self::DoubleToJSNumber|get#toJS(1.0), self::ObjectToJSExportedDartObject|get#toJS("foo")]);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect
new file mode 100644
index 0000000..8a6cdcb
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect
@@ -0,0 +1,61 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny
+  ;
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject
+  ;
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray
+  ;
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject
+  ;
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber
+  ;
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  ;
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  ;
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect
new file mode 100644
index 0000000..7d72395
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect
@@ -0,0 +1,72 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension ObjectToJSExportedDartObject on core::Object {
+  get toJS = self::ObjectToJSExportedDartObject|get#toJS;
+}
+extension ListToJSArray on core::List<self::JSAny?> {
+  get toJS = self::ListToJSArray|get#toJS;
+}
+extension DoubleToJSNumber on core::double {
+  get toJS = self::DoubleToJSNumber|get#toJS;
+}
+inline class JSAny /* declaredRepresentationType = core::Object */ {
+  constructor • = self::JSAny|;
+  tearoff • = self::JSAny|_#new#tearOff;
+}
+inline class JSObject /* declaredRepresentationType = core::Object */ implements self::JSAny {
+  constructor • = self::JSObject|;
+  tearoff • = self::JSObject|_#new#tearOff;
+}
+inline class JSArray /* declaredRepresentationType = core::List<self::JSAny?> */ implements self::JSObject {
+  constructor • = self::JSArray|;
+  tearoff • = self::JSArray|_#new#tearOff;
+}
+inline class JSExportedDartObject /* declaredRepresentationType = core::Object */ implements self::JSObject {
+  constructor • = self::JSExportedDartObject|;
+  tearoff • = self::JSExportedDartObject|_#new#tearOff;
+}
+inline class JSNumber /* declaredRepresentationType = core::double */ implements self::JSAny {
+  constructor • = self::JSNumber|;
+  tearoff • = self::JSNumber|_#new#tearOff;
+}
+static inline-class-member method JSAny|(dynamic value) → self::JSAny {
+  lowered final self::JSAny #this = value;
+  return #this;
+}
+static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny
+  return self::JSAny|(value);
+static inline-class-member method JSObject|(dynamic value) → self::JSObject {
+  lowered final self::JSObject #this = value;
+  return #this;
+}
+static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject
+  return self::JSObject|(value);
+static inline-class-member method JSArray|(dynamic value) → self::JSArray {
+  lowered final self::JSArray #this = value;
+  return #this;
+}
+static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray
+  return self::JSArray|(value);
+static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject {
+  lowered final self::JSExportedDartObject #this = value;
+  return #this;
+}
+static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(value);
+static inline-class-member method JSNumber|(dynamic value) → self::JSNumber {
+  lowered final self::JSNumber #this = value;
+  return #this;
+}
+static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber
+  return self::JSNumber|(value);
+static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject
+  return self::JSExportedDartObject|(#this);
+static extension-member method ListToJSArray|get#toJS(lowered final core::List<self::JSAny?> #this) → self::JSArray
+  return self::JSArray|(#this);
+static extension-member method DoubleToJSNumber|get#toJS(lowered final core::double #this) → self::JSNumber
+  return self::JSNumber|(#this);
+static method main() → void {
+  self::JSArray arr = self::ListToJSArray|get#toJS(core::_GrowableList::_literal2<self::JSAny>(self::DoubleToJSNumber|get#toJS(1.0), self::ObjectToJSExportedDartObject|get#toJS("foo")));
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart
new file mode 100644
index 0000000..6a73905
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart
@@ -0,0 +1,32 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Foo._(int i) {
+  Foo(int i) : this._(i + 2);
+
+  Foo.redirectNamed1(int a, int b) : this.named(a, subtract: b);
+  Foo.redirectNamed2(int a, int b) : this.named(subtract: b, a);
+  Foo.named(int value, {required int subtract}) : i = value - subtract;
+
+  Foo.erroneous() : this.unresolved(); // Error
+}
+
+extension type Bar<T>._(this.i) {
+  Bar(T i) : this._(i);
+}
+
+main() {
+  expect(44, Foo(42).i);
+  expect(42, Foo._(42).i);
+  expect(3, Foo.redirectNamed1(5, 2).i);
+  expect(5, Foo.redirectNamed2(7, 2).i);
+  expect(5, Bar(5).i);
+  expect("foo", Bar("foo").i);
+  expect(5, Bar._(5).i);
+  expect("foo", Bar._("foo").i);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect
new file mode 100644
index 0000000..85c3341
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect
@@ -0,0 +1,113 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+//   Foo.erroneous() : this.unresolved(); // Error
+//                          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:3: Error: Final field 'i' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   Foo.erroneous() : this.unresolved(); // Error
+//   ^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:5:26: Context: 'i' is defined here.
+// extension type Foo._(int i) {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo {
+  lowered final self::Foo #this = i;
+  return #this;
+}
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|_(i.{core::num::+}(2){(core::num) → core::int});
+  return #this;
+}
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|named(a, subtract: b);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  final core::int #t1 = b;
+  #this = self::Foo|named(a, subtract: #t1);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = #C1}) → self::Foo {
+  lowered final self::Foo #this = value.{core::num::-}(subtract){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo {
+  lowered final self::Foo #this;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  Foo.erroneous() : this.unresolved(); // Error
+                         ^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%> {
+  lowered final self::Bar<self::Bar|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%> {
+  lowered final self::Bar<self::Bar|::T%> #this;
+  #this = self::Bar|_<self::Bar|::T%>(i);
+  return #this;
+}
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(44, self::Foo|(42) as{Unchecked} core::int);
+  self::expect(42, self::Foo|_(42) as{Unchecked} core::int);
+  self::expect(3, self::Foo|redirectNamed1(5, 2) as{Unchecked} core::int);
+  self::expect(5, self::Foo|redirectNamed2(7, 2) as{Unchecked} core::int);
+  self::expect(5, self::Bar|<core::int>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|<core::String>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|_<dynamic>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|_<dynamic>("foo") as{Unchecked} dynamic);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect
new file mode 100644
index 0000000..51e99cc
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect
@@ -0,0 +1,119 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+//   Foo.erroneous() : this.unresolved(); // Error
+//                          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:3: Error: Final field 'i' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   Foo.erroneous() : this.unresolved(); // Error
+//   ^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:5:26: Context: 'i' is defined here.
+// extension type Foo._(int i) {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo {
+  lowered final self::Foo #this = i;
+  return #this;
+}
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|_(i.{core::num::+}(2){(core::num) → core::int});
+  return #this;
+}
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|named(a, subtract: b);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  final core::int #t1 = b;
+  #this = self::Foo|named(a, subtract: #t1);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = #C1}) → self::Foo {
+  lowered final self::Foo #this = value.{core::num::-}(subtract){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo {
+  lowered final self::Foo #this;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  Foo.erroneous() : this.unresolved(); // Error
+                         ^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%> {
+  lowered final self::Bar<self::Bar|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%> {
+  lowered final self::Bar<self::Bar|::T%> #this;
+  #this = self::Bar|_<self::Bar|::T%>(i);
+  return #this;
+}
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(44, self::Foo|(42) as{Unchecked} core::int);
+  self::expect(42, self::Foo|_(42) as{Unchecked} core::int);
+  self::expect(3, self::Foo|redirectNamed1(5, 2) as{Unchecked} core::int);
+  self::expect(5, self::Foo|redirectNamed2(7, 2) as{Unchecked} core::int);
+  self::expect(5, self::Bar|<core::int>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|<core::String>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|_<dynamic>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|_<dynamic>("foo") as{Unchecked} dynamic);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:21:24 -> IntConstant(42)
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:26:22 -> IntConstant(5)
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:27:30 -> StringConstant("foo")
+Extra constant evaluation: evaluated: 76, effectively constant: 3
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.textual_outline.expect
new file mode 100644
index 0000000..7ac98a7
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+extension type Foo._(int i) {
+Foo(int i) : this._(i + 2);
+Foo.redirectNamed1(int a, int b) : this.named(a, subtract: b);
+Foo.redirectNamed2(int a, int b) : this.named(subtract: b, a);
+Foo.named(int value, {required int subtract}) : i = value - subtract;
+Foo.erroneous() : this.unresolved();
+} extension type Bar<T>._(this.i) {
+Bar(T i) : this._(i);
+}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect
new file mode 100644
index 0000000..85c3341
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect
@@ -0,0 +1,113 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+//   Foo.erroneous() : this.unresolved(); // Error
+//                          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:3: Error: Final field 'i' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   Foo.erroneous() : this.unresolved(); // Error
+//   ^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:5:26: Context: 'i' is defined here.
+// extension type Foo._(int i) {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo {
+  lowered final self::Foo #this = i;
+  return #this;
+}
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|_(i.{core::num::+}(2){(core::num) → core::int});
+  return #this;
+}
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|named(a, subtract: b);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  final core::int #t1 = b;
+  #this = self::Foo|named(a, subtract: #t1);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = #C1}) → self::Foo {
+  lowered final self::Foo #this = value.{core::num::-}(subtract){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo {
+  lowered final self::Foo #this;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  Foo.erroneous() : this.unresolved(); // Error
+                         ^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%> {
+  lowered final self::Bar<self::Bar|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%> {
+  lowered final self::Bar<self::Bar|::T%> #this;
+  #this = self::Bar|_<self::Bar|::T%>(i);
+  return #this;
+}
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(44, self::Foo|(42) as{Unchecked} core::int);
+  self::expect(42, self::Foo|_(42) as{Unchecked} core::int);
+  self::expect(3, self::Foo|redirectNamed1(5, 2) as{Unchecked} core::int);
+  self::expect(5, self::Foo|redirectNamed2(7, 2) as{Unchecked} core::int);
+  self::expect(5, self::Bar|<core::int>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|<core::String>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|_<dynamic>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|_<dynamic>("foo") as{Unchecked} dynamic);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect
new file mode 100644
index 0000000..85c3341
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect
@@ -0,0 +1,113 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+//   Foo.erroneous() : this.unresolved(); // Error
+//                          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:3: Error: Final field 'i' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   Foo.erroneous() : this.unresolved(); // Error
+//   ^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:5:26: Context: 'i' is defined here.
+// extension type Foo._(int i) {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo {
+  lowered final self::Foo #this = i;
+  return #this;
+}
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|_(i.{core::num::+}(2){(core::num) → core::int});
+  return #this;
+}
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|named(a, subtract: b);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  final core::int #t1 = b;
+  #this = self::Foo|named(a, subtract: #t1);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = #C1}) → self::Foo {
+  lowered final self::Foo #this = value.{core::num::-}(subtract){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo {
+  lowered final self::Foo #this;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  Foo.erroneous() : this.unresolved(); // Error
+                         ^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%> {
+  lowered final self::Bar<self::Bar|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%> {
+  lowered final self::Bar<self::Bar|::T%> #this;
+  #this = self::Bar|_<self::Bar|::T%>(i);
+  return #this;
+}
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(44, self::Foo|(42) as{Unchecked} core::int);
+  self::expect(42, self::Foo|_(42) as{Unchecked} core::int);
+  self::expect(3, self::Foo|redirectNamed1(5, 2) as{Unchecked} core::int);
+  self::expect(5, self::Foo|redirectNamed2(7, 2) as{Unchecked} core::int);
+  self::expect(5, self::Bar|<core::int>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|<core::String>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|_<dynamic>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|_<dynamic>("foo") as{Unchecked} dynamic);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect
new file mode 100644
index 0000000..89e9290
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo
+  ;
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo
+  ;
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo
+  ;
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo
+  ;
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = null}) → self::Foo
+  ;
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo
+  ;
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%>
+  ;
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%>
+  ;
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect
new file mode 100644
index 0000000..51e99cc
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect
@@ -0,0 +1,119 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+//   Foo.erroneous() : this.unresolved(); // Error
+//                          ^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:3: Error: Final field 'i' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//   Foo.erroneous() : this.unresolved(); // Error
+//   ^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:5:26: Context: 'i' is defined here.
+// extension type Foo._(int i) {
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Foo /* declaredRepresentationType = core::int */ {
+  constructor _ = self::Foo|_;
+  tearoff _ = self::Foo|_#_#tearOff;
+  constructor • = self::Foo|;
+  tearoff • = self::Foo|_#new#tearOff;
+  constructor redirectNamed1 = self::Foo|redirectNamed1;
+  tearoff redirectNamed1 = self::Foo|_#redirectNamed1#tearOff;
+  constructor redirectNamed2 = self::Foo|redirectNamed2;
+  tearoff redirectNamed2 = self::Foo|_#redirectNamed2#tearOff;
+  constructor named = self::Foo|named;
+  tearoff named = self::Foo|_#named#tearOff;
+  constructor erroneous = self::Foo|erroneous;
+  tearoff erroneous = self::Foo|_#erroneous#tearOff;
+}
+inline class Bar<T extends core::Object? = dynamic> /* declaredRepresentationType = dynamic */ {
+  constructor _ = self::Bar|_;
+  tearoff _ = self::Bar|_#_#tearOff;
+  constructor • = self::Bar|;
+  tearoff • = self::Bar|_#new#tearOff;
+}
+static inline-class-member method Foo|_(dynamic i) → self::Foo {
+  lowered final self::Foo #this = i;
+  return #this;
+}
+static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo
+  return self::Foo|_(i);
+static inline-class-member method Foo|(core::int i) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|_(i.{core::num::+}(2){(core::num) → core::int});
+  return #this;
+}
+static inline-class-member method Foo|_#new#tearOff(core::int i) → self::Foo
+  return self::Foo|(i);
+static inline-class-member method Foo|redirectNamed1(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  #this = self::Foo|named(a, subtract: b);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed1#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed1(a, b);
+static inline-class-member method Foo|redirectNamed2(core::int a, core::int b) → self::Foo {
+  lowered final self::Foo #this;
+  final core::int #t1 = b;
+  #this = self::Foo|named(a, subtract: #t1);
+  return #this;
+}
+static inline-class-member method Foo|_#redirectNamed2#tearOff(core::int a, core::int b) → self::Foo
+  return self::Foo|redirectNamed2(a, b);
+static inline-class-member method Foo|named(core::int value, {required core::int subtract = #C1}) → self::Foo {
+  lowered final self::Foo #this = value.{core::num::-}(subtract){(core::num) → core::int};
+  return #this;
+}
+static inline-class-member method Foo|_#named#tearOff(core::int value, {required core::int subtract}) → self::Foo
+  return self::Foo|named(value, subtract: subtract);
+static inline-class-member method Foo|erroneous() → self::Foo {
+  lowered final self::Foo #this;
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  Foo.erroneous() : this.unresolved(); // Error
+                         ^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Foo|_#erroneous#tearOff() → self::Foo
+  return self::Foo|erroneous();
+static inline-class-member method Bar|_<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_::T%> {
+  lowered final self::Bar<self::Bar|_::T%> #this = i;
+  return #this;
+}
+static inline-class-member method Bar|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::Bar<self::Bar|_#_#tearOff::T%>
+  return self::Bar|_<self::Bar|_#_#tearOff::T%>(i);
+static inline-class-member method Bar|<T extends core::Object? = dynamic>(self::Bar|::T% i) → self::Bar<self::Bar|::T%> {
+  lowered final self::Bar<self::Bar|::T%> #this;
+  #this = self::Bar|_<self::Bar|::T%>(i);
+  return #this;
+}
+static inline-class-member method Bar|_#new#tearOff<T extends core::Object? = dynamic>(self::Bar|_#new#tearOff::T% i) → self::Bar<self::Bar|_#new#tearOff::T%>
+  return self::Bar|<self::Bar|_#new#tearOff::T%>(i);
+static method main() → dynamic {
+  self::expect(44, self::Foo|(42) as{Unchecked} core::int);
+  self::expect(42, self::Foo|_(42) as{Unchecked} core::int);
+  self::expect(3, self::Foo|redirectNamed1(5, 2) as{Unchecked} core::int);
+  self::expect(5, self::Foo|redirectNamed2(7, 2) as{Unchecked} core::int);
+  self::expect(5, self::Bar|<core::int>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|<core::String>("foo") as{Unchecked} dynamic);
+  self::expect(5, self::Bar|_<dynamic>(5) as{Unchecked} dynamic);
+  self::expect("foo", self::Bar|_<dynamic>("foo") as{Unchecked} dynamic);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = null
+}
+
+Extra constant evaluation status:
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:21:24 -> IntConstant(42)
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:26:22 -> IntConstant(5)
+Evaluated: AsExpression @ org-dartlang-testcase:///issue52119.dart:27:30 -> StringConstant("foo")
+Extra constant evaluation: evaluated: 76, effectively constant: 3
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart
new file mode 100644
index 0000000..a73a28c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart
@@ -0,0 +1,13 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type X._(int obj) {
+  X() : obj = 0;
+  X.named() : obj = 0;
+}
+
+void main() {
+  print((X.new)().obj);
+  print((X.named)().obj);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect
new file mode 100644
index 0000000..3231a70
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X {
+  lowered final self::X #this = obj;
+  return #this;
+}
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void {
+  core::print(#C1(){() → self::X} as{Unchecked} core::int);
+  core::print(#C2(){() → self::X} as{Unchecked} core::int);
+}
+
+constants  {
+  #C1 = static-tearoff self::X|_#new#tearOff
+  #C2 = static-tearoff self::X|_#named#tearOff
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect
new file mode 100644
index 0000000..3231a70
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X {
+  lowered final self::X #this = obj;
+  return #this;
+}
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void {
+  core::print(#C1(){() → self::X} as{Unchecked} core::int);
+  core::print(#C2(){() → self::X} as{Unchecked} core::int);
+}
+
+constants  {
+  #C1 = static-tearoff self::X|_#new#tearOff
+  #C2 = static-tearoff self::X|_#named#tearOff
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.textual_outline.expect
new file mode 100644
index 0000000..a2f87f3
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+extension type X._(int obj) {
+X() : obj = 0;
+X.named() : obj = 0;
+}
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect
new file mode 100644
index 0000000..3231a70
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X {
+  lowered final self::X #this = obj;
+  return #this;
+}
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void {
+  core::print(#C1(){() → self::X} as{Unchecked} core::int);
+  core::print(#C2(){() → self::X} as{Unchecked} core::int);
+}
+
+constants  {
+  #C1 = static-tearoff self::X|_#new#tearOff
+  #C2 = static-tearoff self::X|_#named#tearOff
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect
new file mode 100644
index 0000000..3231a70
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X {
+  lowered final self::X #this = obj;
+  return #this;
+}
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void {
+  core::print(#C1(){() → self::X} as{Unchecked} core::int);
+  core::print(#C2(){() → self::X} as{Unchecked} core::int);
+}
+
+constants  {
+  #C1 = static-tearoff self::X|_#new#tearOff
+  #C2 = static-tearoff self::X|_#named#tearOff
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect
new file mode 100644
index 0000000..5c4e45a
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X
+  ;
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X
+  ;
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X
+  ;
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect
new file mode 100644
index 0000000..3231a70
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class X /* declaredRepresentationType = core::int */ {
+  constructor _ = self::X|_;
+  tearoff _ = self::X|_#_#tearOff;
+  constructor • = self::X|;
+  tearoff • = self::X|_#new#tearOff;
+  constructor named = self::X|named;
+  tearoff named = self::X|_#named#tearOff;
+}
+static inline-class-member method X|_(dynamic obj) → self::X {
+  lowered final self::X #this = obj;
+  return #this;
+}
+static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X
+  return self::X|_(obj);
+static inline-class-member method X|() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#new#tearOff() → self::X
+  return self::X|();
+static inline-class-member method X|named() → self::X {
+  lowered final self::X #this = 0;
+  return #this;
+}
+static inline-class-member method X|_#named#tearOff() → self::X
+  return self::X|named();
+static method main() → void {
+  core::print(#C1(){() → self::X} as{Unchecked} core::int);
+  core::print(#C2(){() → self::X} as{Unchecked} core::int);
+}
+
+constants  {
+  #C1 = static-tearoff self::X|_#new#tearOff
+  #C2 = static-tearoff self::X|_#named#tearOff
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart
new file mode 100644
index 0000000..25be827
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart
@@ -0,0 +1,19 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Id(int id) {}
+
+test() {
+  var c = Id(2);
+  print(c.unresolved); // Error
+}
+
+main() {
+  var c = Id(2);
+  expect(int, c.runtimeType);
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect
new file mode 100644
index 0000000..7ac71d0
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   print(c.unresolved); // Error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id {
+  lowered final self::Id #this = id;
+  return #this;
+}
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic {
+  self::Id c = self::Id|(2);
+  core::print(invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  print(c.unresolved); // Error
+          ^^^^^^^^^^" in c{<unresolved>}.unresolved);
+}
+static method main() → dynamic {
+  self::Id c = self::Id|(2);
+  self::expect(#C1, c.{core::Object::runtimeType}{core::Type});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int)
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect
new file mode 100644
index 0000000..48c56554
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   print(c.unresolved); // Error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id {
+  lowered final self::Id #this = id;
+  return #this;
+}
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic {
+  self::Id c = self::Id|(2);
+  core::print(invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  print(c.unresolved); // Error
+          ^^^^^^^^^^" in c{<unresolved>}.unresolved);
+}
+static method main() → dynamic {
+  self::Id c = self::Id|(2);
+  self::expect(#C1, c.{core::Object::runtimeType}{core::Type});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int)
+}
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52284.dart:8:11 -> IntConstant(2)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52284.dart:13:11 -> IntConstant(2)
+Extra constant evaluation: evaluated: 18, effectively constant: 2
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.textual_outline.expect
new file mode 100644
index 0000000..0dc9f37
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+extension type Id(int id) {}
+test() {}
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect
new file mode 100644
index 0000000..e55bd78
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   print(c.unresolved); // Error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id {
+  lowered final self::Id #this = id;
+  return #this;
+}
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic {
+  self::Id c = self::Id|(2);
+  core::print(invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  print(c.unresolved); // Error
+          ^^^^^^^^^^" in c{<unresolved>}.unresolved);
+}
+static method main() → dynamic {
+  self::Id c = self::Id|(2);
+  self::expect(#C1, c.{core::Object::runtimeType}{core::Type});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect
new file mode 100644
index 0000000..e55bd78
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   print(c.unresolved); // Error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id {
+  lowered final self::Id #this = id;
+  return #this;
+}
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic {
+  self::Id c = self::Id|(2);
+  core::print(invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  print(c.unresolved); // Error
+          ^^^^^^^^^^" in c{<unresolved>}.unresolved);
+}
+static method main() → dynamic {
+  self::Id c = self::Id|(2);
+  self::expect(#C1, c.{core::Object::runtimeType}{core::Type});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect
new file mode 100644
index 0000000..d154efc
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id
+  ;
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect
new file mode 100644
index 0000000..0edd8f0
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect
@@ -0,0 +1,46 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+//   print(c.unresolved); // Error
+//           ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Id /* declaredRepresentationType = core::int */ {
+  constructor • = self::Id|;
+  tearoff • = self::Id|_#new#tearOff;
+}
+static inline-class-member method Id|(dynamic id) → self::Id {
+  lowered final self::Id #this = id;
+  return #this;
+}
+static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id
+  return self::Id|(id);
+static method test() → dynamic {
+  self::Id c = self::Id|(2);
+  core::print(invalid-expression "pkg/front_end/testcases/inline_class/extension_types/issue52284.dart:9:11: Error: The getter 'unresolved' isn't defined for the class 'Id'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
+  print(c.unresolved); // Error
+          ^^^^^^^^^^" in c{<unresolved>}.unresolved);
+}
+static method main() → dynamic {
+  self::Id c = self::Id|(2);
+  self::expect(#C1, c.{core::Object::runtimeType}{core::Type});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(core::int*)
+}
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52284.dart:8:11 -> IntConstant(2)
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52284.dart:13:11 -> IntConstant(2)
+Extra constant evaluation: evaluated: 18, effectively constant: 2
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart
new file mode 100644
index 0000000..a1d8699
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart
@@ -0,0 +1,12 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type IC1(int id) {
+  factory IC1.f(int id) = IC1;
+}
+
+main() {
+  var ic1 = IC1.f(1);
+  print(ic1.id);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect
new file mode 100644
index 0000000..9f55937
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1 {
+  lowered final self::IC1 #this = id;
+  return #this;
+}
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic {
+  self::IC1 ic1 = self::IC1|(1);
+  core::print(ic1 as{Unchecked} core::int);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect
new file mode 100644
index 0000000..0f8ed96
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1 {
+  lowered final self::IC1 #this = id;
+  return #this;
+}
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic {
+  self::IC1 ic1 = self::IC1|(1);
+  core::print(ic1 as{Unchecked} core::int);
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52525.dart:10:17 -> IntConstant(1)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.textual_outline.expect
new file mode 100644
index 0000000..9711d3a
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+extension type IC1(int id) {
+factory IC1.f(int id) = IC1;
+}
+main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect
new file mode 100644
index 0000000..9f55937
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1 {
+  lowered final self::IC1 #this = id;
+  return #this;
+}
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic {
+  self::IC1 ic1 = self::IC1|(1);
+  core::print(ic1 as{Unchecked} core::int);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect
new file mode 100644
index 0000000..9f55937
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect
@@ -0,0 +1,23 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1 {
+  lowered final self::IC1 #this = id;
+  return #this;
+}
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic {
+  self::IC1 ic1 = self::IC1|(1);
+  core::print(ic1 as{Unchecked} core::int);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect
new file mode 100644
index 0000000..32475bf
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1
+  ;
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect
new file mode 100644
index 0000000..0f8ed96
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class IC1 /* declaredRepresentationType = core::int */ {
+  constructor • = self::IC1|;
+  tearoff • = self::IC1|_#new#tearOff;
+  static redirecting-factory f = self::IC1|f;
+  static tearoff f = self::IC1|_#f#tearOff;
+}
+static inline-class-member method IC1|(dynamic id) → self::IC1 {
+  lowered final self::IC1 #this = id;
+  return #this;
+}
+static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1
+  return self::IC1|(id);
+static inline-class-member method IC1|f(core::int id) → self::IC1 /* redirection-target: self::IC1| */
+  return self::IC1|(id);
+static inline-class-member method IC1|_#f#tearOff(core::int id) → self::IC1;
+static method main() → dynamic {
+  self::IC1 ic1 = self::IC1|(1);
+  core::print(ic1 as{Unchecked} core::int);
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52525.dart:10:17 -> IntConstant(1)
+Extra constant evaluation: evaluated: 10, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart
new file mode 100644
index 0000000..6c16ec1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart
@@ -0,0 +1,17 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class Foo {}
+
+extension type FooBar(int i) implements Foo {}
+
+extension type FooBaz(int i) implements Foo {}
+
+void main() {
+  final a = FooBar(0);
+  switch (a) {
+    case FooBar(i: final a):
+      print("FooBar $a");
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect
new file mode 100644
index 0000000..d8b4e00
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar {
+  lowered final self::FooBar #this = i;
+  return #this;
+}
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz {
+  lowered final self::FooBaz #this = i;
+  return #this;
+}
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void {
+  final self::FooBar a = self::FooBar|(0);
+  #L1:
+  {
+    final synthesized self::FooBar #0#0 = a;
+    {
+      final hoisted core::int a;
+      if(let final dynamic #t1 = a = #0#0 as{Unchecked} core::int in true) {
+        {
+          core::print("FooBar ${a}");
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect
new file mode 100644
index 0000000..43de055
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar {
+  lowered final self::FooBar #this = i;
+  return #this;
+}
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz {
+  lowered final self::FooBaz #this = i;
+  return #this;
+}
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void {
+  final self::FooBar a = self::FooBar|(0);
+  #L1:
+  {
+    final synthesized self::FooBar #0#0 = a;
+    {
+      final hoisted core::int a;
+      if(let final core::int #t1 = a = #0#0 as{Unchecked} core::int in true) {
+        {
+          core::print("FooBar ${a}");
+        }
+      }
+    }
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52667.dart:12:13 -> IntConstant(0)
+Extra constant evaluation: evaluated: 17, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.textual_outline.expect
new file mode 100644
index 0000000..cc8b159
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+abstract class Foo {}
+extension type FooBar(int i) implements Foo {} extension type FooBaz(int i) implements Foo {}
+void main() {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect
new file mode 100644
index 0000000..d8b4e00
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar {
+  lowered final self::FooBar #this = i;
+  return #this;
+}
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz {
+  lowered final self::FooBaz #this = i;
+  return #this;
+}
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void {
+  final self::FooBar a = self::FooBar|(0);
+  #L1:
+  {
+    final synthesized self::FooBar #0#0 = a;
+    {
+      final hoisted core::int a;
+      if(let final dynamic #t1 = a = #0#0 as{Unchecked} core::int in true) {
+        {
+          core::print("FooBar ${a}");
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect
new file mode 100644
index 0000000..d8b4e00
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar {
+  lowered final self::FooBar #this = i;
+  return #this;
+}
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz {
+  lowered final self::FooBaz #this = i;
+  return #this;
+}
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void {
+  final self::FooBar a = self::FooBar|(0);
+  #L1:
+  {
+    final synthesized self::FooBar #0#0 = a;
+    {
+      final hoisted core::int a;
+      if(let final dynamic #t1 = a = #0#0 as{Unchecked} core::int in true) {
+        {
+          core::print("FooBar ${a}");
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect
new file mode 100644
index 0000000..c63894c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar
+  ;
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz
+  ;
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect
new file mode 100644
index 0000000..43de055
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class Foo extends core::Object {
+  synthetic constructor •() → self::Foo
+    : super core::Object::•()
+    ;
+}
+inline class FooBar /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBar|;
+  tearoff • = self::FooBar|_#new#tearOff;
+}
+inline class FooBaz /* declaredRepresentationType = core::int */ {
+  constructor • = self::FooBaz|;
+  tearoff • = self::FooBaz|_#new#tearOff;
+}
+static inline-class-member method FooBar|(dynamic i) → self::FooBar {
+  lowered final self::FooBar #this = i;
+  return #this;
+}
+static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar
+  return self::FooBar|(i);
+static inline-class-member method FooBaz|(dynamic i) → self::FooBaz {
+  lowered final self::FooBaz #this = i;
+  return #this;
+}
+static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz
+  return self::FooBaz|(i);
+static method main() → void {
+  final self::FooBar a = self::FooBar|(0);
+  #L1:
+  {
+    final synthesized self::FooBar #0#0 = a;
+    {
+      final hoisted core::int a;
+      if(let final core::int #t1 = a = #0#0 as{Unchecked} core::int in true) {
+        {
+          core::print("FooBar ${a}");
+        }
+      }
+    }
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: FactoryConstructorInvocation @ org-dartlang-testcase:///issue52667.dart:12:13 -> IntConstant(0)
+Extra constant evaluation: evaluated: 17, effectively constant: 1
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart
new file mode 100644
index 0000000..f0fd7d0
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart
@@ -0,0 +1,9 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type A._(int value) {
+  A.name1(this.value);
+}
+
+void method() => A.name2(1); // Error
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect
new file mode 100644
index 0000000..f093a04
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+// void method() => A.name2(1); // Error
+//                    ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  return invalid-expression "pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+void method() => A.name2(1); // Error
+                   ^^^^^";
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect
new file mode 100644
index 0000000..f093a04
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+// void method() => A.name2(1); // Error
+//                    ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  return invalid-expression "pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+void method() => A.name2(1); // Error
+                   ^^^^^";
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.textual_outline.expect
new file mode 100644
index 0000000..863759c
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+extension type A._(int value) {
+A.name1(this.value);
+}
+void method() => A.name2(1);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect
new file mode 100644
index 0000000..f093a04
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+// void method() => A.name2(1); // Error
+//                    ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  return invalid-expression "pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+void method() => A.name2(1); // Error
+                   ^^^^^";
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect
new file mode 100644
index 0000000..f093a04
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+// void method() => A.name2(1); // Error
+//                    ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  return invalid-expression "pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+void method() => A.name2(1); // Error
+                   ^^^^^";
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect
new file mode 100644
index 0000000..fb6975d
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A
+  ;
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A
+  ;
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect
new file mode 100644
index 0000000..f093a04
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+// void method() => A.name2(1); // Error
+//                    ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class A /* declaredRepresentationType = core::int */ {
+  constructor _ = self::A|_;
+  tearoff _ = self::A|_#_#tearOff;
+  constructor name1 = self::A|name1;
+  tearoff name1 = self::A|_#name1#tearOff;
+}
+static inline-class-member method A|_(dynamic value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#_#tearOff(dynamic value) → self::A
+  return self::A|_(value);
+static inline-class-member method A|name1(core::int value) → self::A {
+  lowered final self::A #this = value;
+  return #this;
+}
+static inline-class-member method A|_#name1#tearOff(core::int value) → self::A
+  return self::A|name1(value);
+static method method() → void
+  return invalid-expression "pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart:9:20: Error: Member not found: 'A.name2'.
+void method() => A.name2(1); // Error
+                   ^^^^^";
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart
new file mode 100644
index 0000000..e92b793
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart
@@ -0,0 +1,81 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension on Object {
+  int get setter => 42;
+
+  void set getter(int value) {}
+}
+
+extension type InlineClass(int it) {
+  test() {
+    var a = this + 2;
+    var b = -this;
+    var c = this[2];
+    var d = this[3] = 42;
+    var e1 = this.getter;
+    var e2 = getter;
+    var f1 = this.method;
+    var f2 = method;
+    var g1 = this.setter = 42;
+    var g2 = setter = 42;
+    this.setter = 87;
+    setter = 87;
+    int Function(int) h1 = this.genericMethod;
+    int Function(int) h2 = genericMethod;
+    this.setter; // Error, should not resolve to extension method.
+    setter; // Error, should not resolve to extension method.
+    this.getter = 42; // Error, should not resolve to extension method.
+    getter = 42; // Error, should not resolve to extension method.
+    var i1 = this.method();
+    var i2 = method();
+    num j1 = this.genericMethod(0);
+    num j2 = genericMethod(0);
+    var k1 = this.genericMethod(0);
+    var k2 = genericMethod(0);
+    var l1 = this.genericMethod<num>(0);
+    var l2 = genericMethod<num>(0);
+    var m = this();
+    var n1 = this.call();
+    var n2 = call();
+  }
+
+  int operator +(int other) => 42;
+
+  int operator -() => 87;
+
+  int operator [](int index) => 123;
+
+  void operator []=(int index, int value) {}
+
+  int get getter => 42;
+
+  int method() => 42;
+
+  void set setter(int value) {}
+
+  T genericMethod<T>(T t) => t;
+
+  int call() => 321;
+}
+
+test(InlineClass ic) {
+  var a = ic + 2;
+  var b = -ic;
+  var c = ic[2];
+  var d = ic[3] = 42;
+  var e = ic.getter;
+  var f = ic.method;
+  var g = ic.setter = 42;
+  ic.setter = 87;
+  int Function(int) h = ic.genericMethod;
+  ic.setter; // Error, should not resolve to extension method.
+  ic.getter = 42; // Error, should not resolve to extension method.
+  var i = ic.method();
+  num j = ic.genericMethod(0);
+  var k = ic.genericMethod(0);
+  var l = ic.genericMethod<num>(0);
+  var m = ic();
+  var n = ic.call();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect
new file mode 100644
index 0000000..3d2cc26
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect
@@ -0,0 +1,160 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     this.setter; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     setter; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     this.getter = 42; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     getter = 42; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//   ic.setter; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//   ic.getter = 42; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  return 42;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic {
+  core::int a = self::InlineClass|+(#this, 2);
+  core::int b = self::InlineClass|unary-(#this);
+  core::int c = self::InlineClass|[](#this, 2);
+  core::int d = let final core::int #t1 = 3 in let final core::int #t2 = 42 in let final void #t3 = self::InlineClass|[]=(#this, #t1, #t2) in #t2;
+  core::int e1 = self::InlineClass|get#getter(#this);
+  core::int e2 = self::InlineClass|get#getter(#this);
+  () → core::int f1 = self::InlineClass|get#method(#this);
+  () → core::int f2 = self::InlineClass|get#method(#this);
+  core::int g1 = let final core::int #t4 = 42 in let final void #t5 = self::InlineClass|set#setter(#this, #t4) in #t4;
+  core::int g2 = let final core::int #t6 = 42 in let final void #t7 = self::InlineClass|set#setter(#this, #t6) in #t6;
+  self::InlineClass|set#setter(#this, 87);
+  self::InlineClass|set#setter(#this, 87);
+  (core::int) → core::int h1 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  (core::int) → core::int h2 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    this.setter; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    setter; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    this.getter = 42; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    getter = 42; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.getter = 42;
+  core::int i1 = self::InlineClass|method(#this);
+  core::int i2 = self::InlineClass|method(#this);
+  core::num j1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num j2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int k1 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::int k2 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::num l1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num l2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int m = self::InlineClass|call(#this);
+  core::int n1 = self::InlineClass|call(#this);
+  core::int n2 = self::InlineClass|call(#this);
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  return 42;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  return 87;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  return 123;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void {}
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void {}
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  return t;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  return 321;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic {
+  core::int a = self::InlineClass|+(ic, 2);
+  core::int b = self::InlineClass|unary-(ic);
+  core::int c = self::InlineClass|[](ic, 2);
+  core::int d = let final self::InlineClass #t8 = ic in let final core::int #t9 = 3 in let final core::int #t10 = 42 in let final void #t11 = self::InlineClass|[]=(#t8, #t9, #t10) in #t10;
+  core::int e = self::InlineClass|get#getter(ic);
+  () → core::int f = self::InlineClass|get#method(ic);
+  core::int g = let final core::int #t12 = 42 in let final void #t13 = self::InlineClass|set#setter(ic, #t12) in #t12;
+  self::InlineClass|set#setter(ic, 87);
+  (core::int) → core::int h = self::InlineClass|get#genericMethod(ic)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+  ic.setter; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+  ic.getter = 42; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.getter = 42;
+  core::int i = self::InlineClass|method(ic);
+  core::num j = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int k = self::InlineClass|genericMethod<core::int>(ic, 0);
+  core::num l = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int m = self::InlineClass|call(ic);
+  core::int n = self::InlineClass|call(ic);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect
new file mode 100644
index 0000000..a4203a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect
@@ -0,0 +1,176 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     this.setter; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     setter; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     this.getter = 42; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     getter = 42; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//   ic.setter; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//   ic.getter = 42; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  return 42;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic {
+  core::int a = self::InlineClass|+(#this, 2);
+  core::int b = self::InlineClass|unary-(#this);
+  core::int c = self::InlineClass|[](#this, 2);
+  core::int d = let final core::int #t1 = 3 in let final core::int #t2 = 42 in let final void #t3 = self::InlineClass|[]=(#this, #t1, #t2) in #t2;
+  core::int e1 = self::InlineClass|get#getter(#this);
+  core::int e2 = self::InlineClass|get#getter(#this);
+  () → core::int f1 = self::InlineClass|get#method(#this);
+  () → core::int f2 = self::InlineClass|get#method(#this);
+  core::int g1 = let final core::int #t4 = 42 in let final void #t5 = self::InlineClass|set#setter(#this, #t4) in #t4;
+  core::int g2 = let final core::int #t6 = 42 in let final void #t7 = self::InlineClass|set#setter(#this, #t6) in #t6;
+  self::InlineClass|set#setter(#this, 87);
+  self::InlineClass|set#setter(#this, 87);
+  (core::int) → core::int h1 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  (core::int) → core::int h2 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    this.setter; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    setter; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    this.getter = 42; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    getter = 42; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.getter = 42;
+  core::int i1 = self::InlineClass|method(#this);
+  core::int i2 = self::InlineClass|method(#this);
+  core::num j1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num j2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int k1 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::int k2 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::num l1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num l2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int m = self::InlineClass|call(#this);
+  core::int n1 = self::InlineClass|call(#this);
+  core::int n2 = self::InlineClass|call(#this);
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  return 42;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  return 87;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  return 123;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void {}
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void {}
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  return t;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  return 321;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic {
+  core::int a = self::InlineClass|+(ic, 2);
+  core::int b = self::InlineClass|unary-(ic);
+  core::int c = self::InlineClass|[](ic, 2);
+  core::int d = let final self::InlineClass #t8 = ic in let final core::int #t9 = 3 in let final core::int #t10 = 42 in let final void #t11 = self::InlineClass|[]=(#t8, #t9, #t10) in #t10;
+  core::int e = self::InlineClass|get#getter(ic);
+  () → core::int f = self::InlineClass|get#method(ic);
+  core::int g = let final core::int #t12 = 42 in let final void #t13 = self::InlineClass|set#setter(ic, #t12) in #t12;
+  self::InlineClass|set#setter(ic, 87);
+  (core::int) → core::int h = self::InlineClass|get#genericMethod(ic)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+  ic.setter; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+  ic.getter = 42; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.getter = 42;
+  core::int i = self::InlineClass|method(ic);
+  core::num j = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int k = self::InlineClass|genericMethod<core::int>(ic, 0);
+  core::num l = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int m = self::InlineClass|call(ic);
+  core::int n = self::InlineClass|call(ic);
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:18 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:21:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:21:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:22:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:22:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:14 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:19 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:19 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:70:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:70:23 -> IntConstant(42)
+Extra constant evaluation: evaluated: 127, effectively constant: 12
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.textual_outline.expect
new file mode 100644
index 0000000..bc6ac48
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+extension on Object {
+  int get setter => 42;
+  void set getter(int value) {}
+}
+extension type InlineClass(int it) {
+test() {}
+int operator +(int other) => 42;
+int operator -() => 87;
+int operator [](int index) => 123;
+void operator []=(int index, int value) {}
+int get getter => 42;
+int method() => 42;
+void set setter(int value) {}
+T genericMethod<T>(T t) => t;
+int call() => 321;
+}
+test(InlineClass ic) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect
new file mode 100644
index 0000000..3d2cc26
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect
@@ -0,0 +1,160 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     this.setter; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     setter; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     this.getter = 42; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     getter = 42; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//   ic.setter; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//   ic.getter = 42; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  return 42;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic {
+  core::int a = self::InlineClass|+(#this, 2);
+  core::int b = self::InlineClass|unary-(#this);
+  core::int c = self::InlineClass|[](#this, 2);
+  core::int d = let final core::int #t1 = 3 in let final core::int #t2 = 42 in let final void #t3 = self::InlineClass|[]=(#this, #t1, #t2) in #t2;
+  core::int e1 = self::InlineClass|get#getter(#this);
+  core::int e2 = self::InlineClass|get#getter(#this);
+  () → core::int f1 = self::InlineClass|get#method(#this);
+  () → core::int f2 = self::InlineClass|get#method(#this);
+  core::int g1 = let final core::int #t4 = 42 in let final void #t5 = self::InlineClass|set#setter(#this, #t4) in #t4;
+  core::int g2 = let final core::int #t6 = 42 in let final void #t7 = self::InlineClass|set#setter(#this, #t6) in #t6;
+  self::InlineClass|set#setter(#this, 87);
+  self::InlineClass|set#setter(#this, 87);
+  (core::int) → core::int h1 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  (core::int) → core::int h2 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    this.setter; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    setter; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    this.getter = 42; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    getter = 42; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.getter = 42;
+  core::int i1 = self::InlineClass|method(#this);
+  core::int i2 = self::InlineClass|method(#this);
+  core::num j1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num j2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int k1 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::int k2 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::num l1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num l2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int m = self::InlineClass|call(#this);
+  core::int n1 = self::InlineClass|call(#this);
+  core::int n2 = self::InlineClass|call(#this);
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  return 42;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  return 87;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  return 123;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void {}
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void {}
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  return t;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  return 321;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic {
+  core::int a = self::InlineClass|+(ic, 2);
+  core::int b = self::InlineClass|unary-(ic);
+  core::int c = self::InlineClass|[](ic, 2);
+  core::int d = let final self::InlineClass #t8 = ic in let final core::int #t9 = 3 in let final core::int #t10 = 42 in let final void #t11 = self::InlineClass|[]=(#t8, #t9, #t10) in #t10;
+  core::int e = self::InlineClass|get#getter(ic);
+  () → core::int f = self::InlineClass|get#method(ic);
+  core::int g = let final core::int #t12 = 42 in let final void #t13 = self::InlineClass|set#setter(ic, #t12) in #t12;
+  self::InlineClass|set#setter(ic, 87);
+  (core::int) → core::int h = self::InlineClass|get#genericMethod(ic)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+  ic.setter; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+  ic.getter = 42; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.getter = 42;
+  core::int i = self::InlineClass|method(ic);
+  core::num j = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int k = self::InlineClass|genericMethod<core::int>(ic, 0);
+  core::num l = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int m = self::InlineClass|call(ic);
+  core::int n = self::InlineClass|call(ic);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect
new file mode 100644
index 0000000..3d2cc26
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect
@@ -0,0 +1,160 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     this.setter; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     setter; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     this.getter = 42; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     getter = 42; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//   ic.setter; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//   ic.getter = 42; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  return 42;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic {
+  core::int a = self::InlineClass|+(#this, 2);
+  core::int b = self::InlineClass|unary-(#this);
+  core::int c = self::InlineClass|[](#this, 2);
+  core::int d = let final core::int #t1 = 3 in let final core::int #t2 = 42 in let final void #t3 = self::InlineClass|[]=(#this, #t1, #t2) in #t2;
+  core::int e1 = self::InlineClass|get#getter(#this);
+  core::int e2 = self::InlineClass|get#getter(#this);
+  () → core::int f1 = self::InlineClass|get#method(#this);
+  () → core::int f2 = self::InlineClass|get#method(#this);
+  core::int g1 = let final core::int #t4 = 42 in let final void #t5 = self::InlineClass|set#setter(#this, #t4) in #t4;
+  core::int g2 = let final core::int #t6 = 42 in let final void #t7 = self::InlineClass|set#setter(#this, #t6) in #t6;
+  self::InlineClass|set#setter(#this, 87);
+  self::InlineClass|set#setter(#this, 87);
+  (core::int) → core::int h1 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  (core::int) → core::int h2 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    this.setter; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    setter; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    this.getter = 42; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    getter = 42; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.getter = 42;
+  core::int i1 = self::InlineClass|method(#this);
+  core::int i2 = self::InlineClass|method(#this);
+  core::num j1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num j2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int k1 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::int k2 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::num l1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num l2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int m = self::InlineClass|call(#this);
+  core::int n1 = self::InlineClass|call(#this);
+  core::int n2 = self::InlineClass|call(#this);
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  return 42;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  return 87;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  return 123;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void {}
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void {}
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  return t;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  return 321;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic {
+  core::int a = self::InlineClass|+(ic, 2);
+  core::int b = self::InlineClass|unary-(ic);
+  core::int c = self::InlineClass|[](ic, 2);
+  core::int d = let final self::InlineClass #t8 = ic in let final core::int #t9 = 3 in let final core::int #t10 = 42 in let final void #t11 = self::InlineClass|[]=(#t8, #t9, #t10) in #t10;
+  core::int e = self::InlineClass|get#getter(ic);
+  () → core::int f = self::InlineClass|get#method(ic);
+  core::int g = let final core::int #t12 = 42 in let final void #t13 = self::InlineClass|set#setter(ic, #t12) in #t12;
+  self::InlineClass|set#setter(ic, 87);
+  (core::int) → core::int h = self::InlineClass|get#genericMethod(ic)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+  ic.setter; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+  ic.getter = 42; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.getter = 42;
+  core::int i = self::InlineClass|method(ic);
+  core::num j = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int k = self::InlineClass|genericMethod<core::int>(ic, 0);
+  core::num l = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int m = self::InlineClass|call(ic);
+  core::int n = self::InlineClass|call(ic);
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect
new file mode 100644
index 0000000..3405658
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect
@@ -0,0 +1,64 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  ;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void
+  ;
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass
+  ;
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic
+  ;
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  ;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  ;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  ;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void
+  ;
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  ;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  ;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void
+  ;
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  ;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  ;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect
new file mode 100644
index 0000000..a4203a8
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect
@@ -0,0 +1,176 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     this.setter; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//     setter; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     this.getter = 42; // Error, should not resolve to extension method.
+//          ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//     getter = 42; // Error, should not resolve to extension method.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+//   ic.setter; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+//   ic.getter = 42; // Error, should not resolve to extension method.
+//      ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension /* unnamed */ _extension#0 on core::Object {
+  get setter = self::_extension#0|get#setter;
+  set getter = self::_extension#0|set#getter;
+}
+inline class InlineClass /* declaredRepresentationType = core::int */ {
+  method test = self::InlineClass|test;
+  tearoff test = self::InlineClass|get#test;
+  operator + = self::InlineClass|+;
+  operator unary- = self::InlineClass|unary-;
+  operator [] = self::InlineClass|[];
+  operator []= = self::InlineClass|[]=;
+  get getter = self::InlineClass|get#getter;
+  method method = self::InlineClass|method;
+  tearoff method = self::InlineClass|get#method;
+  method genericMethod = self::InlineClass|genericMethod;
+  tearoff genericMethod = self::InlineClass|get#genericMethod;
+  method call = self::InlineClass|call;
+  tearoff call = self::InlineClass|get#call;
+  set setter = self::InlineClass|set#setter;
+  constructor • = self::InlineClass|;
+  tearoff • = self::InlineClass|_#new#tearOff;
+}
+static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
+  return 42;
+static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
+static inline-class-member method InlineClass|(dynamic it) → self::InlineClass {
+  lowered final self::InlineClass #this = it;
+  return #this;
+}
+static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass
+  return self::InlineClass|(it);
+static inline-class-member method InlineClass|test(lowered final self::InlineClass #this) → dynamic {
+  core::int a = self::InlineClass|+(#this, 2);
+  core::int b = self::InlineClass|unary-(#this);
+  core::int c = self::InlineClass|[](#this, 2);
+  core::int d = let final core::int #t1 = 3 in let final core::int #t2 = 42 in let final void #t3 = self::InlineClass|[]=(#this, #t1, #t2) in #t2;
+  core::int e1 = self::InlineClass|get#getter(#this);
+  core::int e2 = self::InlineClass|get#getter(#this);
+  () → core::int f1 = self::InlineClass|get#method(#this);
+  () → core::int f2 = self::InlineClass|get#method(#this);
+  core::int g1 = let final core::int #t4 = 42 in let final void #t5 = self::InlineClass|set#setter(#this, #t4) in #t4;
+  core::int g2 = let final core::int #t6 = 42 in let final void #t7 = self::InlineClass|set#setter(#this, #t6) in #t6;
+  self::InlineClass|set#setter(#this, 87);
+  self::InlineClass|set#setter(#this, 87);
+  (core::int) → core::int h1 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  (core::int) → core::int h2 = self::InlineClass|get#genericMethod(#this)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:27:10: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    this.setter; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:28:5: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+    setter; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:29:10: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    this.getter = 42; // Error, should not resolve to extension method.
+         ^^^^^^" in #this{<unresolved>}.getter = 42;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:30:5: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+    getter = 42; // Error, should not resolve to extension method.
+    ^^^^^^" in #this{<unresolved>}.getter = 42;
+  core::int i1 = self::InlineClass|method(#this);
+  core::int i2 = self::InlineClass|method(#this);
+  core::num j1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num j2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int k1 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::int k2 = self::InlineClass|genericMethod<core::int>(#this, 0);
+  core::num l1 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::num l2 = self::InlineClass|genericMethod<core::num>(#this, 0);
+  core::int m = self::InlineClass|call(#this);
+  core::int n1 = self::InlineClass|call(#this);
+  core::int n2 = self::InlineClass|call(#this);
+}
+static inline-class-member method InlineClass|get#test(lowered final self::InlineClass #this) → () → dynamic
+  return () → dynamic => self::InlineClass|test(#this);
+static inline-class-member method InlineClass|+(lowered final self::InlineClass #this, core::int other) → core::int
+  return 42;
+static inline-class-member method InlineClass|unary-(lowered final self::InlineClass #this) → core::int
+  return 87;
+static inline-class-member method InlineClass|[](lowered final self::InlineClass #this, core::int index) → core::int
+  return 123;
+static inline-class-member method InlineClass|[]=(lowered final self::InlineClass #this, core::int index, core::int value) → void {}
+static inline-class-member method InlineClass|get#getter(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|method(lowered final self::InlineClass #this) → core::int
+  return 42;
+static inline-class-member method InlineClass|get#method(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|method(#this);
+static inline-class-member method InlineClass|set#setter(lowered final self::InlineClass #this, core::int value) → void {}
+static inline-class-member method InlineClass|genericMethod<T extends core::Object? = dynamic>(lowered final self::InlineClass #this, self::InlineClass|genericMethod::T% t) → self::InlineClass|genericMethod::T%
+  return t;
+static inline-class-member method InlineClass|get#genericMethod(lowered final self::InlineClass #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return <T extends core::Object? = dynamic>(T% t) → T% => self::InlineClass|genericMethod<T%>(#this, t);
+static inline-class-member method InlineClass|call(lowered final self::InlineClass #this) → core::int
+  return 321;
+static inline-class-member method InlineClass|get#call(lowered final self::InlineClass #this) → () → core::int
+  return () → core::int => self::InlineClass|call(#this);
+static method test(self::InlineClass ic) → dynamic {
+  core::int a = self::InlineClass|+(ic, 2);
+  core::int b = self::InlineClass|unary-(ic);
+  core::int c = self::InlineClass|[](ic, 2);
+  core::int d = let final self::InlineClass #t8 = ic in let final core::int #t9 = 3 in let final core::int #t10 = 42 in let final void #t11 = self::InlineClass|[]=(#t8, #t9, #t10) in #t10;
+  core::int e = self::InlineClass|get#getter(ic);
+  () → core::int f = self::InlineClass|get#method(ic);
+  core::int g = let final core::int #t12 = 42 in let final void #t13 = self::InlineClass|set#setter(ic, #t12) in #t12;
+  self::InlineClass|set#setter(ic, 87);
+  (core::int) → core::int h = self::InlineClass|get#genericMethod(ic)<core::int>;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:73:6: Error: The getter 'setter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
+  ic.setter; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.setter;
+  invalid-expression "pkg/front_end/testcases/inline_class/extension_types/method_access.dart:74:6: Error: The setter 'getter' isn't defined for the class 'InlineClass'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'getter'.
+  ic.getter = 42; // Error, should not resolve to extension method.
+     ^^^^^^" in ic{<unresolved>}.getter = 42;
+  core::int i = self::InlineClass|method(ic);
+  core::num j = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int k = self::InlineClass|genericMethod<core::int>(ic, 0);
+  core::num l = self::InlineClass|genericMethod<core::num>(ic, 0);
+  core::int m = self::InlineClass|call(ic);
+  core::int n = self::InlineClass|call(ic);
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:18 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:16:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:21:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:21:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:22:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:22:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:14 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:19 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:67:19 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:70:23 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///method_access.dart:70:23 -> IntConstant(42)
+Extra constant evaluation: evaluated: 127, effectively constant: 12
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart
new file mode 100644
index 0000000..ee5654b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart
@@ -0,0 +1,65 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Class._(int it) {
+  void instanceMethod() {
+    var local = this;
+    var localM = instanceMethod();
+    var localT = instanceMethod;
+    var localG = instanceGetter;
+  }
+
+  int get instanceGetter => 42;
+
+  void instanceMethod2(String s, [int i = 42]) {
+    var local = this;
+    var localS = s;
+    var localI = i;
+    var localG1 = genericInstanceMethod(s);
+    var localG2 = genericInstanceMethod(i);
+    var localG3 = genericInstanceMethod<num>(i);
+  }
+
+  S genericInstanceMethod<S>(S s) => s;
+
+  static void staticMethod() {
+    staticMethod();
+    var localG1 = genericStaticMethod(0);
+    var localG2 = genericStaticMethod('');
+    var localG3 = genericStaticMethod<num>(0);
+  }
+
+  static S genericStaticMethod<S>(S s) => s;
+}
+
+extension type GenericClass<T>._(T it) {
+  void instanceMethod() {
+    var local = this;
+    var localM = instanceMethod();
+    var localT = instanceMethod;
+    var localG = instanceGetter;
+  }
+
+  T get instanceGetter => throw '';
+
+  void instanceMethod2(String s, {int i = 42}) {
+    var local = this;
+    var localS = s;
+    var localI = i;
+    var localG1 = genericInstanceMethod(s);
+    var localG2 = genericInstanceMethod(i);
+    var localG3 = genericInstanceMethod<num>(i);
+  }
+
+  S genericInstanceMethod<S>(S s) => s;
+
+  static void staticMethod() {
+    staticMethod();
+    var localG1 = genericStaticMethod(0);
+    var localG2 = genericStaticMethod('');
+    var localG3 = genericStaticMethod<num>(0);
+  }
+
+  static S genericStaticMethod<S>(S s) => s;
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect
new file mode 100644
index 0000000..3c429f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void {
+  self::Class local = #this;
+  void localM = self::Class|instanceMethod(#this);
+  () → void localT = self::Class|get#instanceMethod(#this);
+  core::int localG = self::Class|get#instanceGetter(#this);
+}
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  return 42;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [core::int i = #C1]) → void {
+  self::Class local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::Class|genericInstanceMethod<core::String>(#this, s);
+  core::int localG2 = self::Class|genericInstanceMethod<core::int>(#this, i);
+  core::num localG3 = self::Class|genericInstanceMethod<core::num>(#this, i);
+}
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C1]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  return s;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void {
+  self::Class|staticMethod();
+  core::int localG1 = self::Class|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::Class|genericStaticMethod<core::String>("");
+  core::num localG3 = self::Class|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  return s;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> {
+  lowered final self::GenericClass<self::GenericClass|_::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void {
+  self::GenericClass<self::GenericClass|instanceMethod::T%> local = #this;
+  void localM = self::GenericClass|instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  () → void localT = self::GenericClass|get#instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  self::GenericClass|instanceMethod::T% localG = self::GenericClass|get#instanceGetter<self::GenericClass|instanceMethod::T%>(#this);
+}
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  return throw "";
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {core::int i = #C1}) → void {
+  self::GenericClass<self::GenericClass|instanceMethod2::T%> local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::String>(#this, s);
+  core::int localG2 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::int>(#this, i);
+  core::num localG3 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::num>(#this, i);
+}
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C1}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  return s;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void {
+  self::GenericClass|staticMethod();
+  core::int localG1 = self::GenericClass|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::GenericClass|genericStaticMethod<core::String>("");
+  core::num localG3 = self::GenericClass|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  return s;
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect
new file mode 100644
index 0000000..3c429f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void {
+  self::Class local = #this;
+  void localM = self::Class|instanceMethod(#this);
+  () → void localT = self::Class|get#instanceMethod(#this);
+  core::int localG = self::Class|get#instanceGetter(#this);
+}
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  return 42;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [core::int i = #C1]) → void {
+  self::Class local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::Class|genericInstanceMethod<core::String>(#this, s);
+  core::int localG2 = self::Class|genericInstanceMethod<core::int>(#this, i);
+  core::num localG3 = self::Class|genericInstanceMethod<core::num>(#this, i);
+}
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C1]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  return s;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void {
+  self::Class|staticMethod();
+  core::int localG1 = self::Class|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::Class|genericStaticMethod<core::String>("");
+  core::num localG3 = self::Class|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  return s;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> {
+  lowered final self::GenericClass<self::GenericClass|_::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void {
+  self::GenericClass<self::GenericClass|instanceMethod::T%> local = #this;
+  void localM = self::GenericClass|instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  () → void localT = self::GenericClass|get#instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  self::GenericClass|instanceMethod::T% localG = self::GenericClass|get#instanceGetter<self::GenericClass|instanceMethod::T%>(#this);
+}
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  return throw "";
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {core::int i = #C1}) → void {
+  self::GenericClass<self::GenericClass|instanceMethod2::T%> local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::String>(#this, s);
+  core::int localG2 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::int>(#this, i);
+  core::num localG3 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::num>(#this, i);
+}
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C1}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  return s;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void {
+  self::GenericClass|staticMethod();
+  core::int localG1 = self::GenericClass|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::GenericClass|genericStaticMethod<core::String>("");
+  core::num localG3 = self::GenericClass|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  return s;
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.textual_outline.expect
new file mode 100644
index 0000000..f3b9e78
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+extension type Class._(int it) {
+void instanceMethod() {}
+int get instanceGetter => 42;
+void instanceMethod2(String s, [int i = 42]) {}
+S genericInstanceMethod<S>(S s) => s;
+static void staticMethod() {}
+static S genericStaticMethod<S>(S s) => s;
+} extension type GenericClass<T>._(T it) {
+void instanceMethod() {}
+T get instanceGetter => throw '';
+void instanceMethod2(String s, {int i = 42}) {}
+S genericInstanceMethod<S>(S s) => s;
+static void staticMethod() {}
+static S genericStaticMethod<S>(S s) => s;
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect
new file mode 100644
index 0000000..3c429f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void {
+  self::Class local = #this;
+  void localM = self::Class|instanceMethod(#this);
+  () → void localT = self::Class|get#instanceMethod(#this);
+  core::int localG = self::Class|get#instanceGetter(#this);
+}
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  return 42;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [core::int i = #C1]) → void {
+  self::Class local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::Class|genericInstanceMethod<core::String>(#this, s);
+  core::int localG2 = self::Class|genericInstanceMethod<core::int>(#this, i);
+  core::num localG3 = self::Class|genericInstanceMethod<core::num>(#this, i);
+}
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C1]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  return s;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void {
+  self::Class|staticMethod();
+  core::int localG1 = self::Class|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::Class|genericStaticMethod<core::String>("");
+  core::num localG3 = self::Class|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  return s;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> {
+  lowered final self::GenericClass<self::GenericClass|_::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void {
+  self::GenericClass<self::GenericClass|instanceMethod::T%> local = #this;
+  void localM = self::GenericClass|instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  () → void localT = self::GenericClass|get#instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  self::GenericClass|instanceMethod::T% localG = self::GenericClass|get#instanceGetter<self::GenericClass|instanceMethod::T%>(#this);
+}
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  return throw "";
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {core::int i = #C1}) → void {
+  self::GenericClass<self::GenericClass|instanceMethod2::T%> local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::String>(#this, s);
+  core::int localG2 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::int>(#this, i);
+  core::num localG3 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::num>(#this, i);
+}
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C1}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  return s;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void {
+  self::GenericClass|staticMethod();
+  core::int localG1 = self::GenericClass|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::GenericClass|genericStaticMethod<core::String>("");
+  core::num localG3 = self::GenericClass|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  return s;
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect
new file mode 100644
index 0000000..3c429f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void {
+  self::Class local = #this;
+  void localM = self::Class|instanceMethod(#this);
+  () → void localT = self::Class|get#instanceMethod(#this);
+  core::int localG = self::Class|get#instanceGetter(#this);
+}
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  return 42;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [core::int i = #C1]) → void {
+  self::Class local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::Class|genericInstanceMethod<core::String>(#this, s);
+  core::int localG2 = self::Class|genericInstanceMethod<core::int>(#this, i);
+  core::num localG3 = self::Class|genericInstanceMethod<core::num>(#this, i);
+}
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C1]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  return s;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void {
+  self::Class|staticMethod();
+  core::int localG1 = self::Class|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::Class|genericStaticMethod<core::String>("");
+  core::num localG3 = self::Class|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  return s;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> {
+  lowered final self::GenericClass<self::GenericClass|_::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void {
+  self::GenericClass<self::GenericClass|instanceMethod::T%> local = #this;
+  void localM = self::GenericClass|instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  () → void localT = self::GenericClass|get#instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  self::GenericClass|instanceMethod::T% localG = self::GenericClass|get#instanceGetter<self::GenericClass|instanceMethod::T%>(#this);
+}
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  return throw "";
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {core::int i = #C1}) → void {
+  self::GenericClass<self::GenericClass|instanceMethod2::T%> local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::String>(#this, s);
+  core::int localG2 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::int>(#this, i);
+  core::num localG3 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::num>(#this, i);
+}
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C1}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  return s;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void {
+  self::GenericClass|staticMethod();
+  core::int localG1 = self::GenericClass|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::GenericClass|genericStaticMethod<core::String>("");
+  core::num localG3 = self::GenericClass|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  return s;
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect
new file mode 100644
index 0000000..595269b
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class
+  ;
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void
+  ;
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  ;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [has-declared-initializer core::int i]) → void
+  ;
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  ;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void
+  ;
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  ;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%>
+  ;
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void
+  ;
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  ;
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {has-declared-initializer core::int i}) → void
+  ;
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  ;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void
+  ;
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect
new file mode 100644
index 0000000..3c429f5
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect
@@ -0,0 +1,110 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+inline class Class /* declaredRepresentationType = core::int */ {
+  method instanceMethod = self::Class|instanceMethod;
+  tearoff instanceMethod = self::Class|get#instanceMethod;
+  get instanceGetter = self::Class|get#instanceGetter;
+  method instanceMethod2 = self::Class|instanceMethod2;
+  tearoff instanceMethod2 = self::Class|get#instanceMethod2;
+  method genericInstanceMethod = self::Class|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::Class|get#genericInstanceMethod;
+  static method staticMethod = self::Class|staticMethod;
+  static method genericStaticMethod = self::Class|genericStaticMethod;
+  constructor _ = self::Class|_;
+  tearoff _ = self::Class|_#_#tearOff;
+}
+inline class GenericClass<T extends core::Object? = dynamic> /* declaredRepresentationType = T% */ {
+  method instanceMethod = self::GenericClass|instanceMethod;
+  tearoff instanceMethod = self::GenericClass|get#instanceMethod;
+  get instanceGetter = self::GenericClass|get#instanceGetter;
+  method instanceMethod2 = self::GenericClass|instanceMethod2;
+  tearoff instanceMethod2 = self::GenericClass|get#instanceMethod2;
+  method genericInstanceMethod = self::GenericClass|genericInstanceMethod;
+  tearoff genericInstanceMethod = self::GenericClass|get#genericInstanceMethod;
+  static method staticMethod = self::GenericClass|staticMethod;
+  static method genericStaticMethod = self::GenericClass|genericStaticMethod;
+  constructor _ = self::GenericClass|_;
+  tearoff _ = self::GenericClass|_#_#tearOff;
+}
+static inline-class-member method Class|_(dynamic it) → self::Class {
+  lowered final self::Class #this = it;
+  return #this;
+}
+static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class
+  return self::Class|_(it);
+static inline-class-member method Class|instanceMethod(lowered final self::Class #this) → void {
+  self::Class local = #this;
+  void localM = self::Class|instanceMethod(#this);
+  () → void localT = self::Class|get#instanceMethod(#this);
+  core::int localG = self::Class|get#instanceGetter(#this);
+}
+static inline-class-member method Class|get#instanceMethod(lowered final self::Class #this) → () → void
+  return () → void => self::Class|instanceMethod(#this);
+static inline-class-member method Class|get#instanceGetter(lowered final self::Class #this) → core::int
+  return 42;
+static inline-class-member method Class|instanceMethod2(lowered final self::Class #this, core::String s, [core::int i = #C1]) → void {
+  self::Class local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::Class|genericInstanceMethod<core::String>(#this, s);
+  core::int localG2 = self::Class|genericInstanceMethod<core::int>(#this, i);
+  core::num localG3 = self::Class|genericInstanceMethod<core::num>(#this, i);
+}
+static inline-class-member method Class|get#instanceMethod2(lowered final self::Class #this) → (core::String, [core::int]) → void
+  return (core::String s, [core::int i = #C1]) → void => self::Class|instanceMethod2(#this, s, i);
+static inline-class-member method Class|genericInstanceMethod<S extends core::Object? = dynamic>(lowered final self::Class #this, self::Class|genericInstanceMethod::S% s) → self::Class|genericInstanceMethod::S%
+  return s;
+static inline-class-member method Class|get#genericInstanceMethod(lowered final self::Class #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::Class|genericInstanceMethod<S%>(#this, s);
+static inline-class-member method Class|staticMethod() → void {
+  self::Class|staticMethod();
+  core::int localG1 = self::Class|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::Class|genericStaticMethod<core::String>("");
+  core::num localG3 = self::Class|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
+  return s;
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> {
+  lowered final self::GenericClass<self::GenericClass|_::T%> #this = it;
+  return #this;
+}
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%>
+  return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
+static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> #this) → void {
+  self::GenericClass<self::GenericClass|instanceMethod::T%> local = #this;
+  void localM = self::GenericClass|instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  () → void localT = self::GenericClass|get#instanceMethod<self::GenericClass|instanceMethod::T%>(#this);
+  self::GenericClass|instanceMethod::T% localG = self::GenericClass|get#instanceGetter<self::GenericClass|instanceMethod::T%>(#this);
+}
+static inline-class-member method GenericClass|get#instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod::T%> #this) → () → void
+  return () → void => self::GenericClass|instanceMethod<self::GenericClass|get#instanceMethod::T%>(#this);
+static inline-class-member method GenericClass|get#instanceGetter<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceGetter::T%> #this) → self::GenericClass|get#instanceGetter::T%
+  return throw "";
+static inline-class-member method GenericClass|instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod2::T%> #this, core::String s, {core::int i = #C1}) → void {
+  self::GenericClass<self::GenericClass|instanceMethod2::T%> local = #this;
+  core::String localS = s;
+  core::int localI = i;
+  core::String localG1 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::String>(#this, s);
+  core::int localG2 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::int>(#this, i);
+  core::num localG3 = self::GenericClass|genericInstanceMethod<self::GenericClass|instanceMethod2::T%, core::num>(#this, i);
+}
+static inline-class-member method GenericClass|get#instanceMethod2<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#instanceMethod2::T%> #this) → (core::String, {i: core::int}) → void
+  return (core::String s, {core::int i = #C1}) → void => self::GenericClass|instanceMethod2<self::GenericClass|get#instanceMethod2::T%>(#this, s, i: i);
+static inline-class-member method GenericClass|genericInstanceMethod<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|genericInstanceMethod::T%> #this, self::GenericClass|genericInstanceMethod::S% s) → self::GenericClass|genericInstanceMethod::S%
+  return s;
+static inline-class-member method GenericClass|get#genericInstanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|get#genericInstanceMethod::T%> #this) → <S extends core::Object? = dynamic>(S%) → S%
+  return <S extends core::Object? = dynamic>(S% s) → S% => self::GenericClass|genericInstanceMethod<self::GenericClass|get#genericInstanceMethod::T%, S%>(#this, s);
+static inline-class-member method GenericClass|staticMethod() → void {
+  self::GenericClass|staticMethod();
+  core::int localG1 = self::GenericClass|genericStaticMethod<core::int>(0);
+  core::String localG2 = self::GenericClass|genericStaticMethod<core::String>("");
+  core::num localG3 = self::GenericClass|genericStaticMethod<core::num>(0);
+}
+static inline-class-member method GenericClass|genericStaticMethod<S extends core::Object? = dynamic>(self::GenericClass|genericStaticMethod::S% s) → self::GenericClass|genericStaticMethod::S%
+  return s;
+
+constants  {
+  #C1 = 42
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart b/pkg/front_end/testcases/inline_class/extension_types/representation.dart
new file mode 100644
index 0000000..f9faff6
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart
@@ -0,0 +1,9 @@
+// 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 a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type Missing() {} // Error
+
+extension type Multiple(bool instanceField1, int instanceField2) {}  // Error
+
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
\ No newline at end of file
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect
new file mode 100644
index 0000000..0e1f438
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing {
+  lowered final self::Missing #this;
+  return #this;
+}
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple {
+  lowered final self::Multiple #this = instanceField2;
+  return #this;
+}
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate {
+  lowered final self::Duplicate #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                              ^^^^^^^^^^^^^";
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                                                 ^^^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect
new file mode 100644
index 0000000..0e1f438
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing {
+  lowered final self::Missing #this;
+  return #this;
+}
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple {
+  lowered final self::Multiple #this = instanceField2;
+  return #this;
+}
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate {
+  lowered final self::Duplicate #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                              ^^^^^^^^^^^^^";
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                                                 ^^^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.textual_outline.expect
new file mode 100644
index 0000000..274571a
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.textual_outline.expect
@@ -0,0 +1 @@
+extension type Missing() {} extension type Multiple(bool instanceField1, int instanceField2) {} extension type Duplicate(bool instanceField, int instanceField) {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect
new file mode 100644
index 0000000..0e1f438
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing {
+  lowered final self::Missing #this;
+  return #this;
+}
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple {
+  lowered final self::Multiple #this = instanceField2;
+  return #this;
+}
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate {
+  lowered final self::Duplicate #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                              ^^^^^^^^^^^^^";
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                                                 ^^^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect
new file mode 100644
index 0000000..0e1f438
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing {
+  lowered final self::Missing #this;
+  return #this;
+}
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple {
+  lowered final self::Multiple #this = instanceField2;
+  return #this;
+}
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate {
+  lowered final self::Duplicate #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                              ^^^^^^^^^^^^^";
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                                                 ^^^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect
new file mode 100644
index 0000000..c63d180
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing
+  ;
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  ;
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  ;
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect
new file mode 100644
index 0000000..0e1f438
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect
@@ -0,0 +1,70 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Duplicated parameter name 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Other parameter named 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: 'instanceField' is already declared in this scope.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Context: Previous declaration of 'instanceField'.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                                                  ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Final field 'instanceField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+// extension type Duplicate(bool instanceField, int instanceField) {} // Error
+//                               ^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+inline class Missing /* declaredRepresentationType = invalid-type */ {
+  constructor • = self::Missing|;
+  tearoff • = self::Missing|_#new#tearOff;
+}
+inline class Multiple /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Multiple|;
+  tearoff • = self::Multiple|_#new#tearOff;
+}
+inline class Duplicate /* declaredRepresentationType = core::bool */ {
+  constructor • = self::Duplicate|;
+  tearoff • = self::Duplicate|_#new#tearOff;
+}
+static inline-class-member method Missing|() → self::Missing {
+  lowered final self::Missing #this;
+  return #this;
+}
+static inline-class-member method Missing|_#new#tearOff() → self::Missing
+  return self::Missing|();
+static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple {
+  lowered final self::Multiple #this = instanceField2;
+  return #this;
+}
+static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple
+  return self::Multiple|(instanceField1, instanceField2);
+static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate {
+  lowered final self::Duplicate #this;
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                              ^^^^^^^^^^^^^";
+  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+extension type Duplicate(bool instanceField, int instanceField) {} // Error
+                                                 ^^^^^^^^^^^^^";
+  return #this;
+}
+static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate
+  return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index c31ee9d..1ad192b 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -122,6 +122,32 @@
 general/type_variable_in_static_context: FormatterCrash
 general/var_as_type_name: FormatterCrash
 inline_class/inline_class_declaration: FormatterCrash
+inline_class/extension_types/annotations: FormatterCrash
+inline_class/extension_types/const_constructor: FormatterCrash
+inline_class/extension_types/constructor_access: FormatterCrash
+inline_class/extension_types/constructor_bodies: FormatterCrash
+inline_class/extension_types/constructor_formal_parameters: FormatterCrash
+inline_class/extension_types/constructors: FormatterCrash
+inline_class/extension_types/extension_type_declarations: FormatterCrash
+inline_class/extension_types/external: FormatterCrash
+inline_class/extension_types/field_access: FormatterCrash
+inline_class/extension_types/implements: FormatterCrash
+inline_class/extension_types/initializers: FormatterCrash
+inline_class/extension_types/inline_class_declaration: FormatterCrash
+inline_class/extension_types/issue51146: FormatterCrash
+inline_class/extension_types/issue51285: FormatterCrash
+inline_class/extension_types/issue51299: FormatterCrash
+inline_class/extension_types/issue51556: FormatterCrash
+inline_class/extension_types/issue52119: FormatterCrash
+inline_class/extension_types/issue52240: FormatterCrash
+inline_class/extension_types/issue52284: FormatterCrash
+inline_class/extension_types/issue52525: FormatterCrash
+inline_class/extension_types/issue52667: FormatterCrash
+inline_class/extension_types/member_not_found: FormatterCrash
+inline_class/extension_types/method_access: FormatterCrash
+inline_class/extension_types/procedures: FormatterCrash
+inline_class/extension_types/representation: FormatterCrash
+R
 late_lowering/later: FormatterCrash
 macros/augment_class: FormatterCrash
 macros/augment_concrete: FormatterCrash