[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