[cfe] Refactor ClassHierarchyBuilder to use Tuple for computation
Change-Id: I8055552313786814bde6f66214a013a8bedb2078
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/177500
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/analysis_options_no_lints.yaml b/pkg/front_end/analysis_options_no_lints.yaml
index 25f50ec..d699e16 100644
--- a/pkg/front_end/analysis_options_no_lints.yaml
+++ b/pkg/front_end/analysis_options_no_lints.yaml
@@ -6,6 +6,7 @@
exclude:
- parser_testcases/**
- test/analyser_ignored/**
+ - test/class_hierarchy/data/**
- test/enable_non_nullable/data/**
- test/extensions/data/**
- test/id_testing/data/**
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index d778446..ce2ddc7 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -179,12 +179,8 @@
void checkSupertypes(CoreTypes coreTypes);
- void handleSeenCovariant(
- Types types,
- Member declaredMember,
- Member interfaceMember,
- bool isSetter,
- callback(Member declaredMember, Member interfaceMember, bool isSetter));
+ void handleSeenCovariant(Types types, Member interfaceMember, bool isSetter,
+ callback(Member interfaceMember, bool isSetter));
bool hasUserDefinedNoSuchMethod(
Class klass, ClassHierarchy hierarchy, Class objectClass);
@@ -740,12 +736,8 @@
}
@override
- void handleSeenCovariant(
- Types types,
- Member declaredMember,
- Member interfaceMember,
- bool isSetter,
- callback(Member declaredMember, Member interfaceMember, bool isSetter)) {
+ void handleSeenCovariant(Types types, Member interfaceMember, bool isSetter,
+ callback(Member interfaceMember, bool isSetter)) {
// When a parameter is covariant we have to check that we also
// override the same member in all parents.
for (Supertype supertype in interfaceMember.enclosingClass.supers) {
@@ -753,7 +745,7 @@
supertype.classNode, interfaceMember.name,
setter: isSetter);
if (m != null) {
- callback(declaredMember, m, isSetter);
+ callback(m, isSetter);
}
}
}
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 1e3fce0..736be55 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -791,9 +791,6 @@
bool get isProperty => true;
@override
- bool get isFunction => false;
-
- @override
bool isSameDeclaration(ClassMember other) {
return other is SourceFieldMember && memberBuilder == other.memberBuilder;
}
@@ -1460,9 +1457,6 @@
bool get isProperty => isField || isGetter || isSetter;
@override
- bool get isFunction => !isProperty;
-
- @override
ClassBuilder get classBuilder => fieldBuilder.classBuilder;
@override
@@ -1534,19 +1528,9 @@
bool get isAbstract => _member.isAbstract;
@override
- bool get needsComputation => false;
-
- @override
bool get isSynthesized => false;
@override
- bool get isInheritableConflict => false;
-
- @override
- ClassMember withParent(ClassBuilder classBuilder) =>
- throw new UnsupportedError("$runtimeType.withParent");
-
- @override
bool get hasDeclarations => false;
@override
@@ -1554,10 +1538,7 @@
throw new UnsupportedError("$runtimeType.declarations");
@override
- ClassMember get abstract => this;
-
- @override
- ClassMember get concrete => this;
+ ClassMember get interfaceMember => this;
@override
bool isSameDeclaration(ClassMember other) {
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index d28c5ac..b41a5a4 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -261,22 +261,12 @@
bool get isAbstract => memberBuilder.member.isAbstract;
@override
- bool get needsComputation => false;
-
- @override
bool get isSynthesized => false;
@override
bool get isInternalImplementation => false;
@override
- bool get isInheritableConflict => false;
-
- @override
- ClassMember withParent(ClassBuilder classBuilder) =>
- throw new UnsupportedError("$runtimeType.withParent");
-
- @override
bool get hasDeclarations => false;
@override
@@ -284,10 +274,7 @@
throw new UnsupportedError("$runtimeType.declarations");
@override
- ClassMember get abstract => this;
-
- @override
- ClassMember get concrete => this;
+ ClassMember get interfaceMember => this;
@override
String toString() => '$runtimeType($fullName,forSetter=${forSetter})';
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index a56d974..388ba1d 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -639,9 +639,6 @@
memberBuilder.kind == ProcedureKind.Setter;
@override
- bool get isFunction => !isProperty;
-
- @override
bool isSameDeclaration(ClassMember other) {
return other is SourceProcedureMember &&
memberBuilder == other.memberBuilder;
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index 861e245..de71663d 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -254,6 +254,7 @@
bool get isSynthesized {
Member member = memberBuilder.member;
return member is Procedure &&
+ // TODO(johnniwinther): Should this just be `member.isSynthesized`?
(member.isMemberSignature ||
(member.isForwardingStub && !member.isForwardingSemiStub));
}
@@ -268,9 +269,6 @@
}
@override
- bool get isFunction => !isProperty;
-
- @override
void inferType(ClassHierarchyBuilder hierarchy) {
// Do nothing; this is only for source members.
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index a0fc2ac..cbc684d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -22,6 +22,7 @@
import 'package:kernel/src/standard_bounds.dart';
import 'package:kernel/src/types.dart' show Types;
+import '../../base/common.dart';
import '../../testing/id_testing_utils.dart' show typeToText;
import '../builder/builder.dart';
@@ -62,7 +63,6 @@
import '../names.dart' show noSuchMethodName;
-import '../problems.dart';
import '../scope.dart' show Scope;
import '../source/source_class_builder.dart';
@@ -227,13 +227,15 @@
bool get isFinal;
bool get isConst;
bool get forSetter;
- bool get isSourceDeclaration;
- /// Returns `true` if this member is a regular method or operator.
- bool get isFunction;
+ /// Returns `true` if this member corresponds to a declaration in the source
+ /// code.
+ bool get isSourceDeclaration;
/// Returns `true` if this member is a field, getter or setter.
bool get isProperty;
+
+ /// Computes the [Member] node resulting from this class member.
Member getMember(ClassHierarchyBuilder hierarchy);
/// Returns the member [Covariance] for this class member.
@@ -243,12 +245,17 @@
String get fullName;
String get fullNameForErrors;
ClassBuilder get classBuilder;
+
+ /// Returns `true` if this class member is declared in Object from dart:core.
bool isObjectMember(ClassBuilder objectClass);
Uri get fileUri;
int get charOffset;
+
+ /// Returns `true` if this class member is an interface member.
bool get isAbstract;
- bool get needsComputation;
+ /// Returns `true` if this member doesn't corresponds to a declaration in the
+ /// source code.
bool get isSynthesized;
// If `true` this member is not part of the interface but only part of the
@@ -258,17 +265,71 @@
// lowering.
bool get isInternalImplementation;
- bool get isInheritableConflict;
- ClassMember withParent(ClassBuilder classBuilder);
+ /// Returns `true` if this member is composed from a list of class members
+ /// accessible through [declarations].
bool get hasDeclarations;
+
+ /// If [hasDeclaration] is `true`, this returns the list of class members
+ /// from which this class member is composed.
+ ///
+ /// This is used in [unfoldDeclarations] to retrieve all underlying member
+ /// source declarations, and in [toSet] to retrieve all members used for
+ /// this class member wrt. certain level of the hierarchy.
+ /// TODO(johnniwinther): Can the use of [toSet] be replaced with a direct
+ /// use of [declarations]?
List<ClassMember> get declarations;
- ClassMember get abstract;
- ClassMember get concrete;
+
+ /// The interface member corresponding to this member.
+ ///
+ /// If this member is declared on the source, the interface member is
+ /// the member itself. For instance
+ ///
+ /// abstract class Class {
+ /// void concreteMethod() {}
+ /// void abstractMethod();
+ /// }
+ ///
+ /// the interface members for `concreteMethod` and `abstractMethod` are the
+ /// members themselves.
+ ///
+ /// If this member is a synthesized interface member, the
+ /// interface member is the member itself. For instance
+ ///
+ /// abstract class Interface1 {
+ /// void method() {}
+ /// }
+ /// abstract class Interface2 {
+ /// void method() {}
+ /// }
+ /// abstract class Class implements Interface1, Interface2 {}
+ ///
+ /// the interface member for `method` in `Class` is the synthesized interface
+ /// member created for the implemented members `Interface1.method` and
+ /// `Interface2.method`.
+ ///
+ /// If this member is a concrete member that implements an interface member,
+ /// the interface member is the implemented interface member. For instance
+ ///
+ /// class Super {
+ /// void method() {}
+ /// }
+ /// class Interface {
+ /// void method() {}
+ /// }
+ /// class Class extends Super implements Interface {}
+ ///
+ /// the interface member for `Super.method` implementing `method` in `Class`
+ /// is the synthesized interface member created for the implemented members
+ /// `Super.method` and `Interface.method`.
+ ClassMember get interfaceMember;
void inferType(ClassHierarchyBuilder hierarchy);
void registerOverrideDependency(Set<ClassMember> overriddenMembers);
/// Returns `true` if this has the same underlying declaration as [other].
+ ///
+ /// This is used for avoiding unnecessary checks and can this trivially
+ /// return `false`.
bool isSameDeclaration(ClassMember other);
}
@@ -381,9 +442,10 @@
_delayedTypeComputations.add(computation);
}
- void registerOverrideCheck(
- SourceClassBuilder classBuilder, ClassMember a, ClassMember b) {
- _delayedChecks.add(new DelayedOverrideCheck(classBuilder, a, b));
+ void registerOverrideCheck(SourceClassBuilder classBuilder,
+ ClassMember declaredMember, Set<ClassMember> overriddenMembers) {
+ _delayedChecks.add(new DelayedOverrideCheck(
+ classBuilder, declaredMember, overriddenMembers));
}
void registerGetterSetterCheck(
@@ -646,8 +708,6 @@
bool hasNoSuchMethod = false;
- List<ClassMember> abstractMembers = null;
-
final Map<Class, Substitution> substitutions;
ClassHierarchyNodeBuilder(
@@ -985,7 +1045,7 @@
}
}
- /// Infers the field type of [declaredMember] based on [overriddenMembers].
+ /// Infers the field type of [fieldBuilder] based on [overriddenMembers].
static void inferFieldType(
ClassHierarchyBuilder hierarchy,
ClassBuilder classBuilder,
@@ -1088,6 +1148,15 @@
messageDeclaredMemberConflictsWithInheritedMemberCause
.withLocation(b.fileUri, b.charOffset, name.length)
]);
+ } else if (b.classBuilder == classBuilder) {
+ classBuilder.addProblem(
+ messageDeclaredMemberConflictsWithInheritedMember,
+ b.charOffset,
+ name.length,
+ context: <LocatedMessage>[
+ messageDeclaredMemberConflictsWithInheritedMemberCause
+ .withLocation(a.fileUri, a.charOffset, name.length)
+ ]);
} else {
classBuilder.addProblem(messageInheritedMembersConflict,
classBuilder.charOffset, classBuilder.fullNameForErrors.length,
@@ -1137,15 +1206,6 @@
}
}
- void recordAbstractMember(ClassMember member) {
- abstractMembers ??= <ClassMember>[];
- if (member.hasDeclarations && classBuilder == member.classBuilder) {
- abstractMembers.addAll(member.declarations);
- } else {
- abstractMembers.add(member);
- }
- }
-
ClassHierarchyNode build() {
assert(!classBuilder.isPatch);
ClassHierarchyNode supernode;
@@ -1158,12 +1218,23 @@
assert(supernode != null);
}
+ /// Set to `true` if the class needs interfaces, that is, if it has any
+ /// members where the interface member is different from its corresponding
+ /// class members.
+ ///
+ /// This is an optimization to avoid unnecessary computation of interface
+ /// members.
+ bool hasInterfaces = false;
+
Map<Name, Tuple> memberMap = {};
Scope scope = classBuilder.scope;
for (MemberBuilder memberBuilder in scope.localMembers) {
for (ClassMember classMember in memberBuilder.localMembers) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.declareMember(classMember);
@@ -1172,6 +1243,9 @@
}
}
for (ClassMember classMember in memberBuilder.localSetters) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.declareSetter(classMember);
@@ -1183,6 +1257,9 @@
for (MemberBuilder memberBuilder in scope.localSetters) {
for (ClassMember classMember in memberBuilder.localMembers) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.declareMember(classMember);
@@ -1191,6 +1268,9 @@
}
}
for (ClassMember classMember in memberBuilder.localSetters) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.declareSetter(classMember);
@@ -1219,6 +1299,9 @@
for (MemberBuilder memberBuilder in scope.localMembers) {
for (ClassMember classMember in memberBuilder.localMembers) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.mixInMember(classMember);
@@ -1227,6 +1310,9 @@
}
}
for (ClassMember classMember in memberBuilder.localSetters) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.mixInSetter(classMember);
@@ -1238,6 +1324,9 @@
for (MemberBuilder memberBuilder in scope.localSetters) {
for (ClassMember classMember in memberBuilder.localMembers) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.mixInMember(classMember);
@@ -1246,6 +1335,9 @@
}
}
for (ClassMember classMember in memberBuilder.localSetters) {
+ if (classMember.isAbstract) {
+ hasInterfaces = true;
+ }
Tuple tuple = memberMap[classMember.name];
if (tuple == null) {
memberMap[classMember.name] = new Tuple.mixInSetter(classMember);
@@ -1309,7 +1401,6 @@
}
}
- bool hasInterfaces = false;
if (supernode == null) {
// This should be Object.
superclasses = new List<Supertype>.filled(0, null);
@@ -1365,8 +1456,10 @@
hasInterfaces = true;
}
- implement(supernode.interfaceMemberMap);
- implement(supernode.interfaceSetterMap);
+ if (hasInterfaces) {
+ implement(supernode.interfaceMemberMap ?? supernode.classMemberMap);
+ implement(supernode.interfaceSetterMap ?? supernode.classSetterMap);
+ }
if (directInterfaceBuilders != null) {
for (int i = 0; i < directInterfaceBuilders.length; i++) {
@@ -1459,516 +1552,1460 @@
/// [ClassHierarchyNode].
Map<Name, ClassMember> interfaceSetterMap = {};
- void registerOverrideCheck(
- ClassMember member, ClassMember overriddenMember) {
+ /// Map for members declared in this class to the members that they
+ /// override. This is used for checking valid overrides and to ensure that
+ /// override inference correctly propagates inferred types through the
+ /// class hierarchy.
+ Map<ClassMember, Set<ClassMember>> declaredOverridesMap = {};
+
+ /// In case this class is a mixin application, this maps members declared in
+ /// the mixin to the members that they override. This is used for checking
+ /// valid overrides but _not_ as for [declaredOverridesMap] for override
+ /// inference.
+ Map<ClassMember, Set<ClassMember>> mixinApplicationOverridesMap = {};
+
+ /// In case this class is concrete, this maps concrete members that are
+ /// inherited into this class to the members they should override to validly
+ /// implement the interface of this class.
+ Map<ClassMember, Set<ClassMember>> inheritedImplementsMap = {};
+
+ /// In case this class is concrete, this holds the interface members
+ /// without a corresponding class member. These are either reported as
+ /// missing implementations or trigger insertion of noSuchMethod forwarders.
+ List<ClassMember> abstractMembers = [];
+
+ ClassHierarchyNodeDataForTesting dataForTesting;
+ if (retainDataForTesting) {
+ dataForTesting = new ClassHierarchyNodeDataForTesting(
+ abstractMembers,
+ declaredOverridesMap,
+ mixinApplicationOverridesMap,
+ inheritedImplementsMap);
+ }
+
+ /// Registers that the current class has an interface member without a
+ /// corresponding class member.
+ ///
+ /// This is used to report missing implementation or, in the case the class
+ /// has a user defined concrete noSuchMethod, to insert noSuchMethod
+ /// forwarders. (Currently, insertion of forwarders is handled elsewhere.)
+ ///
+ /// For instance:
+ ///
+ /// abstract class Interface {
+ /// method();
+ /// }
+ /// class Class1 implements Interface {
+ /// // Missing implementation for `Interface.method`.
+ /// }
+ /// class Class2 implements Interface {
+ /// noSuchMethod(_) {}
+ /// // A noSuchMethod forwarder is added for `Interface.method`.
+ /// }
+ ///
+ void registerAbstractMember(ClassMember abstractMember) {
+ if (!abstractMember.isInternalImplementation) {
+ /// If `isInternalImplementation` is `true`, the member is synthesized
+ /// implementation that does not require implementation in other
+ /// classes.
+ ///
+ /// This is for instance used for late lowering where
+ ///
+ /// class Interface {
+ /// late int? field;
+ /// }
+ /// class Class implements Interface {
+ /// int? field;
+ /// }
+ ///
+ /// is encoded as
+ ///
+ /// class Interface {
+ /// bool _#field#isSet = false;
+ /// int? _#field = null;
+ /// int? get field => _#field#isSet ? _#field : throw ...;
+ /// void set field(int? value) { ... }
+ /// }
+ /// class Class implements Interface {
+ /// int? field;
+ /// }
+ ///
+ /// and `Class` should not be required to implement
+ /// `Interface._#field#isSet` and `Interface._#field`.
+ abstractMembers.add(abstractMember);
+ }
+ }
+
+ /// Registers that [inheritedMember] should be checked to validly override
+ /// [overrides].
+ ///
+ /// This is needed in the case where a concrete member is inherited into
+ /// a concrete subclass. For instance:
+ ///
+ /// class Super {
+ /// void method() {}
+ /// }
+ /// abstract class Interface {
+ /// void method();
+ /// }
+ /// class Class extends Super implements Interface {}
+ ///
+ /// Here `Super.method` must be checked to be a valid implementation for
+ /// `Interface.method` by being a valid override of it.
+ void registerInheritedImplements(
+ ClassMember inheritedMember, Set<ClassMember> overrides,
+ {ClassMember aliasForTesting}) {
if (classBuilder is SourceClassBuilder) {
- if (overriddenMember.hasDeclarations &&
- classBuilder == overriddenMember.classBuilder) {
- for (int i = 0; i < overriddenMember.declarations.length; i++) {
- hierarchy.registerOverrideCheck(
- classBuilder, member, overriddenMember.declarations[i]);
- }
- } else {
- hierarchy.registerOverrideCheck(
- classBuilder, member, overriddenMember);
+ assert(
+ inheritedMember.classBuilder != classBuilder,
+ "Only inherited members can implement by inheritance: "
+ "${inheritedMember}");
+ inheritedImplementsMap[inheritedMember] = overrides;
+ if (dataForTesting != null && aliasForTesting != null) {
+ dataForTesting.aliasMap[aliasForTesting] = inheritedMember;
}
}
}
- memberMap.forEach((Name name, Tuple tuple) {
- Set<ClassMember> overriddenMembers = {};
+ /// Returns `true` if the current class is from an opt-out library and
+ /// [classMember] is from an opt-in library.
+ ///
+ /// In this case a member signature needs to be inserted to show the
+ /// legacy erased type of the interface member. For instance:
+ ///
+ /// // Opt-in library:
+ /// class Super {
+ /// int? method(int i) {}
+ /// }
+ /// // Opt-out library:
+ /// class Class extends Super {
+ /// // A member signature is inserted:
+ /// // int* method(int* i);
+ /// }
+ ///
+ bool needsMemberSignatureFor(ClassMember classMember) {
+ return !classBuilder.library.isNonNullableByDefault &&
+ classMember.classBuilder.library.isNonNullableByDefault;
+ }
- void registerOverrideDependency(
- ClassMember member, ClassMember overriddenMember) {
- if (classBuilder == member.classBuilder && member.isSourceDeclaration) {
- if (overriddenMember.hasDeclarations &&
- classBuilder == overriddenMember.classBuilder) {
- for (int i = 0; i < overriddenMember.declarations.length; i++) {
- registerOverrideDependency(
- member, overriddenMember.declarations[i]);
- }
+ memberMap.forEach((Name name, Tuple tuple) {
+ /// The computation starts by sanitizing the members. Conflicts between
+ /// methods and properties (getters/setters) or between static and
+ /// instance members are reported. Conflicting members and members
+ /// overridden by duplicates are removed.
+ ///
+ /// For this [definingGetable] and [definingSetable] hold the first member
+ /// of its kind found among declared, mixed in, extended and implemented
+ /// members.
+ ///
+ /// Conflicts between [definingGetable] and [definingSetable] are reported
+ /// afterwards.
+
+ ClassMember definingGetable;
+ ClassMember definingSetable;
+
+ ClassMember declaredGetable = tuple.declaredMember;
+ if (declaredGetable != null) {
+ /// class Class {
+ /// method() {}
+ /// }
+ definingGetable = declaredGetable;
+ }
+ ClassMember declaredSetable = tuple.declaredSetter;
+ if (declaredSetable != null) {
+ /// class Class {
+ /// set setter(value) {}
+ /// }
+ definingSetable = declaredSetable;
+ }
+
+ ClassMember mixedInGetable;
+ if (tuple.mixedInMember != null &&
+ !tuple.mixedInMember.isStatic &&
+ !tuple.mixedInMember.isDuplicate) {
+ /// We treat
+ ///
+ /// class Mixin {
+ /// static method1() {}
+ /// method2() {}
+ /// method2() {}
+ /// }
+ /// class Class with Mixin {}
+ ///
+ /// as
+ ///
+ /// class Mixin {}
+ /// class Class with Mixin {}
+ ///
+ if (definingGetable == null) {
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class with Mixin {}
+ definingGetable = mixedInGetable = tuple.mixedInMember;
+ } else if (!definingGetable.isDuplicate) {
+ // This case is currently unreachable from source code since classes
+ // cannot both declare and mix in members. From dill, this can occur
+ // but should not conflicting members.
+ //
+ // The case is handled for consistency.
+ if (definingGetable.isStatic ||
+ definingGetable.isProperty != tuple.mixedInMember.isProperty) {
+ reportInheritanceConflict(definingGetable, tuple.mixedInMember);
} else {
- overriddenMembers.add(overriddenMember);
+ mixedInGetable = tuple.mixedInMember;
+ }
+ }
+ }
+ ClassMember mixedInSetable;
+ if (tuple.mixedInSetter != null &&
+ !tuple.mixedInSetter.isStatic &&
+ !tuple.mixedInSetter.isDuplicate) {
+ /// We treat
+ ///
+ /// class Mixin {
+ /// static set setter1(value) {}
+ /// set setter2(value) {}
+ /// set setter2(value) {}
+ /// }
+ /// class Class with Mixin {}
+ ///
+ /// as
+ ///
+ /// class Mixin {}
+ /// class Class with Mixin {}
+ ///
+ if (definingSetable == null) {
+ /// class Mixin {
+ /// set setter(value) {}
+ /// }
+ /// class Class with Mixin {}
+ definingSetable = mixedInSetable = tuple.mixedInSetter;
+ } else if (!definingSetable.isDuplicate) {
+ if (definingSetable.isStatic ||
+ definingSetable.isProperty != tuple.mixedInSetter.isProperty) {
+ reportInheritanceConflict(definingGetable, tuple.mixedInSetter);
+ } else {
+ mixedInSetable = tuple.mixedInSetter;
}
}
}
- ClassMember computeClassMember(
+ ClassMember extendedGetable;
+ if (tuple.extendedMember != null &&
+ !tuple.extendedMember.isStatic &&
+ !tuple.extendedMember.isDuplicate) {
+ /// We treat
+ ///
+ /// class Super {
+ /// static method1() {}
+ /// method2() {}
+ /// method2() {}
+ /// }
+ /// class Class extends Super {}
+ ///
+ /// as
+ ///
+ /// class Super {}
+ /// class Class extends Super {}
+ ///
+ if (definingGetable == null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {}
+ definingGetable = extendedGetable = tuple.extendedMember;
+ } else if (!definingGetable.isDuplicate) {
+ if (definingGetable.isStatic ||
+ definingGetable.isProperty != tuple.extendedMember.isProperty) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// static method() {}
+ /// }
+ ///
+ /// or
+ ///
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// get getter => 0;
+ /// }
+ reportInheritanceConflict(definingGetable, tuple.extendedMember);
+ } else {
+ extendedGetable = tuple.extendedMember;
+ }
+ }
+ }
+ ClassMember extendedSetable;
+ if (tuple.extendedSetter != null &&
+ !tuple.extendedSetter.isStatic &&
+ !tuple.extendedSetter.isDuplicate) {
+ /// We treat
+ ///
+ /// class Super {
+ /// static set setter1(value) {}
+ /// set setter2(value) {}
+ /// set setter2(value) {}
+ /// }
+ /// class Class extends Super {}
+ ///
+ /// as
+ ///
+ /// class Super {}
+ /// class Class extends Super {}
+ ///
+ if (definingSetable == null) {
+ /// class Super {
+ /// set setter(value) {}
+ /// }
+ /// class Class extends Super {}
+ definingSetable = extendedSetable = tuple.extendedSetter;
+ } else if (!definingSetable.isDuplicate) {
+ if (definingSetable.isStatic ||
+ definingSetable.isProperty != tuple.extendedSetter.isProperty) {
+ reportInheritanceConflict(definingSetable, tuple.extendedSetter);
+ } else {
+ extendedSetable = tuple.extendedSetter;
+ }
+ }
+ }
+
+ // TODO(johnniwinther): Remove extended and mixed in members/setters
+ // from implemented members/setters. Mixin applications always implement
+ // the mixin class leading to unnecessary interface members.
+ List<ClassMember> implementedGetables;
+ if (tuple.implementedMembers != null &&
+ // Skip implemented members if we already have a duplicate.
+ !(definingGetable != null && definingGetable.isDuplicate)) {
+ for (int i = 0; i < tuple.implementedMembers.length; i++) {
+ ClassMember implementedGetable = tuple.implementedMembers[i];
+ if (implementedGetable.isStatic || implementedGetable.isDuplicate) {
+ /// We treat
+ ///
+ /// class Interface {
+ /// static method1() {}
+ /// method2() {}
+ /// method2() {}
+ /// }
+ /// class Class implements Interface {}
+ ///
+ /// as
+ ///
+ /// class Interface {}
+ /// class Class implements Interface {}
+ ///
+ implementedGetable = null;
+ } else {
+ if (definingGetable == null) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {}
+ definingGetable = implementedGetable;
+ } else if (definingGetable.isStatic ||
+ definingGetable.isProperty != implementedGetable.isProperty) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {
+ /// static method() {}
+ /// }
+ ///
+ /// or
+ ///
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {
+ /// get getter => 0;
+ /// }
+ reportInheritanceConflict(definingGetable, implementedGetable);
+ implementedGetable = null;
+ }
+ }
+ if (implementedGetable == null) {
+ // On the first skipped member we add all previous.
+ implementedGetables ??= tuple.implementedMembers.take(i).toList();
+ } else if (implementedGetables != null) {
+ // If already skipping members we add [implementedGetable]
+ // explicitly.
+ implementedGetables.add(implementedGetable);
+ }
+ }
+ if (implementedGetables == null) {
+ // No members were skipped so we use the full list.
+ implementedGetables = tuple.implementedMembers;
+ } else if (implementedGetables.isEmpty) {
+ // No members were included.
+ implementedGetables = null;
+ }
+ }
+
+ List<ClassMember> implementedSetables;
+ if (tuple.implementedSetters != null &&
+ // Skip implemented setters if we already have a duplicate.
+ !(definingSetable != null && definingSetable.isDuplicate)) {
+ for (int i = 0; i < tuple.implementedSetters.length; i++) {
+ ClassMember implementedSetable = tuple.implementedSetters[i];
+ if (implementedSetable.isStatic || implementedSetable.isDuplicate) {
+ /// We treat
+ ///
+ /// class Interface {
+ /// static set setter1(value) {}
+ /// set setter2(value) {}
+ /// set setter2(value) {}
+ /// }
+ /// class Class implements Interface {}
+ ///
+ /// as
+ ///
+ /// class Interface {}
+ /// class Class implements Interface {}
+ ///
+ implementedSetable = null;
+ } else {
+ if (definingSetable == null) {
+ /// class Interface {
+ /// set setter(value) {}
+ /// }
+ /// class Class implements Interface {}
+ definingSetable = implementedSetable;
+ } else if (definingSetable.isStatic ||
+ definingSetable.isProperty != implementedSetable.isProperty) {
+ /// class Interface {
+ /// set setter(value) {}
+ /// }
+ /// class Class implements Interface {
+ /// static set setter(value) {}
+ /// }
+ reportInheritanceConflict(definingSetable, implementedSetable);
+ implementedSetable = null;
+ }
+ }
+ if (implementedSetable == null) {
+ // On the first skipped setter we add all previous.
+ implementedSetables ??= tuple.implementedSetters.take(i).toList();
+ } else if (implementedSetables != null) {
+ // If already skipping setters we add [implementedSetable]
+ // explicitly.
+ implementedSetables.add(implementedSetable);
+ }
+ }
+ if (implementedSetables == null) {
+ // No setters were skipped so we use the full list.
+ implementedSetables = tuple.implementedSetters;
+ } else if (implementedSetables.isEmpty) {
+ // No setters were included.
+ implementedSetables = null;
+ }
+ }
+
+ if (definingGetable != null && definingSetable != null) {
+ if (definingGetable.isStatic != definingSetable.isStatic ||
+ definingGetable.isProperty != definingSetable.isProperty) {
+ reportInheritanceConflict(definingGetable, definingSetable);
+ // TODO(johnniwinther): Should we remove [definingSetable]? If we
+ // leave it in this conflict will also be reported in subclasses. If
+ // we remove it, any write to the setable will be unresolved.
+ }
+ }
+
+ // TODO(johnniwinther): Handle declared members together with mixed in
+ // members. This should only occur from .dill, though.
+ if (mixedInGetable != null) {
+ declaredGetable = null;
+ }
+ if (mixedInSetable != null) {
+ declaredSetable = null;
+ }
+
+ /// Set to `true` if declared members have been registered in
+ /// [registerDeclaredOverride] or [registerMixedInOverride].
+ bool hasDeclaredMembers = false;
+
+ /// Declared methods, getters and setters registered in
+ /// [registerDeclaredOverride].
+ ClassMember declaredMethod;
+ List<ClassMember> declaredProperties;
+
+ /// Declared methods, getters and setters registered in
+ /// [registerDeclaredOverride].
+ ClassMember mixedInMethod;
+ List<ClassMember> mixedInProperties;
+
+ /// Registers that [declaredMember] overrides extended and implemented
+ /// members.
+ ///
+ /// Getters and setters share overridden members so the registration
+ /// of override relations is performed after the interface members have
+ /// been computed.
+ ///
+ /// Declared members must be checked for valid override of the overridden
+ /// members _and_ must register an override dependency with the overridden
+ /// members so that override inference can propagate inferred types
+ /// correctly. For instance:
+ ///
+ /// class Super {
+ /// int get property => 42;
+ /// }
+ /// class Class extends Super {
+ /// void set property(value) {}
+ /// }
+ ///
+ /// Here the parameter type of the setter `Class.property` must be
+ /// inferred from the type of the getter `Super.property`.
+ void registerDeclaredOverride(ClassMember declaredMember,
+ {ClassMember aliasForTesting}) {
+ if (classBuilder is SourceClassBuilder && !declaredMember.isStatic) {
+ assert(
+ declaredMember.isSourceDeclaration &&
+ declaredMember.classBuilder == classBuilder,
+ "Only declared members can override: ${declaredMember}");
+ hasDeclaredMembers = true;
+ if (declaredMember.isProperty) {
+ declaredProperties ??= [];
+ declaredProperties.add(declaredMember);
+ } else {
+ assert(
+ declaredMethod == null,
+ "Multiple methods unexpectedly declared: "
+ "${declaredMethod} and ${declaredMember}.");
+ declaredMethod = declaredMember;
+ }
+ if (dataForTesting != null && aliasForTesting != null) {
+ dataForTesting.aliasMap[aliasForTesting] = declaredMember;
+ }
+ }
+ }
+
+ /// Registers that [mixedMember] overrides extended and implemented
+ /// members through application.
+ ///
+ /// Getters and setters share overridden members so the registration
+ /// of override relations in performed after the interface members have
+ /// been computed.
+ ///
+ /// Declared mixed in members must be checked for valid override of the
+ /// overridden members but _not_ register an override dependency with the
+ /// overridden members. This is in contrast to declared members. For
+ /// instance:
+ ///
+ /// class Super {
+ /// int get property => 42;
+ /// }
+ /// class Mixin {
+ /// void set property(value) {}
+ /// }
+ /// class Class = Super with Mixin;
+ ///
+ /// Here the parameter type of the setter `Mixin.property` must _not_ be
+ /// inferred from the type of the getter `Super.property`, but should
+ /// instead default to `dynamic`.
+ void registerMixedInOverride(ClassMember mixedInMember,
+ {ClassMember aliasForTesting}) {
+ assert(mixedInMember.classBuilder != classBuilder,
+ "Only mixin members can override by application: ${mixedInMember}");
+ if (classBuilder is SourceClassBuilder) {
+ hasDeclaredMembers = true;
+ if (mixedInMember.isProperty) {
+ mixedInProperties ??= [];
+ mixedInProperties.add(mixedInMember);
+ } else {
+ assert(
+ mixedInMethod == null,
+ "Multiple methods unexpectedly declared in mixin: "
+ "${mixedInMethod} and ${mixedInMember}.");
+ mixedInMethod = mixedInMember;
+ }
+ if (dataForTesting != null && aliasForTesting != null) {
+ dataForTesting.aliasMap[aliasForTesting] = mixedInMember;
+ }
+ }
+ }
+
+ /// Computes the class and interface members for a method, getter, or
+ /// setter in the current [tuple].
+ ///
+ /// [definingMember] is the member which defines whether the computation
+ /// is for a method, a getter or a setter.
+ /// [declaredMember] is the member declared in the current class, if any.
+ /// [mixedInMember] is the member declared in a mixin that is mixed into
+ /// the current current class, if any.
+ /// [extendedMember] is the member inherited from the super class.
+ /// [implementedMembers] are the members inherited from the super
+ /// interfaces, if none this is `null`.
+ ///
+ /// The computed class and interface members are added to [classMemberMap]
+ /// and [interfaceMemberMap], respectively.
+ ClassMember computeMembers(
+ {ClassMember definingMember,
ClassMember declaredMember,
ClassMember mixedInMember,
ClassMember extendedMember,
- bool forSetter) {
+ List<ClassMember> implementedMembers,
+ Map<Name, ClassMember> classMemberMap,
+ Map<Name, ClassMember> interfaceMemberMap}) {
+ ClassMember classMember;
+ ClassMember interfaceMember;
+
if (mixedInMember != null) {
- // TODO(johnniwinther): Handle members declared in mixin applications
- // correctly.
- declaredMember = null;
- }
- if (declaredMember != null) {
- if (extendedMember != null && !extendedMember.isStatic) {
- if (declaredMember == extendedMember) return declaredMember;
- if (declaredMember.isDuplicate || extendedMember.isDuplicate) {
- // Don't check overrides involving duplicated members.
- return declaredMember;
- }
- ClassMember result =
- checkInheritanceConflict(declaredMember, extendedMember);
- if (result != null) return result;
- assert(
- declaredMember.isProperty == extendedMember.isProperty,
- "Unexpected member combination: "
- "$declaredMember vs $extendedMember");
- result = declaredMember;
+ if (mixedInMember.isAbstract) {
+ /// class Mixin {
+ /// method();
+ /// }
+ /// class Class = Object with Mixin;
- // [declaredMember] is a method declared in [cls]. This means it
- // defines the interface of this class regardless if its abstract.
- if (!declaredMember.isSynthesized) {
- registerOverrideDependency(
- declaredMember, extendedMember.abstract);
- registerOverrideCheck(declaredMember, extendedMember.abstract);
+ /// Interface members from the extended, mixed in, and implemented
+ /// members define the combined member signature.
+ Set<ClassMember> interfaceMembers = {};
+
+ if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method();
+ /// }
+ /// class Class = Super with Mixin;
+ interfaceMembers.add(extendedMember.interfaceMember);
}
- if (declaredMember.isAbstract) {
- if (extendedMember.isAbstract) {
- recordAbstractMember(declaredMember);
- } else {
- if (!classBuilder.isAbstract) {
- // The interface of this class is [declaredMember]. But the
- // implementation is [extendedMember]. So [extendedMember]
- // must implement [declaredMember], unless [cls] is abstract.
- registerOverrideCheck(extendedMember, declaredMember);
- }
- ClassMember concrete = extendedMember.concrete;
- result = new AbstractMemberOverridingImplementation(
- classBuilder,
- declaredMember,
- concrete,
- declaredMember.isProperty,
- forSetter,
- shouldModifyKernel,
- concrete.isAbstract,
- concrete.name);
- hierarchy.registerMemberComputation(result);
+ interfaceMembers.add(mixedInMember);
+
+ if (implementedMembers != null) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method();
+ /// }
+ /// class Class = Object with Mixin implements Interface;
+ interfaceMembers.addAll(implementedMembers);
+ }
+
+ /// We always create a synthesized interface member, even in the
+ /// case of [interfaceMembers] being a singleton, to insert the
+ /// abstract mixin stub.
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, interfaceMembers.toList(),
+ superClassMember: extendedMember,
+ canonicalMember: mixedInMember,
+ mixedInMember: mixedInMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+
+ if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method();
+ /// }
+ /// class Class = Super with Mixin;
+ ///
+ /// The concrete extended member is the class member but might
+ /// be overwritten by a concrete forwarding stub:
+ ///
+ /// class Super {
+ /// method(int i) {}
+ /// }
+ /// class Interface {
+ /// method(covariant int i) {}
+ /// }
+ /// class Mixin {
+ /// method(int i);
+ /// }
+ /// // A concrete forwarding stub
+ /// // method(covariant int i) => super.method(i);
+ /// // will be inserted.
+ /// class Class = Super with Mixin implements Interface;
+ ///
+ classMember = new InheritedClassMemberImplementsInterface(
+ classBuilder, name,
+ inheritedClassMember: extendedMember,
+ implementedInterfaceMember: interfaceMember,
+ forSetter: definingMember.forSetter,
+ isProperty: definingMember.isProperty);
+ hierarchy.registerMemberComputation(classMember);
+ if (!classBuilder.isAbstract) {
+ registerInheritedImplements(extendedMember, {interfaceMember},
+ aliasForTesting: classMember);
}
+ } else if (!classBuilder.isAbstract) {
+ /// class Mixin {
+ /// method(); // Missing implementation.
+ /// }
+ /// class Class = Object with Mixin;
+ registerAbstractMember(interfaceMember);
}
- assert(
- !(classBuilder.isMixinApplication &&
- declaredMember.classBuilder != classBuilder),
- "Unexpected declared member ${declaredMember} in "
- "${classBuilder} from foreign class.");
- if (result.name == noSuchMethodName &&
- !result.isObjectMember(objectClass)) {
- hasNoSuchMethod = true;
- }
- return result;
- } else {
- if (declaredMember.isAbstract) {
- recordAbstractMember(declaredMember);
- }
- return declaredMember;
- }
- } else if (mixedInMember != null) {
- if (extendedMember != null && !extendedMember.isStatic) {
- if (mixedInMember == extendedMember) return mixedInMember;
- if (mixedInMember.isDuplicate || extendedMember.isDuplicate) {
- // Don't check overrides involving duplicated members.
- return mixedInMember;
- }
- ClassMember result =
- checkInheritanceConflict(mixedInMember, extendedMember);
- if (result != null) return result;
- assert(
- mixedInMember.isProperty == extendedMember.isProperty,
- "Unexpected member combination: "
- "$mixedInMember vs $extendedMember");
- result = mixedInMember;
-
- // [declaredMember] is a method declared in [cls]. This means it
- // defines the interface of this class regardless if its abstract.
if (!mixedInMember.isSynthesized) {
- registerOverrideDependency(
- mixedInMember, extendedMember.abstract);
- registerOverrideCheck(mixedInMember, extendedMember.abstract);
+ /// Members declared in the mixin must override extended and
+ /// implemented members.
+ ///
+ /// When loading from .dill the mixed in member might be
+ /// synthesized, for instance a member signature or forwarding
+ /// stub, and this should not be checked to override the extended
+ /// and implemented members:
+ ///
+ /// // Opt-out library, from source:
+ /// class Mixin {}
+ /// // Opt-out library, from .dill:
+ /// class Mixin {
+ /// ...
+ /// String* toString(); // member signature
+ /// }
+ /// // Opt-out library, from source:
+ /// class Class = Object with Mixin;
+ /// // Mixin.toString should not be checked to override
+ /// // Object.toString.
+ ///
+ registerMixedInOverride(mixedInMember,
+ aliasForTesting: interfaceMember);
}
-
- if (mixedInMember.isAbstract) {
- if (extendedMember.isAbstract) {
- recordAbstractMember(mixedInMember);
- } else {
- if (!classBuilder.isAbstract) {
- // The interface of this class is [declaredMember]. But the
- // implementation is [extendedMember]. So [extendedMember]
- // must implement [declaredMember], unless [cls] is abstract.
- registerOverrideCheck(extendedMember, mixedInMember);
- }
- ClassMember concrete = extendedMember.concrete;
- result = new AbstractMemberOverridingImplementation(
- classBuilder,
- mixedInMember,
- concrete,
- mixedInMember.isProperty,
- forSetter,
- shouldModifyKernel,
- concrete.isAbstract,
- concrete.name);
- hierarchy.registerMemberComputation(result);
- }
- } else {
- assert(
- (classBuilder.isMixinApplication &&
- mixedInMember.classBuilder != classBuilder),
- "Unexpected mixed in member ${mixedInMember} in "
- "${classBuilder} from the current class.");
- result = InheritedImplementationInterfaceConflict.combined(
- classBuilder,
- mixedInMember,
- /*isSuperClassMemberMixedIn = */ true,
- extendedMember,
- forSetter,
- shouldModifyKernel,
- isInheritableConflict: false);
- if (result.needsComputation) {
- hierarchy.registerMemberComputation(result);
- }
- }
-
- if (result.name == noSuchMethodName &&
- !result.isObjectMember(objectClass)) {
- hasNoSuchMethod = true;
- }
- return result;
} else {
- if (mixedInMember.isAbstract) {
- recordAbstractMember(mixedInMember);
+ assert(!mixedInMember.isAbstract);
+
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Object with Mixin;
+ ///
+
+ /// Interface members from the extended, mixed in, and implemented
+ /// members define the combined member signature.
+ Set<ClassMember> interfaceMembers = {};
+
+ if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Super with Mixin;
+ interfaceMembers.add(extendedMember.interfaceMember);
+ }
+
+ interfaceMembers.add(mixedInMember);
+
+ if (implementedMembers != null) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Object with Mixin implements Interface;
+ interfaceMembers.addAll(implementedMembers);
+ }
+
+ /// We always create a synthesized interface member, even in the
+ /// case of [interfaceMembers] being a singleton, to insert the
+ /// concrete mixin stub.
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, interfaceMembers.toList(),
+ superClassMember: mixedInMember,
+ canonicalMember: mixedInMember,
+ mixedInMember: mixedInMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+
+ /// The concrete mixed in member is the class member but will
+ /// be overwritten by a concrete mixin stub:
+ ///
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// // A concrete mixin stub
+ /// // method() => super.method();
+ /// // will be inserted.
+ /// class Class = Object with Mixin;
+ ///
+ classMember = new InheritedClassMemberImplementsInterface(
+ classBuilder, name,
+ inheritedClassMember: mixedInMember,
+ implementedInterfaceMember: interfaceMember,
+ forSetter: definingMember.forSetter,
+ isProperty: definingMember.isProperty);
+ hierarchy.registerMemberComputation(classMember);
+
+ if (!classBuilder.isAbstract) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Object with Mixin;
+ ///
+ /// [mixinMember] must implemented interface member.
+ registerInheritedImplements(mixedInMember, {interfaceMember},
+ aliasForTesting: classMember);
+ }
+ if (!mixedInMember.isSynthesized) {
+ /// Members declared in the mixin must override extended and
+ /// implemented members.
+ ///
+ /// When loading from .dill the mixed in member might be
+ /// synthesized, for instance a member signature or forwarding
+ /// stub, and this should not be checked to override the extended
+ /// and implemented members.
+ ///
+ /// These synthesized mixed in members should always be abstract
+ /// and therefore not be handled here, but we handled them here
+ /// for consistency.
+ registerMixedInOverride(mixedInMember);
+ }
+ }
+ } else if (declaredMember != null) {
+ if (declaredMember.isAbstract) {
+ /// class Class {
+ /// method();
+ /// }
+ interfaceMember = declaredMember;
+
+ /// Interface members from the declared, extended, and implemented
+ /// members define the combined member signature.
+ Set<ClassMember> interfaceMembers = {};
+
+ if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// method();
+ /// }
+ interfaceMembers.add(extendedMember);
+ }
+
+ interfaceMembers.add(declaredMember);
+
+ if (implementedMembers != null) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {
+ /// method();
+ /// }
+ interfaceMembers.addAll(implementedMembers);
+ }
+
+ /// If only one member defines the interface member there is no
+ /// need for a synthesized interface member, since its result will
+ /// simply be that one member.
+ if (interfaceMembers.length > 1) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class extends Super implements Interface {
+ /// method();
+ /// }
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, interfaceMembers.toList(),
+ superClassMember: extendedMember,
+ canonicalMember: declaredMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+ }
+
+ if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// method();
+ /// }
+ ///
+ /// The concrete extended member is the class member but might
+ /// be overwritten by a concrete forwarding stub:
+ ///
+ /// class Super {
+ /// method(int i) {}
+ /// }
+ /// class Interface {
+ /// method(covariant int i) {}
+ /// }
+ /// class Class extends Super implements Interface {
+ /// // This will be turned into the concrete forwarding stub
+ /// // method(covariant int i) => super.method(i);
+ /// method(int i);
+ /// }
+ ///
+ classMember = new InheritedClassMemberImplementsInterface(
+ classBuilder, name,
+ inheritedClassMember: extendedMember,
+ implementedInterfaceMember: interfaceMember,
+ forSetter: definingMember.forSetter,
+ isProperty: definingMember.isProperty);
+ hierarchy.registerMemberComputation(classMember);
+
+ if (!classBuilder.isAbstract) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// method();
+ /// }
+ ///
+ /// [extendedMember] must implemented interface member.
+ registerInheritedImplements(extendedMember, {interfaceMember},
+ aliasForTesting: classMember);
+ }
+ } else if (!classBuilder.isAbstract) {
+ /// class Class {
+ /// method(); // Missing implementation.
+ /// }
+ registerAbstractMember(declaredMember);
+ }
+
+ /// The declared member must override extended and implemented
+ /// members.
+ registerDeclaredOverride(declaredMember,
+ aliasForTesting: interfaceMember);
+ } else {
+ assert(!declaredMember.isAbstract);
+
+ /// class Class {
+ /// method() {}
+ /// }
+ classMember = declaredMember;
+
+ /// The declared member must override extended and implemented
+ /// members.
+ registerDeclaredOverride(declaredMember);
+ }
+ } else if (extendedMember != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {}
+ assert(!extendedMember.isAbstract,
+ "Abstract extended member: ${extendedMember}");
+
+ classMember = extendedMember;
+
+ if (implementedMembers != null) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class extends Super implements Interface {}
+ ClassMember extendedInterfaceMember =
+ extendedMember.interfaceMember;
+
+ /// Interface members from the extended and implemented
+ /// members define the combined member signature.
+ Set<ClassMember> interfaceMembers = {extendedInterfaceMember};
+
+ // TODO(johnniwinther): The extended member might be included in
+ // a synthesized implemented member. For instance:
+ //
+ // class Super {
+ // void method() {}
+ // }
+ // class Interface {
+ // void method() {}
+ // }
+ // abstract class Class extends Super implements Interface {
+ // // Synthesized interface member of
+ // // {Super.method, Interface.method}
+ // }
+ // class Sub extends Class {
+ // // Super.method implements Class.method =
+ // // {Super.method, Interface.method}
+ // // Synthesized interface member of
+ // // {Super.method, Class.method}
+ // }
+ //
+ // Maybe we should recognized this.
+ interfaceMembers.addAll(implementedMembers);
+
+ /// Normally, if only one member defines the interface member there
+ /// is no need for a synthesized interface member, since its result
+ /// will simply be that one member, but if the extended member is
+ /// from an opt-in library and the current class is from an opt-out
+ /// library we need to create a member signature:
+ ///
+ /// // Opt-in:
+ /// class Super {
+ /// int? method() => null;
+ /// }
+ /// class Interface implements Super {}
+ /// // Opt-out:
+ /// class Class extends Super implements Interface {
+ /// // Member signature added:
+ /// int* method();
+ /// }
+ ///
+ if (interfaceMembers.length == 1 &&
+ !needsMemberSignatureFor(extendedInterfaceMember)) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface implements Super {}
+ /// class Class extends Super implements Interface {}
+ interfaceMember = interfaceMembers.first;
} else {
- if (!mixedInMember.isSynthesized) {
- mixedInMember = new InterfaceConflict(
- classBuilder,
- mixedInMember,
- /*_isSuperClassMemberMixedIn = */ true,
- [mixedInMember],
- mixedInMember.isProperty,
- forSetter,
- shouldModifyKernel,
- mixedInMember.isAbstract,
- mixedInMember.name,
- isImplicitlyAbstract: mixedInMember.isAbstract);
- hierarchy.registerMemberComputation(mixedInMember);
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class extends Super implements Interface {}
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, interfaceMembers.toList(),
+ superClassMember: extendedMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+ }
+ if (interfaceMember == classMember) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface implements Super {}
+ /// class Class extends Super implements Interface {}
+ ///
+ /// We keep track of whether a class needs interfaces, that is,
+ /// whether is has any members that have an interface member
+ /// different from its corresponding class member, so we set
+ /// [interfaceMember] to `null` so show that the interface member
+ /// is not needed.
+ interfaceMember = null;
+ } else {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class extends Super implements Interface {}
+ ///
+ /// The concrete extended member is the class member but might
+ /// be overwritten by a concrete forwarding stub:
+ ///
+ /// class Super {
+ /// method(int i) {}
+ /// }
+ /// class Interface {
+ /// method(covariant int i) {}
+ /// }
+ /// class Class extends Super implements Interface {
+ /// // A concrete forwarding stub will be created:
+ /// // method(covariant int i) => super.method(i);
+ /// }
+ ///
+ classMember = new InheritedClassMemberImplementsInterface(
+ classBuilder, name,
+ inheritedClassMember: extendedMember,
+ implementedInterfaceMember: interfaceMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter);
+ hierarchy.registerMemberComputation(classMember);
+ if (!classBuilder.isAbstract) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class extends Super implements Interface {}
+ registerInheritedImplements(extendedMember, {interfaceMember},
+ aliasForTesting: classMember);
}
}
- return mixedInMember;
+ } else if (needsMemberSignatureFor(extendedMember)) {
+ /// // Opt-in library:
+ /// class Super {
+ /// method() {}
+ /// }
+ /// // opt-out library:
+ /// class Class extends Super {}
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, [extendedMember],
+ superClassMember: extendedMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+
+ /// The concrete extended member is the class member and should
+ /// be able to be overwritten by a synthesized concrete member here,
+ /// but we handle the case for consistency.
+ classMember = new InheritedClassMemberImplementsInterface(
+ classBuilder, name,
+ inheritedClassMember: extendedMember,
+ implementedInterfaceMember: interfaceMember,
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter);
+ hierarchy.registerMemberComputation(classMember);
}
- } else if (extendedMember != null && !extendedMember.isStatic) {
- if (extendedMember.isAbstract) {
- if (isNameVisibleIn(extendedMember.name, classBuilder.library)) {
- recordAbstractMember(extendedMember);
+ } else if (implementedMembers != null) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {}
+ Set<ClassMember> interfaceMembers = implementedMembers.toSet();
+ if (interfaceMembers.isNotEmpty) {
+ /// Normally, if only one member defines the interface member there
+ /// is no need for a synthesized interface member, since its result
+ /// will simply be that one member, but if the implemented member is
+ /// from an opt-in library and the current class is from an opt-out
+ /// library we need to create a member signature:
+ ///
+ /// // Opt-in:
+ /// class Interface {
+ /// int? method() => null;
+ /// }
+ /// // Opt-out:
+ /// class Class implements Interface {
+ /// // Member signature added:
+ /// int* method();
+ /// }
+ ///
+ if (interfaceMembers.length == 1 &&
+ !needsMemberSignatureFor(interfaceMembers.first)) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {}
+ interfaceMember = interfaceMembers.first;
+ } else {
+ /// class Interface1 {
+ /// method() {}
+ /// }
+ /// class Interface2 {
+ /// method() {}
+ /// }
+ /// class Class implements Interface1, Interface2 {}
+ interfaceMember = new SynthesizedInterfaceMember(
+ classBuilder, name, interfaceMembers.toList(),
+ isProperty: definingMember.isProperty,
+ forSetter: definingMember.forSetter,
+ shouldModifyKernel: shouldModifyKernel);
+ hierarchy.registerMemberComputation(interfaceMember);
+ }
+ if (!classBuilder.isAbstract) {
+ /// class Interface {
+ /// method() {}
+ /// }
+ /// class Class implements Interface {}
+ for (ClassMember abstractMember in interfaceMembers) {
+ registerAbstractMember(abstractMember);
+ }
}
}
- if (extendedMember.name == noSuchMethodName &&
- !extendedMember.isObjectMember(objectClass)) {
+ }
+
+ if (interfaceMember != null) {
+ // We have an explicit interface.
+ hasInterfaces = true;
+ }
+ if (classMember != null) {
+ if (name == noSuchMethodName &&
+ !classMember.isObjectMember(objectClass)) {
hasNoSuchMethod = true;
}
- if (extendedMember.isInheritableConflict) {
- extendedMember = extendedMember.withParent(classBuilder);
- hierarchy.registerMemberComputation(extendedMember);
- }
- if (extendedMember.classBuilder.library.isNonNullableByDefault &&
- !classBuilder.library.isNonNullableByDefault) {
- if (!extendedMember.isSynthesized) {
- extendedMember = new InterfaceConflict(
- classBuilder,
- extendedMember.concrete,
- /*_isSuperClassMemberMixedIn = */ false,
- [extendedMember],
- extendedMember.isProperty,
- forSetter,
- shouldModifyKernel,
- extendedMember.isAbstract,
- extendedMember.name,
- isImplicitlyAbstract: extendedMember.isAbstract);
- hierarchy.registerMemberComputation(extendedMember);
- }
- }
- return extendedMember;
+ classMemberMap[name] = classMember;
+ interfaceMember ??= classMember.interfaceMember;
}
- return null;
- }
-
- ClassMember computeInterfaceMember(ClassMember classMember,
- List<ClassMember> implementedMembers, bool forSetter) {
- ClassMember interfaceMember;
- if (implementedMembers != null) {
- for (ClassMember member in implementedMembers) {
- if (member.isStatic) continue;
- if (interfaceMember == null) {
- interfaceMember = member;
- } else {
- ClassMember handleMergeConflict(ClassMember a, ClassMember b) {
- if (a == b) return a;
- if (a.isDuplicate || b.isDuplicate) {
- // Don't check overrides involving duplicated members.
- return a;
- }
- ClassMember result = checkInheritanceConflict(a, b);
- if (result != null) return result;
- assert(a.isProperty == b.isProperty,
- "Unexpected member combination: $a vs $b");
- result = a;
- result = InterfaceConflict.combined(
- classBuilder, a, b, forSetter, shouldModifyKernel);
- return result;
- }
-
- interfaceMember = handleMergeConflict(interfaceMember, member);
- }
- }
- }
- if (hasInterfaces) {
- if (interfaceMember != null) {
- if (classMember != null) {
- if (classMember == interfaceMember) return classMember;
- if (classMember.isDuplicate || interfaceMember.isDuplicate) {
- // Don't check overrides involving duplicated members.
- return classMember;
- }
- ClassMember result =
- checkInheritanceConflict(classMember, interfaceMember);
- if (result != null) return result;
- assert(
- classMember.isProperty == interfaceMember.isProperty,
- "Unexpected member combination: "
- "$classMember vs $interfaceMember");
- result = classMember;
-
- // [interfaceMember] is inherited from an interface so it is
- // implicitly abstract.
- classMember = classMember.abstract;
- interfaceMember = interfaceMember.abstract;
-
- // If [classMember] is declared in this class, it defines the
- // interface.
- if (classMember.classBuilder == classBuilder) {
- if (!classMember.isSynthesized) {
- registerOverrideDependency(classMember, interfaceMember);
- registerOverrideCheck(classMember, interfaceMember);
- }
- if (classMember.hasDeclarations) {
- if (interfaceMember.hasDeclarations &&
- interfaceMember.classBuilder == classBuilder) {
- addAllDeclarationsTo(
- interfaceMember, classMember.declarations);
- } else {
- addDeclarationIfDifferent(
- interfaceMember, classMember.declarations);
- }
- }
- } else {
- if (classMember.isAbstract) {
- result = InterfaceConflict.combined(classBuilder, classMember,
- interfaceMember, forSetter, shouldModifyKernel);
- } else {
- result = InheritedImplementationInterfaceConflict.combined(
- classBuilder,
- classMember,
- /* _isSuperClassMemberMixedIn = */ false,
- interfaceMember,
- forSetter,
- shouldModifyKernel);
- }
- if (result.needsComputation) {
- hierarchy.registerMemberComputation(result);
- }
- }
-
- return result;
- } else {
- if (isNameVisibleIn(interfaceMember.name, classBuilder.library)) {
- if (!interfaceMember.isInternalImplementation) {
- recordAbstractMember(interfaceMember);
- }
- }
- if (interfaceMember.isInheritableConflict) {
- interfaceMember = interfaceMember.withParent(classBuilder);
- hierarchy.registerMemberComputation(interfaceMember);
- }
- if (interfaceMember.classBuilder.library.isNonNullableByDefault &&
- !classBuilder.library.isNonNullableByDefault) {
- if (!interfaceMember.isSynthesized) {
- interfaceMember = new InterfaceConflict(
- classBuilder,
- null,
- /*_isSuperClassMemberMixedIn = */ false,
- [interfaceMember],
- interfaceMember.isProperty,
- forSetter,
- shouldModifyKernel,
- interfaceMember.isAbstract,
- interfaceMember.name,
- isImplicitlyAbstract: interfaceMember.isAbstract);
- hierarchy.registerMemberComputation(interfaceMember);
- }
- }
- return interfaceMember;
- }
- } else if (classMember != null) {
- return classMember;
- }
+ if (interfaceMember != null) {
+ interfaceMemberMap[name] = interfaceMember;
}
return interfaceMember;
}
- void checkMemberVsSetter(
- ClassMember member, ClassMember overriddenMember) {
- if (overriddenMember.classBuilder == classBuilder &&
- overriddenMember.hasDeclarations) {
- for (ClassMember declaration in overriddenMember.declarations) {
- checkMemberVsSetter(member, declaration);
- }
- return;
- }
-
- if (classBuilder is! SourceClassBuilder) return;
- if (overriddenMember.isStatic) return;
- if (member == overriddenMember) return;
- if (member.isDuplicate || overriddenMember.isDuplicate) {
- // Don't check overrides involving duplicated members.
- return;
- }
- ClassMember result = checkInheritanceConflict(member, overriddenMember);
- if (result != null) return;
- assert(member.isProperty == overriddenMember.isProperty,
- "Unexpected member combination: $member vs $overriddenMember");
- if (member.classBuilder == classBuilder &&
- overriddenMember.classBuilder != classBuilder) {
- if (member is SourceFieldMember) {
- registerOverrideDependency(member, overriddenMember);
- hierarchy.registerOverrideCheck(
- classBuilder, member, overriddenMember);
- } else if (member is SourceProcedureMember) {
- registerOverrideDependency(member, overriddenMember);
- hierarchy.registerOverrideCheck(
- classBuilder, member, overriddenMember);
- }
- }
+ ClassMember interfaceGetable;
+ if (definingGetable != null) {
+ interfaceGetable = computeMembers(
+ definingMember: definingGetable,
+ declaredMember: declaredGetable,
+ mixedInMember: mixedInGetable,
+ extendedMember: extendedGetable,
+ implementedMembers: implementedGetables,
+ classMemberMap: classMemberMap,
+ interfaceMemberMap: interfaceMemberMap);
}
-
- ClassMember classMember = computeClassMember(tuple.declaredMember,
- tuple.mixedInMember, tuple.extendedMember, false);
- ClassMember interfaceMember =
- computeInterfaceMember(classMember, tuple.implementedMembers, false);
- ClassMember classSetter = computeClassMember(tuple.declaredSetter,
- tuple.mixedInSetter, tuple.extendedSetter, true);
- ClassMember interfaceSetter =
- computeInterfaceMember(classSetter, tuple.implementedSetters, true);
-
- if ((tuple.mixedInMember != null || tuple.declaredMember != null) &&
- classSetter != null) {
- checkMemberVsSetter(
- tuple.mixedInMember ?? tuple.declaredMember, classSetter);
- }
- if ((tuple.mixedInSetter != null || tuple.declaredSetter != null) &&
- classMember != null) {
- checkMemberVsSetter(
- tuple.mixedInSetter ?? tuple.declaredSetter, classMember);
- }
- if (classMember != null && interfaceSetter != null) {
- checkMemberVsSetter(classMember, interfaceSetter);
- }
- if (classSetter != null && interfaceMember != null) {
- checkMemberVsSetter(classSetter, interfaceMember);
- }
-
- if (classMember != null &&
- interfaceMember != null &&
- classMember != interfaceMember) {
- if (classMember.isAbstract == interfaceMember.isAbstract) {
- // TODO(johnniwinther): Ensure that we don't have both class and
- // interface members that can give rise to a forwarding stub in
- // the current class. We might already have registered a delayed
- // member computation for the [classMember] that we're replacing
- // and therefore create two stubs for this member.
- classMember = interfaceMember;
- }
- }
- if (classSetter != null &&
- interfaceSetter != null &&
- classSetter != interfaceSetter) {
- if (classSetter.isAbstract == interfaceSetter.isAbstract) {
- // TODO(johnniwinther): Ensure that we don't have both class and
- // interface members that can give rise to a forwarding stub in
- // the current class. We might already have registered a delayed
- // member computation for the [classMember] that we're replacing
- // and therefore create two stubs for this member.
- classSetter = interfaceSetter;
- }
+ ClassMember interfaceSetable;
+ if (definingSetable != null) {
+ interfaceSetable = computeMembers(
+ definingMember: definingSetable,
+ declaredMember: declaredSetable,
+ mixedInMember: mixedInSetable,
+ extendedMember: extendedSetable,
+ implementedMembers: implementedSetables,
+ classMemberMap: classSetterMap,
+ interfaceMemberMap: interfaceSetterMap);
}
if (classBuilder is SourceClassBuilder) {
- ClassMember member = interfaceMember ?? classMember;
- ClassMember setter = interfaceSetter ?? classSetter;
- if (member != null &&
- setter != null &&
- member.isProperty &&
- setter.isProperty &&
- member.isStatic == setter.isStatic &&
- !member.isSameDeclaration(setter)) {
- hierarchy.registerGetterSetterCheck(classBuilder, member, setter);
+ if (interfaceGetable != null &&
+ interfaceSetable != null &&
+ interfaceGetable.isProperty &&
+ interfaceSetable.isProperty &&
+ interfaceGetable.isStatic == interfaceSetable.isStatic &&
+ !interfaceGetable.isSameDeclaration(interfaceSetable)) {
+ /// We need to check that the getter type is a subtype of the setter
+ /// type. For instance
+ ///
+ /// class Super {
+ /// int get property1 => null;
+ /// num get property2 => null;
+ /// }
+ /// class Mixin {
+ /// void set property1(num value) {}
+ /// void set property2(int value) {}
+ /// }
+ /// class Class = Super with Mixin;
+ ///
+ /// Here `Super.property1` and `Mixin.property1` form a valid getter/
+ /// setter pair in `Class` because the type of the getter
+ /// `Super.property1` is a subtype of the setter `Mixin.property1`.
+ ///
+ /// In contrast the pair `Super.property2` and `Mixin.property2` is
+ /// not a valid getter/setter in `Class` because the type of the getter
+ /// `Super.property2` is _not_ a subtype of the setter
+ /// `Mixin.property1`.
+ hierarchy.registerGetterSetterCheck(
+ classBuilder, interfaceGetable, interfaceSetable);
}
}
- if (classMember != null) {
- classMemberMap[name] = classMember;
- }
- if (interfaceMember != null) {
- interfaceMemberMap[name] = interfaceMember;
- }
- if (classSetter != null) {
- classSetterMap[name] = classSetter;
- }
- if (interfaceSetter != null) {
- interfaceSetterMap[name] = interfaceSetter;
- }
- if (overriddenMembers.isNotEmpty) {
- void registerOverrideDependencies(ClassMember member) {
- if (member != null &&
- member.classBuilder == classBuilder &&
- member.isSourceDeclaration) {
- member.registerOverrideDependency(overriddenMembers);
- DelayedTypeComputation computation =
- new DelayedTypeComputation(this, member, overriddenMembers);
- hierarchy.registerDelayedTypeComputation(computation);
+ if (hasDeclaredMembers) {
+ Set<ClassMember> getableOverrides = {};
+ Set<ClassMember> setableOverrides = {};
+ if (extendedGetable != null) {
+ /// (abstract) class Super {
+ /// method() {}
+ /// int get property => 0;
+ /// }
+ /// (abstract) class Class extends Super {
+ /// method() {}
+ /// set property(int value) {}
+ /// }
+ getableOverrides.add(extendedGetable.interfaceMember);
+ }
+ if (extendedSetable != null) {
+ /// (abstract) class Super {
+ /// set setter(int value) {}
+ /// set property(int value) {}
+ /// }
+ /// (abstract) class Class extends Super {
+ /// set setter(int value) {}
+ /// int get property => 0;
+ /// }
+ setableOverrides.add(extendedSetable.interfaceMember);
+ }
+ if (implementedGetables != null) {
+ /// (abstract) class Interface {
+ /// method() {}
+ /// int get property => 0;
+ /// }
+ /// (abstract) class Class implements Interface {
+ /// method() {}
+ /// set property(int value) {}
+ /// }
+ getableOverrides.addAll(implementedGetables);
+ }
+ if (implementedSetables != null) {
+ /// (abstract) class Interface {
+ /// set setter(int value) {}
+ /// set property(int value) {}
+ /// }
+ /// (abstract) class Class implements Interface {
+ /// set setter(int value) {}
+ /// int get property => 0;
+ /// }
+ setableOverrides.addAll(implementedSetables);
+ }
+ if (getableOverrides.isNotEmpty || setableOverrides.isNotEmpty) {
+ if (declaredMethod != null && getableOverrides.isNotEmpty) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Class extends Super {
+ /// method() {}
+ /// }
+ declaredOverridesMap[declaredMethod] = getableOverrides;
+ }
+ if (declaredProperties != null) {
+ Set<ClassMember> overrides;
+ if (declaredMethod != null) {
+ /// class Super {
+ /// set setter() {}
+ /// }
+ /// class Class extends Super {
+ /// method() {}
+ /// }
+ overrides = setableOverrides;
+ } else {
+ /// class Super {
+ /// get property => null
+ /// void set property(value) {}
+ /// }
+ /// class Class extends Super {
+ /// get property => null
+ /// void set property(value) {}
+ /// }
+ overrides = {...getableOverrides, ...setableOverrides};
+ }
+ if (overrides.isNotEmpty) {
+ for (ClassMember declaredMember in declaredProperties) {
+ declaredOverridesMap[declaredMember] = overrides;
+ }
+ }
+ }
+ if (mixedInMethod != null && getableOverrides.isNotEmpty) {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Super with Mixin;
+ mixinApplicationOverridesMap[mixedInMethod] = getableOverrides;
+ }
+ if (mixedInProperties != null) {
+ Set<ClassMember> overrides;
+ if (mixedInMethod != null) {
+ /// class Super {
+ /// set setter() {}
+ /// }
+ /// class Mixin {
+ /// method() {}
+ /// }
+ /// class Class = Super with Mixin;
+ overrides = setableOverrides;
+ } else {
+ /// class Super {
+ /// method() {}
+ /// }
+ /// class Mixin extends Super {
+ /// method() {}
+ /// }
+ overrides = {...getableOverrides, ...setableOverrides};
+ }
+ if (overrides.isNotEmpty) {
+ for (ClassMember mixedInMember in mixedInProperties) {
+ mixinApplicationOverridesMap[mixedInMember] = overrides;
+ }
+ }
}
}
-
- registerOverrideDependencies(
- tuple.mixedInMember ?? tuple.declaredMember);
- registerOverrideDependencies(
- tuple.mixedInSetter ?? tuple.declaredSetter);
}
});
+ if (classBuilder is SourceClassBuilder) {
+ // TODO(johnniwinther): Avoid duplicate override check computations
+ // between [declaredOverridesMap], [mixinApplicationOverridesMap] and
+ // [inheritedImplementsMap].
+
+ // TODO(johnniwinther): Ensure that a class member is only checked to
+ // validly override another member once. Currently it can happen multiple
+ // times as an inherited implementation.
+
+ declaredOverridesMap.forEach(
+ (ClassMember classMember, Set<ClassMember> overriddenMembers) {
+ /// A declared member can inherit its type from the overridden members.
+ ///
+ /// We register this with the class member itself so the it can force
+ /// computation of type on the overridden members before determining its
+ /// own type.
+ ///
+ /// Member types can be queried at arbitrary points during top level
+ /// inference so we need to ensure that types are computed in dependency
+ /// order.
+ classMember.registerOverrideDependency(overriddenMembers);
+
+ /// Not all member type are queried during top level inference so we
+ /// register delayed computation to ensure that all types have been
+ /// computed before override checks are performed.
+ DelayedTypeComputation computation =
+ new DelayedTypeComputation(this, classMember, overriddenMembers);
+ hierarchy.registerDelayedTypeComputation(computation);
+
+ /// Declared members must be checked to validly override the the
+ /// overridden members.
+ hierarchy.registerOverrideCheck(
+ classBuilder, classMember, overriddenMembers);
+ });
+
+ mixinApplicationOverridesMap.forEach(
+ (ClassMember classMember, Set<ClassMember> overriddenMembers) {
+ /// Declared mixed in members must be checked to validly override the
+ /// overridden members.
+ hierarchy.registerOverrideCheck(
+ classBuilder, classMember, overriddenMembers);
+ });
+
+ inheritedImplementsMap.forEach(
+ (ClassMember classMember, Set<ClassMember> overriddenMembers) {
+ /// Concrete members must be checked to validly override the overridden
+ /// members in concrete classes.
+ hierarchy.registerOverrideCheck(
+ classBuilder, classMember, overriddenMembers);
+ });
+ }
+
if (!hasInterfaces) {
+ /// All interface members also class members to we don't need to store
+ /// the interface members separately.
+ assert(
+ classMemberMap.length == interfaceMemberMap.length,
+ "Class/interface member mismatch. Class members: "
+ "$classMemberMap, interface members: $interfaceMemberMap.");
+ assert(
+ classSetterMap.length == interfaceSetterMap.length,
+ "Class/interface setter mismatch. Class setters: "
+ "$classSetterMap, interface setters: $interfaceSetterMap.");
+ assert(
+ classMemberMap.keys.every((Name name) =>
+ identical(classMemberMap[name], interfaceMemberMap[name])),
+ "Class/interface member mismatch. Class members: "
+ "$classMemberMap, interface members: $interfaceMemberMap.");
+ assert(
+ classSetterMap.keys.every((Name name) =>
+ identical(classSetterMap[name], interfaceSetterMap[name])),
+ "Class/interface setter mismatch. Class setters: "
+ "$classSetterMap, interface setters: $interfaceSetterMap.");
interfaceMemberMap = null;
interfaceSetterMap = null;
}
if (abstractMembers != null && !classBuilder.isAbstract) {
if (!hasNoSuchMethod) {
- reportMissingMembers();
+ reportMissingMembers(abstractMembers);
} else {
installNsmHandlers();
}
}
return new ClassHierarchyNode(
- classBuilder,
- classMemberMap,
- classSetterMap,
- interfaceMemberMap,
- interfaceSetterMap,
- superclasses,
- interfaces,
- maxInheritancePath,
- hasNoSuchMethod,
- );
+ classBuilder,
+ classMemberMap,
+ classSetterMap,
+ interfaceMemberMap,
+ interfaceSetterMap,
+ superclasses,
+ interfaces,
+ maxInheritancePath,
+ hasNoSuchMethod,
+ dataForTesting);
}
Supertype recordSupertype(Supertype supertype) {
@@ -2081,10 +3118,9 @@
interfaces.add(type);
}
- void reportMissingMembers() {
+ void reportMissingMembers(List<ClassMember> abstractMembers) {
Map<String, LocatedMessage> contextMap = <String, LocatedMessage>{};
- for (int i = 0; i < abstractMembers.length; i++) {
- ClassMember declaration = abstractMembers[i];
+ for (ClassMember declaration in unfoldDeclarations(abstractMembers)) {
if (isNameVisibleIn(declaration.name, classBuilder.library)) {
String name = declaration.fullNameForErrors;
String className = declaration.classBuilder?.fullNameForErrors;
@@ -2196,6 +3232,8 @@
final bool hasNoSuchMethod;
+ final ClassHierarchyNodeDataForTesting dataForTesting;
+
ClassHierarchyNode(
this.classBuilder,
this.classMemberMap,
@@ -2205,7 +3243,8 @@
this.superclasses,
this.interfaces,
this.maxInheritancePath,
- this.hasNoSuchMethod);
+ this.hasNoSuchMethod,
+ this.dataForTesting);
/// Returns a list of all supertypes of [classBuilder], including this node.
List<ClassHierarchyNode> computeAllSuperNodes(
@@ -2327,6 +3366,17 @@
}
}
+class ClassHierarchyNodeDataForTesting {
+ final List<ClassMember> abstractMembers;
+ final Map<ClassMember, Set<ClassMember>> declaredOverrides;
+ final Map<ClassMember, Set<ClassMember>> mixinApplicationOverrides;
+ final Map<ClassMember, Set<ClassMember>> inheritedImplements;
+ final Map<ClassMember, ClassMember> aliasMap = {};
+
+ ClassHierarchyNodeDataForTesting(this.abstractMembers, this.declaredOverrides,
+ this.mixinApplicationOverrides, this.inheritedImplements);
+}
+
List<LocatedMessage> _inheritedConflictContext(ClassMember a, ClassMember b) {
int length = a.fullNameForErrors.length;
// TODO(ahe): Delete this method when it isn't used by [InterfaceResolver].
@@ -2436,25 +3486,57 @@
}
class DelayedOverrideCheck implements DelayedCheck {
- final SourceClassBuilder classBuilder;
- final ClassMember declaredMember;
- final ClassMember overriddenMember;
+ final SourceClassBuilder _classBuilder;
+ final ClassMember _declaredMember;
+ final Set<ClassMember> _overriddenMembers;
- const DelayedOverrideCheck(
- this.classBuilder, this.declaredMember, this.overriddenMember);
+ DelayedOverrideCheck(
+ this._classBuilder, this._declaredMember, this._overriddenMembers);
void check(ClassHierarchyBuilder hierarchy) {
- void callback(
- Member declaredMember, Member interfaceMember, bool isSetter) {
- classBuilder.checkOverride(
+ Member declaredMember = _declaredMember.getMember(hierarchy);
+
+ /// If [_declaredMember] is a class member that is declared in an opt-in
+ /// library but inherited to [_classBuilder] through an opt-out class then
+ /// we need to apply legacy erasure to the declared type to get the
+ /// inherited type.
+ ///
+ /// For interface members this is handled by member signatures but since
+ /// these are abstract they will never be the inherited class member.
+ ///
+ /// For instance:
+ ///
+ /// // Opt in:
+ /// class Super {
+ /// int extendedMethod(int i, {required int j}) => i;
+ /// }
+ /// class Mixin {
+ /// int mixedInMethod(int i, {required int j}) => i;
+ /// }
+ /// // Opt out:
+ /// class Legacy extends Super with Mixin {}
+ /// // Opt in:
+ /// class Class extends Legacy {
+ /// // Valid overrides since the type of `Legacy.extendedMethod` is
+ /// // `int* Function(int*, {int* j})`.
+ /// int? extendedMethod(int? i, {int? j}) => i;
+ /// // Valid overrides since the type of `Legacy.mixedInMethod` is
+ /// // `int* Function(int*, {int* j})`.
+ /// int? mixedInMethod(int? i, {int? j}) => i;
+ /// }
+ ///
+ bool declaredNeedsLegacyErasure =
+ needsLegacyErasure(_classBuilder.cls, declaredMember.enclosingClass);
+ void callback(Member interfaceMember, bool isSetter) {
+ _classBuilder.checkOverride(
hierarchy.types, declaredMember, interfaceMember, isSetter, callback,
- isInterfaceCheck: !classBuilder.isMixinApplication);
+ isInterfaceCheck: !_classBuilder.isMixinApplication,
+ declaredNeedsLegacyErasure: declaredNeedsLegacyErasure);
}
- debug?.log("Delayed override check of ${declaredMember.fullName} "
- "${overriddenMember.fullName} wrt. ${classBuilder.fullNameForErrors}");
- callback(declaredMember.getMember(hierarchy),
- overriddenMember.getMember(hierarchy), declaredMember.isSetter);
+ for (ClassMember overriddenMember in _overriddenMembers) {
+ callback(overriddenMember.getMember(hierarchy), _declaredMember.isSetter);
+ }
}
}
@@ -2504,564 +3586,6 @@
'${builder.classBuilder.name},$declaredMember,$overriddenMembers)';
}
-abstract class DelayedMember implements ClassMember {
- /// The class which has inherited [declarations].
- @override
- final ClassBuilder classBuilder;
-
- bool get hasDeclarations => true;
-
- /// Conflicting declarations.
- final List<ClassMember> declarations;
-
- final bool isProperty;
-
- final bool isSetter;
-
- final bool modifyKernel;
-
- final bool isExplicitlyAbstract;
-
- @override
- final Name name;
-
- DelayedMember(this.classBuilder, this.declarations, this.isProperty,
- this.isSetter, this.modifyKernel, this.isExplicitlyAbstract, this.name) {
- assert(declarations.every((element) => element.isProperty == isProperty),
- "isProperty mismatch for $this");
- }
-
- @override
- bool get isSourceDeclaration => false;
-
- @override
- bool get needsComputation => true;
-
- @override
- bool get isSynthesized => true;
-
- @override
- bool get isInternalImplementation => false;
-
- @override
- bool get forSetter => isSetter;
-
- @override
- bool get isFunction => !isProperty;
-
- @override
- bool get isAbstract => isExplicitlyAbstract;
-
- bool get isStatic => false;
- bool get isField => false;
- bool get isGetter => false;
- bool get isFinal => false;
- bool get isConst => false;
- bool get isAssignable => false;
- bool get isDuplicate => false;
-
- DelayedMember withParent(ClassBuilder parent);
-
- @override
- ClassMember get abstract => this;
-
- @override
- ClassMember get concrete => this;
-
- @override
- Uri get fileUri => classBuilder.fileUri;
-
- @override
- int get charOffset => classBuilder.charOffset;
-
- @override
- String get fullNameForErrors =>
- declarations.map((ClassMember m) => m.fullName).join("%");
-
- bool get isInheritableConflict => true;
-
- String get fullName {
- String suffix = isSetter ? "=" : "";
- return "${fullNameForErrors}$suffix";
- }
-
- @override
- void inferType(ClassHierarchyBuilder hierarchy) {
- // Do nothing; this is only for declared members.
- }
-
- @override
- void registerOverrideDependency(Set<ClassMember> overriddenMembers) {
- // Do nothing; this is only for declared members.
- }
-}
-
-/// This represents a concrete implementation inherited from a superclass that
-/// has conflicts with methods inherited from an interface. The concrete
-/// implementation is the first element of [declarations].
-class InheritedImplementationInterfaceConflict extends DelayedMember {
- Member _member;
- Covariance _covariance;
- final ClassMember concreteMember;
- final bool _isSuperClassMemberMixedIn;
-
- @override
- final bool isInheritableConflict;
-
- InheritedImplementationInterfaceConflict(
- ClassBuilder parent,
- this.concreteMember,
- this._isSuperClassMemberMixedIn,
- List<ClassMember> declarations,
- bool isProperty,
- bool isSetter,
- bool modifyKernel,
- bool isAbstract,
- Name name,
- {this.isInheritableConflict = true})
- : assert(!concreteMember.isAbstract),
- super(parent, declarations, isProperty, isSetter, modifyKernel,
- isAbstract, name);
-
- @override
- bool isObjectMember(ClassBuilder objectClass) {
- return concreteMember.isObjectMember(objectClass);
- }
-
- @override
- String toString() {
- return "InheritedImplementationInterfaceConflict("
- "${classBuilder.fullNameForErrors}, $concreteMember, "
- "[${declarations.join(', ')}])";
- }
-
- void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
- if (_member == null) {
- if (!classBuilder.isAbstract) {
- if (classBuilder is SourceClassBuilder) {
- for (int i = 0; i < declarations.length; i++) {
- if (concreteMember != declarations[i]) {
- new DelayedOverrideCheck(
- classBuilder, concreteMember, declarations[i])
- .check(hierarchy);
- }
- }
- }
- }
- InterfaceConflict interfaceConflict = new InterfaceConflict(
- classBuilder,
- concreteMember,
- /*_isSuperClassMemberMixedIn = */ _isSuperClassMemberMixedIn,
- declarations,
- isProperty,
- isSetter,
- modifyKernel,
- isAbstract,
- name);
- _member = interfaceConflict.getMember(hierarchy);
- _covariance = interfaceConflict.getCovariance(hierarchy);
- }
- }
-
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return _member;
- }
-
- @override
- Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return _covariance;
- }
-
- @override
- DelayedMember withParent(ClassBuilder parent) {
- return parent == this.classBuilder
- ? this
- : new InheritedImplementationInterfaceConflict(
- parent,
- concreteMember,
- /*_isSuperClassMemberMixedIn = */ false,
- [this],
- isProperty,
- isSetter,
- modifyKernel,
- isAbstract,
- name);
- }
-
- @override
- bool isSameDeclaration(ClassMember other) {
- // This could be more precise but it currently has no benefit.
- return identical(this, other);
- }
-
- static ClassMember combined(
- ClassBuilder parent,
- ClassMember concreteImplementation,
- bool isSuperClassMemberMixedIn,
- ClassMember other,
- bool isSetter,
- bool createForwarders,
- {bool isInheritableConflict = true}) {
- assert(concreteImplementation.isProperty == other.isProperty,
- "Unexpected member combination: $concreteImplementation vs $other");
- List<ClassMember> declarations = <ClassMember>[];
- if (concreteImplementation.hasDeclarations &&
- concreteImplementation.classBuilder == parent) {
- addAllDeclarationsTo(concreteImplementation, declarations);
- } else {
- declarations.add(concreteImplementation);
- }
- if (other.hasDeclarations && other.classBuilder == parent) {
- addAllDeclarationsTo(other, declarations);
- } else {
- addDeclarationIfDifferent(other, declarations);
- }
- if (declarations.length == 1) {
- return declarations.single;
- } else {
- return new InheritedImplementationInterfaceConflict(
- parent,
- concreteImplementation.concrete,
- isSuperClassMemberMixedIn,
- declarations,
- concreteImplementation.isProperty,
- isSetter,
- createForwarders,
- declarations.first.isAbstract,
- declarations.first.name,
- isInheritableConflict: isInheritableConflict);
- }
- }
-}
-
-class InterfaceConflict extends DelayedMember {
- final ClassMember _superClassMember;
- final bool _isSuperClassMemberMixedIn;
- final bool isImplicitlyAbstract;
-
- InterfaceConflict(
- ClassBuilder parent,
- this._superClassMember,
- this._isSuperClassMemberMixedIn,
- List<ClassMember> declarations,
- bool isProperty,
- bool isSetter,
- bool modifyKernel,
- bool isAbstract,
- Name name,
- {this.isImplicitlyAbstract: true})
- : super(parent, declarations, isProperty, isSetter, modifyKernel,
- isAbstract, name);
-
- @override
- bool isObjectMember(ClassBuilder objectClass) =>
- declarations.first.isObjectMember(objectClass);
-
- @override
- bool get isAbstract => isExplicitlyAbstract || isImplicitlyAbstract;
-
- Member _member;
- Covariance _covariance;
-
- @override
- String toString() {
- return "InterfaceConflict(${classBuilder.fullNameForErrors}, "
- "[${declarations.join(', ')}])";
- }
-
- void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
- if (_member != null) {
- return;
- }
- if (classBuilder.library is! SourceLibraryBuilder) {
- _member = declarations.first.getMember(hierarchy);
- _covariance = declarations.first.getCovariance(hierarchy);
- return;
- }
-
- CombinedClassMemberSignature combinedMemberSignature =
- new CombinedClassMemberSignature(hierarchy, classBuilder, declarations,
- forSetter: isSetter);
-
- if (combinedMemberSignature.canonicalMember == null) {
- String name = classBuilder.fullNameForErrors;
- int length = classBuilder.isAnonymousMixinApplication ? 1 : name.length;
- List<LocatedMessage> context = declarations.map((ClassMember d) {
- return messageDeclaredMemberConflictsWithOverriddenMembersCause
- .withLocation(d.fileUri, d.charOffset, d.fullNameForErrors.length);
- }).toList();
-
- classBuilder.addProblem(
- templateCombinedMemberSignatureFailed.withArguments(
- classBuilder.fullNameForErrors,
- declarations.first.fullNameForErrors),
- classBuilder.charOffset,
- length,
- context: context);
- // TODO(johnniwinther): Maybe we should have an invalid marker to avoid
- // cascading errors.
- _member = declarations.first.getMember(hierarchy);
- _covariance = declarations.first.getCovariance(hierarchy);
- return;
- }
- debug?.log("Combined Member Signature of ${fullNameForErrors}: "
- "${combinedMemberSignature.canonicalMember.fullName}");
-
- if (modifyKernel) {
- ProcedureKind kind = ProcedureKind.Method;
- Member bestMemberSoFar =
- combinedMemberSignature.canonicalMember.getMember(hierarchy);
- if (combinedMemberSignature.canonicalMember.isProperty) {
- kind = isSetter ? ProcedureKind.Setter : ProcedureKind.Getter;
- } else if (bestMemberSoFar is Procedure &&
- bestMemberSoFar.kind == ProcedureKind.Operator) {
- kind = ProcedureKind.Operator;
- }
-
- debug?.log("Combined Member Signature of ${fullNameForErrors}: new "
- "ForwardingNode($classBuilder, "
- "${combinedMemberSignature.canonicalMember}, "
- "$declarations, $kind)");
- Member stub = new ForwardingNode(combinedMemberSignature, kind,
- _superClassMember, _isSuperClassMemberMixedIn)
- .finalize();
- if (stub != null && classBuilder.cls == stub.enclosingClass) {
- if (stub is Procedure) {
- classBuilder.cls.addProcedure(stub);
- } else if (stub is Field) {
- classBuilder.cls.addField(stub);
- } else if (stub is Constructor) {
- classBuilder.cls.addConstructor(stub);
- } else if (stub is RedirectingFactoryConstructor) {
- classBuilder.cls.addRedirectingFactoryConstructor(stub);
- } else {
- unhandled("${stub.runtimeType}", "getMember", stub.fileOffset,
- stub.fileUri);
- }
- SourceLibraryBuilder library = classBuilder.library;
- Member bestMemberSoFar =
- combinedMemberSignature.canonicalMember.getMember(hierarchy);
- if (bestMemberSoFar is Procedure) {
- library.forwardersOrigins..add(stub)..add(bestMemberSoFar);
- }
- debug?.log("Combined Member Signature of ${fullNameForErrors}: "
- "added stub $stub");
- _member = stub;
- _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
- assert(
- _covariance ==
- new Covariance.fromMember(_member, forSetter: forSetter),
- "Unexpected covariance for combined members signature "
- "$_member. Found $_covariance, expected "
- "${new Covariance.fromMember(_member, forSetter: forSetter)}.");
- return;
- }
- }
-
- debug?.log(
- "Combined Member Signature of ${fullNameForErrors}: picked bestSoFar");
- _member = combinedMemberSignature.canonicalMember.getMember(hierarchy);
- _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
- }
-
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return _member;
- }
-
- @override
- Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return _covariance;
- }
-
- @override
- DelayedMember withParent(ClassBuilder parent) {
- return parent == this.classBuilder
- ? this
- : new InterfaceConflict(
- parent,
- _superClassMember,
- /*_isSuperClassMemberMixedIn = */ false,
- [this],
- isProperty,
- isSetter,
- modifyKernel,
- isAbstract,
- name,
- isImplicitlyAbstract: isImplicitlyAbstract);
- }
-
- @override
- bool isSameDeclaration(ClassMember other) {
- // This could be more precise but it currently has no benefit.
- return identical(this, other);
- }
-
- static ClassMember combined(ClassBuilder parent, ClassMember a, ClassMember b,
- bool isSetter, bool createForwarders) {
- assert(a.isProperty == b.isProperty,
- "Unexpected member combination: $a vs $b");
- List<ClassMember> declarations = <ClassMember>[];
- if (a.hasDeclarations && a.classBuilder == parent) {
- addAllDeclarationsTo(a, declarations);
- } else {
- declarations.add(a);
- }
- if (b.hasDeclarations && b.classBuilder == parent) {
- addAllDeclarationsTo(b, declarations);
- } else {
- addDeclarationIfDifferent(b, declarations);
- }
- if (declarations.length == 1) {
- return declarations.single;
- } else {
- return new InterfaceConflict(
- parent,
- null,
- /*_isSuperClassMemberMixedIn = */ false,
- declarations,
- a.isProperty,
- isSetter,
- createForwarders,
- declarations.first.isAbstract,
- declarations.first.name);
- }
- }
-
- @override
- ClassMember get concrete {
- if (isAbstract) {
- return declarations.first.concrete;
- }
- return this;
- }
-}
-
-class AbstractMemberOverridingImplementation extends DelayedMember {
- AbstractMemberOverridingImplementation(
- ClassBuilder parent,
- ClassMember abstractMember,
- ClassMember concreteImplementation,
- bool isProperty,
- bool isSetter,
- bool modifyKernel,
- bool isAbstract,
- Name name)
- : super(parent, <ClassMember>[concreteImplementation, abstractMember],
- isProperty, isSetter, modifyKernel, isAbstract, name);
-
- @override
- bool isObjectMember(ClassBuilder objectClass) =>
- concreteImplementation.isObjectMember(objectClass);
-
- ClassMember get concreteImplementation => declarations[0];
-
- ClassMember get abstractMember => declarations[1];
-
- bool _isChecked = false;
-
- void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
- if (!_isChecked) {
- _isChecked = true;
- if (!classBuilder.isAbstract &&
- !hierarchy.nodes[classBuilder.cls].hasNoSuchMethod) {
- if (classBuilder is SourceClassBuilder) {
- new DelayedOverrideCheck(
- classBuilder, concreteImplementation, abstractMember)
- .check(hierarchy);
- }
- }
-
- ProcedureKind kind = ProcedureKind.Method;
- if (abstractMember.isProperty) {
- kind = isSetter ? ProcedureKind.Setter : ProcedureKind.Getter;
- }
- if (modifyKernel) {
- // This call will add a body to the abstract method if needed for
- // isGenericCovariantImpl checks.
- new ForwardingNode(
- new CombinedClassMemberSignature.internal(
- hierarchy, classBuilder, 1, declarations,
- forSetter: isSetter),
- kind,
- concrete,
- /*_isSuperClassMemberMixedIn =*/ false)
- .finalize();
- }
- }
- }
-
- @override
- Member getMember(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return abstractMember.getMember(hierarchy);
- }
-
- @override
- Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
- _ensureMemberAndCovariance(hierarchy);
- return abstractMember.getCovariance(hierarchy);
- }
-
- @override
- DelayedMember withParent(ClassBuilder parent) {
- return parent == this.classBuilder
- ? this
- : new AbstractMemberOverridingImplementation(
- parent,
- abstractMember,
- concreteImplementation,
- isProperty,
- isSetter,
- modifyKernel,
- isAbstract,
- name);
- }
-
- @override
- String toString() {
- return "AbstractMemberOverridingImplementation("
- "${classBuilder.fullNameForErrors}, "
- "[${declarations.join(', ')}])";
- }
-
- @override
- ClassMember get abstract => abstractMember;
-
- @override
- ClassMember get concrete => concreteImplementation;
-
- @override
- bool isSameDeclaration(ClassMember other) {
- if (identical(this, other)) return false;
- return other is AbstractMemberOverridingImplementation &&
- classBuilder == other.classBuilder &&
- abstract.isSameDeclaration(other.abstract) &&
- concrete.isSameDeclaration(other.concrete);
- }
-}
-
-void addDeclarationIfDifferent(
- ClassMember declaration, List<ClassMember> declarations) {
- for (int i = 0; i < declarations.length; i++) {
- if (declaration == declarations[i]) return;
- }
- declarations.add(declaration);
-}
-
-void addAllDeclarationsTo(ClassMember member, List<ClassMember> declarations) {
- assert(member.hasDeclarations);
- for (int i = 0; i < member.declarations.length; i++) {
- addDeclarationIfDifferent(member.declarations[i], declarations);
- }
- assert(declarations.toSet().length == declarations.length);
-}
-
int compareNamedParameters(VariableDeclaration a, VariableDeclaration b) {
return a.name.compareTo(b.name);
}
@@ -3227,3 +3751,482 @@
}
}
}
+
+Set<ClassMember> unfoldDeclarations(Iterable<ClassMember> members) {
+ Set<ClassMember> result = <ClassMember>{};
+ _unfoldDeclarations(members, result);
+ return result;
+}
+
+void _unfoldDeclarations(
+ Iterable<ClassMember> members, Set<ClassMember> result) {
+ for (ClassMember member in members) {
+ if (member.hasDeclarations) {
+ _unfoldDeclarations(member.declarations, result);
+ } else {
+ result.add(member);
+ }
+ }
+}
+
+abstract class SynthesizedMember extends ClassMember {
+ @override
+ final ClassBuilder classBuilder;
+
+ @override
+ final Name name;
+
+ @override
+ final bool forSetter;
+
+ @override
+ final bool isProperty;
+
+ SynthesizedMember(this.classBuilder, this.name,
+ {this.forSetter, this.isProperty})
+ : assert(forSetter != null),
+ assert(isProperty != null);
+
+ @override
+ List<ClassMember> get declarations => throw new UnimplementedError();
+
+ @override
+ void inferType(ClassHierarchyBuilder hierarchy) {}
+
+ @override
+ bool get isAssignable => throw new UnimplementedError();
+
+ @override
+ bool get isConst => throw new UnimplementedError();
+
+ @override
+ bool get isDuplicate => false;
+
+ @override
+ bool get isField => throw new UnimplementedError();
+
+ @override
+ bool get isFinal => throw new UnimplementedError();
+
+ @override
+ bool get isGetter => throw new UnimplementedError();
+
+ @override
+ bool get isInternalImplementation => false;
+
+ @override
+ bool get isSetter => forSetter;
+
+ @override
+ bool get isSourceDeclaration => false;
+
+ @override
+ bool get isStatic => false;
+
+ @override
+ bool get isSynthesized => true;
+
+ @override
+ void registerOverrideDependency(Set<ClassMember> overriddenMembers) {}
+}
+
+/// Class member for a set of interface members.
+///
+/// This is used to compute combined member signature of a set of interface
+/// members inherited into the same class, and to insert forwarding stubs,
+/// mixin stubs, and member signatures where needed.
+class SynthesizedInterfaceMember extends SynthesizedMember {
+ @override
+ final List<ClassMember> declarations;
+
+ /// The concrete member in the super class overridden by [declarations], if
+ /// any.
+ ///
+ /// This is used to as the target when creating concrete forwarding and mixin
+ /// stub. For instance:
+ ///
+ /// class Super {
+ /// method(int i) {}
+ /// }
+ /// class Interface {
+ /// method(covariant int i) {}
+ /// }
+ /// class Class extends Super implements Interface {
+ /// // Concrete forwarding stub calling [_superClassMember]:
+ /// method(covariant int i) => super.method(i);
+ ///
+ final ClassMember _superClassMember;
+
+ /// The canonical member of the combined member signature if it is known by
+ /// construction. The canonical member defines the type of combined member
+ /// signature.
+ ///
+ /// This is used when a declared member is part of a set of implemented
+ /// members. For instance
+ ///
+ /// class Super {
+ /// method(int i) {}
+ /// }
+ /// class Interface {
+ /// method(covariant num i) {}
+ /// }
+ /// class Class implements Interface {
+ /// // This member is updated to be a concrete forwarding stub with an
+ /// // covariant parameter but with its declared parameter type:
+ /// // method(covariant int i) => super.method(i);
+ /// method(int i);
+ /// }
+ final ClassMember _canonicalMember;
+
+ /// The member in [declarations] that is mixed in, if any.
+ ///
+ /// This is used to create mixin stubs. If the mixed in member is abstract,
+ /// an abstract mixin stub is created:
+ ///
+ /// class Super {
+ /// void method() {}
+ /// }
+ /// class Mixin {
+ /// void method();
+ /// }
+ /// // Abstract mixin stub with `Mixin.method` as target inserted:
+ /// // void method();
+ /// class Class = Super with Mixin;
+ ///
+ /// If the mixed in member is concrete, a concrete mixin member is created:
+ ///
+ /// class Super {
+ /// void method() {}
+ /// }
+ /// class Mixin {
+ /// void method() {}
+ /// }
+ /// // Concrete mixin stub with `Mixin.method` as target inserted:
+ /// // void method() => super.method();
+ /// class Class = Super with Mixin;
+ ///
+ /// If a forwarding stub is needed, the created stub will be a possibly
+ /// concrete forwarding stub:
+ ///
+ /// class Super {
+ /// void method(int i) {}
+ /// }
+ /// class Interface {
+ /// void method(covariant num i) {}
+ /// }
+ /// class Mixin {
+ /// void method(int i);
+ /// }
+ /// // Concrete forwarding stub with `Super.method` as target inserted:
+ /// // void method(covariant int i) => super.method(i);
+ /// class Class = Super with Mixin implements Interface;
+ ///
+ final ClassMember _mixedInMember;
+
+ /// If `true`, a stub should be inserted, if needed.
+ final bool _shouldModifyKernel;
+
+ Member _member;
+ Covariance _covariance;
+
+ SynthesizedInterfaceMember(
+ ClassBuilder classBuilder, Name name, this.declarations,
+ {ClassMember superClassMember,
+ ClassMember canonicalMember,
+ ClassMember mixedInMember,
+ bool isProperty,
+ bool forSetter,
+ bool shouldModifyKernel})
+ : this._superClassMember = superClassMember,
+ this._canonicalMember = canonicalMember,
+ this._mixedInMember = mixedInMember,
+ this._shouldModifyKernel = shouldModifyKernel,
+ super(classBuilder, name, isProperty: isProperty, forSetter: forSetter);
+
+ @override
+ bool get hasDeclarations => true;
+
+ void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
+ if (_member != null) {
+ return;
+ }
+ if (classBuilder.library is! SourceLibraryBuilder) {
+ if (_canonicalMember != null) {
+ _member = _canonicalMember.getMember(hierarchy);
+ _covariance = _canonicalMember.getCovariance(hierarchy);
+ } else {
+ _member = declarations.first.getMember(hierarchy);
+ _covariance = declarations.first.getCovariance(hierarchy);
+ }
+ return;
+ }
+ CombinedClassMemberSignature combinedMemberSignature;
+ if (_canonicalMember != null) {
+ combinedMemberSignature = new CombinedClassMemberSignature.internal(
+ hierarchy,
+ classBuilder,
+ declarations.indexOf(_canonicalMember),
+ declarations,
+ forSetter: isSetter);
+ } else {
+ combinedMemberSignature = new CombinedClassMemberSignature(
+ hierarchy, classBuilder, declarations,
+ forSetter: isSetter);
+
+ if (combinedMemberSignature.canonicalMember == null) {
+ String name = classBuilder.fullNameForErrors;
+ int length = classBuilder.isAnonymousMixinApplication ? 1 : name.length;
+ List<LocatedMessage> context = declarations.map((ClassMember d) {
+ return messageDeclaredMemberConflictsWithOverriddenMembersCause
+ .withLocation(
+ d.fileUri, d.charOffset, d.fullNameForErrors.length);
+ }).toList();
+
+ classBuilder.addProblem(
+ templateCombinedMemberSignatureFailed.withArguments(
+ classBuilder.fullNameForErrors,
+ declarations.first.fullNameForErrors),
+ classBuilder.charOffset,
+ length,
+ context: context);
+ // TODO(johnniwinther): Maybe we should have an invalid marker to avoid
+ // cascading errors.
+ _member = declarations.first.getMember(hierarchy);
+ _covariance = declarations.first.getCovariance(hierarchy);
+ return;
+ }
+ }
+
+ if (_shouldModifyKernel) {
+ ProcedureKind kind = ProcedureKind.Method;
+ Member canonicalMember =
+ combinedMemberSignature.canonicalMember.getMember(hierarchy);
+ if (combinedMemberSignature.canonicalMember.isProperty) {
+ kind = isSetter ? ProcedureKind.Setter : ProcedureKind.Getter;
+ } else if (canonicalMember is Procedure &&
+ canonicalMember.kind == ProcedureKind.Operator) {
+ kind = ProcedureKind.Operator;
+ }
+
+ Procedure stub = new ForwardingNode(
+ combinedMemberSignature, kind, _superClassMember, _mixedInMember)
+ .finalize();
+ if (stub != null) {
+ assert(classBuilder.cls == stub.enclosingClass);
+ assert(stub != canonicalMember);
+ classBuilder.cls.addProcedure(stub);
+ SourceLibraryBuilder library = classBuilder.library;
+ if (canonicalMember is Procedure) {
+ library.forwardersOrigins..add(stub)..add(canonicalMember);
+ }
+ _member = stub;
+ _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
+ assert(
+ _covariance ==
+ new Covariance.fromMember(_member, forSetter: forSetter),
+ "Unexpected covariance for combined members signature "
+ "$_member. Found $_covariance, expected "
+ "${new Covariance.fromMember(_member, forSetter: forSetter)}.");
+ return;
+ }
+ }
+
+ _member = combinedMemberSignature.canonicalMember.getMember(hierarchy);
+ _covariance = combinedMemberSignature.combinedMemberSignatureCovariance;
+ }
+
+ @override
+ Member getMember(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _member;
+ }
+
+ @override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _covariance;
+ }
+
+ @override
+ ClassMember get interfaceMember => this;
+
+ @override
+ bool isObjectMember(ClassBuilder objectClass) {
+ return false;
+ }
+
+ @override
+ bool isSameDeclaration(ClassMember other) {
+ // TODO(johnniwinther): Optimize this.
+ return false;
+ }
+
+ @override
+ int get charOffset => declarations.first.charOffset;
+
+ @override
+ Uri get fileUri => declarations.first.fileUri;
+
+ @override
+ bool get isAbstract => true;
+
+ @override
+ String get fullNameForErrors =>
+ declarations.map((ClassMember m) => m.fullName).join("%");
+
+ @override
+ String get fullName {
+ String suffix = isSetter ? "=" : "";
+ return "${fullNameForErrors}$suffix";
+ }
+
+ String toString() => 'SynthesizedInterfaceMember($classBuilder,$name,'
+ '$declarations,forSetter=$forSetter)';
+}
+
+/// Class member for an inherited concrete member that implements an interface
+/// member.
+///
+/// This is used to ensure that both the inherited concrete member and the
+/// interface member is taken into account when computing the resulting [Member]
+/// node.
+///
+/// This is needed because an interface member, though initially abstract, can
+/// result in a concrete stub that overrides the concrete member. For instance
+///
+/// class Super {
+/// method(int i) {}
+/// }
+/// class Interface {
+/// method(covariant int i) {}
+/// }
+/// class Class extends Super implements Interface {
+/// // A concrete forwarding stub is inserted:
+/// method(covariant int i) => super.method(i);
+/// }
+/// class Sub extends Class implements Interface {
+/// // No forwarding stub should be inserted since `Class.method` is
+/// // adequate.
+/// }
+///
+///
+/// Here the create stub `Class.method` overrides `Super.method` and should
+/// be used to determine whether to insert a forwarding stub in subclasses.
+class InheritedClassMemberImplementsInterface extends SynthesizedMember {
+ final ClassMember inheritedClassMember;
+ final ClassMember implementedInterfaceMember;
+
+ Member _member;
+ Covariance _covariance;
+
+ InheritedClassMemberImplementsInterface(ClassBuilder classBuilder, Name name,
+ {this.inheritedClassMember,
+ this.implementedInterfaceMember,
+ bool isProperty,
+ bool forSetter})
+ : assert(inheritedClassMember != null),
+ assert(implementedInterfaceMember != null),
+ super(classBuilder, name, isProperty: isProperty, forSetter: forSetter);
+
+ void _ensureMemberAndCovariance(ClassHierarchyBuilder hierarchy) {
+ if (_member == null) {
+ Member classMember = inheritedClassMember.getMember(hierarchy);
+ Member interfaceMember = implementedInterfaceMember.getMember(hierarchy);
+ if (!interfaceMember.isAbstract &&
+ interfaceMember.enclosingClass == classBuilder.cls) {
+ /// The interface member resulted in a concrete stub being inserted.
+ /// For instance for `method1` but _not_ for `method2` here:
+ ///
+ /// class Super {
+ /// method1(int i) {}
+ /// method2(covariant int i) {}
+ /// }
+ /// class Interface {
+ /// method1(covariant int i) {}
+ /// method2(int i) {}
+ /// }
+ /// class Class extends Super implements Interface {
+ /// // A concrete forwarding stub is inserted for `method1` since
+ /// // the parameter on `Super.method1` is _not_ marked as
+ /// // covariant:
+ /// method1(covariant int i) => super.method(i);
+ /// // No concrete forwarding stub is inserted for `method2` since
+ /// // the parameter on `Super.method2` is already marked as
+ /// // covariant.
+ /// }
+ ///
+ /// The inserted stub should be used as the resulting member.
+ _member = interfaceMember;
+ _covariance = implementedInterfaceMember.getCovariance(hierarchy);
+ } else {
+ /// The interface member did not result in an inserted stub or the
+ /// inserted stub was abstract. For instance:
+ ///
+ /// // Opt-in:
+ /// class Super {
+ /// method(int? i) {}
+ /// }
+ /// // Opt-out:
+ /// class Class extends Super {
+ /// // An abstract member signature stub is inserted:
+ /// method(int* i);
+ /// }
+ ///
+ /// The inserted stub should _not_ be used as the resulting member
+ /// since it is abstract and therefore not a class member.
+ _member = classMember;
+ _covariance = inheritedClassMember.getCovariance(hierarchy);
+ }
+ }
+ }
+
+ @override
+ Member getMember(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _member;
+ }
+
+ @override
+ Covariance getCovariance(ClassHierarchyBuilder hierarchy) {
+ _ensureMemberAndCovariance(hierarchy);
+ return _covariance;
+ }
+
+ @override
+ ClassMember get interfaceMember => implementedInterfaceMember;
+
+ @override
+ bool isObjectMember(ClassBuilder objectClass) {
+ return inheritedClassMember.isObjectMember(objectClass);
+ }
+
+ @override
+ bool isSameDeclaration(ClassMember other) {
+ // TODO(johnniwinther): Optimize this.
+ return false;
+ }
+
+ @override
+ int get charOffset => inheritedClassMember.charOffset;
+
+ @override
+ Uri get fileUri => inheritedClassMember.fileUri;
+
+ @override
+ bool get hasDeclarations => false;
+
+ @override
+ bool get isAbstract => false;
+
+ @override
+ String get fullNameForErrors => inheritedClassMember.fullNameForErrors;
+
+ String get fullName => inheritedClassMember.fullName;
+
+ @override
+ String toString() =>
+ 'InheritedClassMemberImplementsInterface($classBuilder,$name,'
+ 'inheritedClassMember=$inheritedClassMember,'
+ 'implementedInterfaceMember=$implementedInterfaceMember,'
+ 'forSetter=$forSetter)';
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 00467ed..2f22878 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -263,17 +263,6 @@
return _containsNnbdTypes;
}
- /// Returns `true` if the covariance of the combined member signature is
- /// different from the covariance of the overridden member in the superclass.
- ///
- /// If `true` a concrete forwarding stub that checks the covariance must
- /// be generated.
- // TODO(johnniwinther): This is imprecise. It assumes that the 0th member is
- // from the superclass which might not be the case.
- bool get needsSuperImpl {
- return _getMemberCovariance(0) != combinedMemberSignatureCovariance;
- }
-
/// The this type of [classBuilder].
DartType get thisType {
return _thisType ??= _coreTypes.thisInterfaceType(
diff --git a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
index a647cbf..590534c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forwarding_node.dart
@@ -40,14 +40,16 @@
final ClassMember _superClassMember;
- final bool _isSuperClassMemberMixedIn;
+ final ClassMember _mixedInMember;
ForwardingNode(this._combinedMemberSignature, this.kind,
- this._superClassMember, this._isSuperClassMemberMixedIn);
+ this._superClassMember, this._mixedInMember);
/// Finishes handling of this node by propagating covariance and creating
/// forwarding stubs if necessary.
- Member finalize() => _computeCovarianceFixes();
+ ///
+ /// If a stub is created, this is returned. Otherwise `null` is returned.
+ Procedure finalize() => _computeCovarianceFixes();
/// Tag the parameters of [interfaceMember] that need type checks
///
@@ -59,15 +61,16 @@
/// occurs in [enclosingClass]'s interface. If parameters need checks but
/// they would not be checked in an inherited implementation, a forwarding
/// stub is introduced as a place to put the checks.
- Member _computeCovarianceFixes() {
+ ///
+ /// If a stub is created, this is returned. Otherwise `null` is returned.
+ Procedure _computeCovarianceFixes() {
SourceClassBuilder classBuilder = _combinedMemberSignature.classBuilder;
ClassMember canonicalMember = _combinedMemberSignature.canonicalMember;
Member interfaceMember =
canonicalMember.getMember(_combinedMemberSignature.hierarchy);
- // TODO(johnniwinther): Support abstract mixin stubs.
bool needMixinStub =
- classBuilder.isMixinApplication && _isSuperClassMemberMixedIn;
+ classBuilder.isMixinApplication && _mixedInMember != null;
if (_combinedMemberSignature.members.length == 1 && !needMixinStub) {
// Covariance can only come from [interfaceMember] so we never need a
@@ -79,10 +82,13 @@
copyLocation: false);
} else {
// Nothing to do.
- return interfaceMember;
+ return null;
}
}
+ // TODO(johnniwinther): Remove this. This relies upon the order of the
+ // declarations matching the order in which members are returned from the
+ // [ClassHierarchy].
bool cannotReuseExistingMember =
!(_combinedMemberSignature.isCanonicalMemberFirst ||
_combinedMemberSignature.isCanonicalMemberDeclared);
@@ -94,43 +100,46 @@
(canonicalMember.classBuilder != classBuilder &&
needsTypeOrCovarianceUpdate) ||
needMixinStub;
+ bool needsSuperImpl = _superClassMember != null &&
+ _superClassMember.getCovariance(_combinedMemberSignature.hierarchy) !=
+ _combinedMemberSignature.combinedMemberSignatureCovariance;
if (stubNeeded) {
Procedure stub = _combinedMemberSignature.createMemberFromSignature(
copyLocation: false);
bool needsForwardingStub =
- _combinedMemberSignature.needsCovarianceMerging ||
- _combinedMemberSignature.needsSuperImpl;
+ _combinedMemberSignature.needsCovarianceMerging || needsSuperImpl;
if (needsForwardingStub || needMixinStub) {
ProcedureStubKind stubKind;
+ Member finalTarget;
if (needsForwardingStub) {
stubKind = ProcedureStubKind.AbstractForwardingStub;
- } else {
- stubKind = ProcedureStubKind.AbstractMixinStub;
- }
-
- // This is a forward stub.
- Member finalTarget;
- if (interfaceMember is Procedure) {
- switch (interfaceMember.stubKind) {
- case ProcedureStubKind.Regular:
- case ProcedureStubKind.NoSuchMethodForwarder:
- finalTarget = interfaceMember;
- break;
- case ProcedureStubKind.AbstractForwardingStub:
- case ProcedureStubKind.ConcreteForwardingStub:
- case ProcedureStubKind.AbstractMixinStub:
- case ProcedureStubKind.ConcreteMixinStub:
- case ProcedureStubKind.MemberSignature:
- finalTarget = interfaceMember.stubTarget;
- break;
+ if (interfaceMember is Procedure) {
+ switch (interfaceMember.stubKind) {
+ case ProcedureStubKind.Regular:
+ case ProcedureStubKind.NoSuchMethodForwarder:
+ finalTarget = interfaceMember;
+ break;
+ case ProcedureStubKind.AbstractForwardingStub:
+ case ProcedureStubKind.ConcreteForwardingStub:
+ case ProcedureStubKind.MemberSignature:
+ case ProcedureStubKind.AbstractMixinStub:
+ case ProcedureStubKind.ConcreteMixinStub:
+ finalTarget = interfaceMember.stubTarget;
+ break;
+ }
+ } else {
+ finalTarget = interfaceMember;
}
} else {
- finalTarget = interfaceMember;
+ stubKind = ProcedureStubKind.AbstractMixinStub;
+ finalTarget =
+ _mixedInMember.getMember(_combinedMemberSignature.hierarchy);
}
+
stub.stubKind = stubKind;
stub.stubTarget = finalTarget;
- if (_combinedMemberSignature.needsSuperImpl ||
- (needMixinStub && _superClassMember != null)) {
+ if (needsSuperImpl ||
+ (needMixinStub && _superClassMember == _mixedInMember)) {
_createForwardingImplIfNeeded(
stub.function, stub.name, classBuilder.cls,
isForwardingStub: needsForwardingStub);
@@ -143,12 +152,12 @@
_combinedMemberSignature.combinedMemberSignatureCovariance
.applyCovariance(interfaceMember);
}
- if (_combinedMemberSignature.needsSuperImpl) {
+ if (needsSuperImpl) {
_createForwardingImplIfNeeded(
interfaceMember.function, interfaceMember.name, classBuilder.cls,
isForwardingStub: true);
}
- return interfaceMember;
+ return null;
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index e7f9b2a..1e80ebb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -5964,12 +5964,7 @@
}
assert(node.interfaceTarget == null || node.interfaceTarget is Procedure);
return inferrer.inferSuperMethodInvocation(
- node,
- typeContext,
- node.interfaceTarget != null
- ? new ObjectAccessTarget.interfaceMember(node.interfaceTarget,
- isPotentiallyNullable: false)
- : const ObjectAccessTarget.missing());
+ node, typeContext, node.interfaceTarget);
}
@override
@@ -5983,12 +5978,7 @@
new InstrumentationValueForMember(node.interfaceTarget));
}
return inferrer.inferSuperPropertyGet(
- node,
- typeContext,
- node.interfaceTarget != null
- ? new ObjectAccessTarget.interfaceMember(node.interfaceTarget,
- isPotentiallyNullable: false)
- : const ObjectAccessTarget.missing());
+ node, typeContext, node.interfaceTarget);
}
@override
@@ -6004,6 +5994,10 @@
isPotentiallyNullable: false)
: const ObjectAccessTarget.missing();
DartType writeContext = inferrer.getSetterType(writeTarget, receiverType);
+ if (node.interfaceTarget != null) {
+ writeContext = inferrer.computeTypeFromSuperClass(
+ node.interfaceTarget.enclosingClass, writeContext);
+ }
ExpressionInferenceResult rhsResult = inferrer.inferExpression(
node.value, writeContext ?? const UnknownType(), true,
isVoidAllowed: true);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 5d920b5..32b969f 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -969,13 +969,11 @@
return count;
}
- void checkOverride(
- Types types,
- Member declaredMember,
- Member interfaceMember,
- bool isSetter,
- callback(Member declaredMember, Member interfaceMember, bool isSetter),
- {bool isInterfaceCheck = false}) {
+ void checkOverride(Types types, Member declaredMember, Member interfaceMember,
+ bool isSetter, callback(Member interfaceMember, bool isSetter),
+ {bool isInterfaceCheck, bool declaredNeedsLegacyErasure}) {
+ assert(isInterfaceCheck != null);
+ assert(declaredNeedsLegacyErasure != null);
if (declaredMember == interfaceMember) {
return;
}
@@ -989,21 +987,34 @@
if (declaredMember.kind == interfaceMember.kind) {
if (declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator) {
- bool seenCovariant = checkMethodOverride(types, declaredMember,
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
+ bool seenCovariant = checkMethodOverride(
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (seenCovariant) {
- handleSeenCovariant(
- types, declaredMember, interfaceMember, isSetter, callback);
+ handleSeenCovariant(types, interfaceMember, isSetter, callback);
}
} else if (declaredMember.kind == ProcedureKind.Getter) {
- checkGetterOverride(types, declaredMember, interfaceMember,
- interfaceMemberOrigin, isInterfaceCheck);
+ checkGetterOverride(
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
} else if (declaredMember.kind == ProcedureKind.Setter) {
- bool seenCovariant = checkSetterOverride(types, declaredMember,
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
+ bool seenCovariant = checkSetterOverride(
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (seenCovariant) {
- handleSeenCovariant(
- types, declaredMember, interfaceMember, isSetter, callback);
+ handleSeenCovariant(types, interfaceMember, isSetter, callback);
}
} else {
assert(
@@ -1026,15 +1037,24 @@
!interfaceMember.isConst) ||
interfaceMember is Procedure && interfaceMember.isSetter;
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
- checkGetterOverride(types, declaredMember, interfaceMember,
- interfaceMemberOrigin, isInterfaceCheck);
+ checkGetterOverride(
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
}
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
- bool seenCovariant = checkSetterOverride(types, declaredMember,
- interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
+ bool seenCovariant = checkSetterOverride(
+ types,
+ declaredMember,
+ interfaceMember,
+ interfaceMemberOrigin,
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (seenCovariant) {
- handleSeenCovariant(
- types, declaredMember, interfaceMember, isSetter, callback);
+ handleSeenCovariant(types, interfaceMember, isSetter, callback);
}
}
}
@@ -1204,7 +1224,8 @@
Member interfaceMemberOrigin,
FunctionNode declaredFunction,
FunctionNode interfaceFunction,
- bool isInterfaceCheck) {
+ bool isInterfaceCheck,
+ bool declaredNeedsLegacyErasure) {
Substitution interfaceSubstitution = Substitution.empty;
if (interfaceMember.enclosingClass.typeParameters.isNotEmpty) {
Class enclosingClass = interfaceMember.enclosingClass;
@@ -1257,6 +1278,9 @@
if (!library.isNonNullableByDefault) {
computedBound = legacyErasure(computedBound);
}
+ if (declaredNeedsLegacyErasure) {
+ declaredBound = legacyErasure(declaredBound);
+ }
if (!types
.performNullabilityAwareMutualSubtypesCheck(
declaredBound, computedBound)
@@ -1315,6 +1339,7 @@
bool isCovariant,
VariableDeclaration declaredParameter,
bool isInterfaceCheck,
+ bool declaredNeedsLegacyErasure,
{bool asIfDeclaredParameter = false}) {
if (interfaceSubstitution != null) {
interfaceType = interfaceSubstitution.substituteType(interfaceType);
@@ -1322,6 +1347,9 @@
if (declaredSubstitution != null) {
declaredType = declaredSubstitution.substituteType(declaredType);
}
+ if (declaredNeedsLegacyErasure) {
+ declaredType = legacyErasure(declaredType);
+ }
if (!declaredMember.isNonNullableByDefault &&
interfaceMember.isNonNullableByDefault) {
@@ -1411,7 +1439,8 @@
Procedure declaredMember,
Procedure interfaceMember,
Member interfaceMemberOrigin,
- bool isInterfaceCheck) {
+ bool isInterfaceCheck,
+ bool declaredNeedsLegacyErasure) {
assert(declaredMember.kind == interfaceMember.kind);
assert(declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator);
@@ -1426,7 +1455,8 @@
interfaceMemberOrigin,
declaredFunction,
interfaceFunction,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
Substitution declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
@@ -1442,7 +1472,8 @@
interfaceFunction.returnType,
false,
null,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (declaredFunction.positionalParameters.length <
interfaceFunction.positionalParameters.length) {
reportInvalidOverride(
@@ -1451,15 +1482,15 @@
templateOverrideFewerPositionalArguments.withArguments(
"${declaredMember.enclosingClass.name}."
"${declaredMember.name.text}",
- "${interfaceMember.enclosingClass.name}."
- "${interfaceMember.name.text}"),
+ "${interfaceMemberOrigin.enclosingClass.name}."
+ "${interfaceMemberOrigin.name.text}"),
declaredMember.fileOffset,
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.text)
- .withLocation(interfaceMember.fileUri,
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.text)
+ .withLocation(interfaceMemberOrigin.fileUri,
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
if (interfaceFunction.requiredParameterCount <
@@ -1470,15 +1501,15 @@
templateOverrideMoreRequiredArguments.withArguments(
"${declaredMember.enclosingClass.name}."
"${declaredMember.name.text}",
- "${interfaceMember.enclosingClass.name}."
- "${interfaceMember.name.text}"),
+ "${interfaceMemberOrigin.enclosingClass.name}."
+ "${interfaceMemberOrigin.name.text}"),
declaredMember.fileOffset,
noLength,
context: [
templateOverriddenMethodCause
- .withArguments(interfaceMember.name.text)
- .withLocation(interfaceMember.fileUri,
- interfaceMember.fileOffset, noLength)
+ .withArguments(interfaceMemberOrigin.name.text)
+ .withLocation(interfaceMemberOrigin.fileUri,
+ interfaceMemberOrigin.fileOffset, noLength)
]);
}
for (int i = 0;
@@ -1511,7 +1542,8 @@
interfaceParameter.type,
declaredParameter.isCovariant || interfaceParameter.isCovariant,
declaredParameter,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (declaredParameter.isCovariant) seenCovariant = true;
}
if (declaredFunction.namedParameters.isEmpty &&
@@ -1589,8 +1621,10 @@
interfaceNamedParameters.current.type,
declaredParameter.isCovariant,
declaredParameter,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
if (declaredMember.isNonNullableByDefault &&
+ !declaredNeedsLegacyErasure &&
declaredParameter.isRequired &&
interfaceMember.isNonNullableByDefault &&
!interfaceNamedParameters.current.isRequired) {
@@ -1627,7 +1661,8 @@
Member declaredMember,
Member interfaceMember,
Member interfaceMemberOrigin,
- bool isInterfaceCheck) {
+ bool isInterfaceCheck,
+ bool declaredNeedsLegacyErasure) {
Substitution interfaceSubstitution = _computeInterfaceSubstitution(
types,
declaredMember,
@@ -1635,7 +1670,8 @@
interfaceMemberOrigin,
/* declaredFunction = */ null,
/* interfaceFunction = */ null,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
Substitution declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.getterType;
@@ -1651,7 +1687,8 @@
interfaceType,
/* isCovariant = */ false,
/* declaredParameter = */ null,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
}
/// Checks whether [declaredMember] correctly overrides [interfaceMember].
@@ -1667,7 +1704,8 @@
Member declaredMember,
Member interfaceMember,
Member interfaceMemberOrigin,
- bool isInterfaceCheck) {
+ bool isInterfaceCheck,
+ bool declaredNeedsLegacyErasure) {
Substitution interfaceSubstitution = _computeInterfaceSubstitution(
types,
declaredMember,
@@ -1675,7 +1713,8 @@
interfaceMemberOrigin,
/* declaredFunction = */ null,
/* interfaceFunction = */ null,
- isInterfaceCheck);
+ isInterfaceCheck,
+ declaredNeedsLegacyErasure);
Substitution declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.setterType;
@@ -1701,6 +1740,7 @@
isCovariant,
declaredParameter,
isInterfaceCheck,
+ declaredNeedsLegacyErasure,
asIfDeclaredParameter: true);
return isCovariant;
}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index b183c32..ec4dd29 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1132,6 +1132,39 @@
return null;
}
+ /// Returns [type] as passed from [superClass] to the current class.
+ ///
+ /// If a legacy class occurs between the current class and [superClass] then
+ /// [type] needs to be legacy erased. For instance
+ ///
+ /// // Opt in:
+ /// class Super {
+ /// int extendedMethod(int i, {required int j}) => i;
+ /// }
+ /// class Mixin {
+ /// int mixedInMethod(int i, {required int j}) => i;
+ /// }
+ /// // Opt out:
+ /// class Legacy extends Super with Mixin {}
+ /// // Opt in:
+ /// class Class extends Legacy {
+ /// test() {
+ /// // Ok to call `Legacy.extendedMethod` since its type is
+ /// // `int* Function(int*, {int* j})`.
+ /// super.extendedMethod(null);
+ /// // Ok to call `Legacy.mixedInMethod` since its type is
+ /// // `int* Function(int*, {int* j})`.
+ /// super.mixedInMethod(null);
+ /// }
+ /// }
+ ///
+ DartType computeTypeFromSuperClass(Class superClass, DartType type) {
+ if (needsLegacyErasure(thisType.classNode, superClass)) {
+ type = legacyErasure(type);
+ }
+ return type;
+ }
+
/// Returns the type of [target] when accessed as a getter on [receiverType].
///
/// For instance
@@ -3479,9 +3512,11 @@
ExpressionInferenceResult inferSuperMethodInvocation(
SuperMethodInvocation expression,
DartType typeContext,
- ObjectAccessTarget target) {
- assert(
- target.isInstanceMember || target.isObjectMember || target.isMissing);
+ Procedure procedure) {
+ ObjectAccessTarget target = procedure != null
+ ? new ObjectAccessTarget.interfaceMember(procedure,
+ isPotentiallyNullable: false)
+ : const ObjectAccessTarget.missing();
int fileOffset = expression.fileOffset;
Name methodName = expression.name;
Arguments arguments = expression.arguments;
@@ -3490,6 +3525,12 @@
isSpecialCasedBinaryOperatorForReceiverType(target, receiverType);
DartType calleeType = getGetterType(target, receiverType);
FunctionType functionType = getFunctionType(target, receiverType);
+ if (procedure != null) {
+ calleeType =
+ computeTypeFromSuperClass(procedure.enclosingClass, calleeType);
+ functionType =
+ computeTypeFromSuperClass(procedure.enclosingClass, functionType);
+ }
if (isNonNullableByDefault &&
expression.name == equalsName &&
functionType.positionalParameters.length == 1) {
@@ -3503,7 +3544,7 @@
typeContext, fileOffset, functionType, arguments,
isSpecialCasedBinaryOperator: isSpecialCasedBinaryOperator,
receiverType: receiverType,
- isImplicitExtensionMember: target.isExtensionMember);
+ isImplicitExtensionMember: false);
DartType inferredType = result.inferredType;
if (methodName.text == '==') {
inferredType = coreTypes.boolRawType(library.nonNullable);
@@ -3534,18 +3575,20 @@
}
/// Performs the core type inference algorithm for super property get.
- ExpressionInferenceResult inferSuperPropertyGet(SuperPropertyGet expression,
- DartType typeContext, ObjectAccessTarget readTarget) {
- assert(readTarget.isInstanceMember ||
- readTarget.isObjectMember ||
- readTarget.isMissing);
+ ExpressionInferenceResult inferSuperPropertyGet(
+ SuperPropertyGet expression, DartType typeContext, Member member) {
+ ObjectAccessTarget readTarget = member != null
+ ? new ObjectAccessTarget.interfaceMember(member,
+ isPotentiallyNullable: false)
+ : const ObjectAccessTarget.missing();
DartType receiverType = thisType;
DartType inferredType = getGetterType(readTarget, receiverType);
- if (readTarget.isInstanceMember || readTarget.isObjectMember) {
- Member member = readTarget.member;
- if (member is Procedure && member.kind == ProcedureKind.Method) {
- return instantiateTearOff(inferredType, typeContext, expression);
- }
+ if (member != null) {
+ inferredType =
+ computeTypeFromSuperClass(member.enclosingClass, inferredType);
+ }
+ if (member is Procedure && member.kind == ProcedureKind.Method) {
+ return instantiateTearOff(inferredType, typeContext, expression);
}
return new ExpressionInferenceResult(inferredType, expression);
}
diff --git a/pkg/front_end/lib/src/testing/id_testing_helper.dart b/pkg/front_end/lib/src/testing/id_testing_helper.dart
index 82e3414..69fb201 100644
--- a/pkg/front_end/lib/src/testing/id_testing_helper.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_helper.dart
@@ -159,23 +159,21 @@
Member member;
int offset;
if (id.className != null) {
- Class cls = lookupClass(library, id.className);
- member = lookupClassMember(cls, id.memberName, required: false);
- if (member != null) {
- offset = member.fileOffset;
- if (offset == -1) {
+ Class cls = lookupClass(library, id.className, required: false);
+ if (cls != null) {
+ member = lookupClassMember(cls, id.memberName, required: false);
+ if (member != null) {
+ offset = member.fileOffset;
+ if (offset == -1) {
+ offset = cls.fileOffset;
+ }
+ } else {
offset = cls.fileOffset;
}
- } else {
- offset = cls.fileOffset;
}
} else {
member = lookupLibraryMember(library, id.memberName, required: false);
- if (member != null) {
- offset = member.fileOffset;
- } else {
- offset = 0;
- }
+ offset = member?.fileOffset ?? 0;
}
if (offset == -1) {
offset = 0;
@@ -188,8 +186,8 @@
if (extension != null) {
return extension.fileOffset;
}
- Class cls = lookupClass(library, id.className);
- return cls.fileOffset;
+ Class cls = lookupClass(library, id.className, required: false);
+ return cls?.fileOffset ?? 0;
}
return null;
}
diff --git a/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
new file mode 100644
index 0000000..5fb09fd
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
@@ -0,0 +1,309 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'dart:io' show Directory, Platform;
+import 'package:_fe_analyzer_shared/src/testing/features.dart';
+import 'package:_fe_analyzer_shared/src/testing/id.dart';
+import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
+import 'package:front_end/src/fasta/kernel/kernel_api.dart';
+import 'package:front_end/src/testing/id_testing_helper.dart';
+import 'package:front_end/src/testing/id_testing_utils.dart';
+import 'package:front_end/src/fasta/kernel/class_hierarchy_builder.dart';
+import 'package:front_end/src/testing/id_extractor.dart';
+import 'package:kernel/ast.dart';
+
+main(List<String> args) async {
+ Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
+ await runTests<Features>(dataDir,
+ args: args,
+ createUriForFileName: createUriForFileName,
+ onFailure: onFailure,
+ runTest: runTestFor(
+ const ClassHierarchyDataComputer(), [cfeNonNullableConfig]));
+}
+
+class ClassHierarchyDataComputer extends DataComputer<Features> {
+ const ClassHierarchyDataComputer();
+
+ /// Function that computes a data mapping for [library].
+ ///
+ /// Fills [actualMap] with the data.
+ void computeLibraryData(
+ TestConfig config,
+ InternalCompilerResult compilerResult,
+ Library library,
+ Map<Id, ActualData<Features>> actualMap,
+ {bool verbose}) {
+ new InheritanceDataExtractor(compilerResult, actualMap)
+ .computeForLibrary(library);
+ }
+
+ @override
+ void computeClassData(
+ TestConfig config,
+ InternalCompilerResult compilerResult,
+ Class cls,
+ Map<Id, ActualData<Features>> actualMap,
+ {bool verbose}) {
+ new InheritanceDataExtractor(compilerResult, actualMap)
+ .computeForClass(cls);
+ }
+
+ @override
+ bool get supportsErrors => true;
+
+ @override
+ Features computeErrorData(TestConfig config, InternalCompilerResult compiler,
+ Id id, List<FormattedMessage> errors) {
+ return null; //errorsToText(errors, useCodes: true);
+ }
+
+ @override
+ DataInterpreter<Features> get dataValidator =>
+ const FeaturesDataInterpreter();
+}
+
+class Tag {
+ static const String superclasses = 'superclasses';
+ static const String interfaces = 'interfaces';
+ static const String hasNoSuchMethod = 'hasNoSuchMethod';
+ static const String abstractMembers = 'abstractMembers';
+ static const String classBuilder = 'classBuilder';
+ static const String isSourceDeclaration = 'isSourceDeclaration';
+ static const String isSynthesized = 'isSynthesized';
+ static const String member = 'member';
+ static const String maxInheritancePath = 'maxInheritancePath';
+ static const String declaredOverrides = 'declared-overrides';
+ static const String mixinApplicationOverrides = 'mixin-overrides';
+ static const String inheritedImplements = 'inherited-implements';
+ static const String abstractForwardingStub = 'abstractForwardingStub';
+ static const String concreteForwardingStub = 'concreteForwardingStub';
+ static const String memberSignature = 'memberSignature';
+ static const String abstractMixinStub = 'abstractMixinStub';
+ static const String concreteMixinStub = 'concreteMixinStub';
+ static const String declarations = 'declarations';
+ static const String stubTarget = 'stubTarget';
+ static const String type = 'type';
+ static const String covariance = 'covariance';
+}
+
+class InheritanceDataExtractor extends CfeDataExtractor<Features> {
+ final InternalCompilerResult _compilerResult;
+
+ InheritanceDataExtractor(
+ this._compilerResult, Map<Id, ActualData<Features>> actualMap)
+ : super(_compilerResult, actualMap);
+
+ CoreTypes get _coreTypes => _compilerResult.coreTypes;
+
+ ClassHierarchyBuilder get _classHierarchyBuilder =>
+ _compilerResult.kernelTargetForTesting.loader.builderHierarchy;
+
+ @override
+ void computeForClass(Class node) {
+ super.computeForClass(node);
+ ClassHierarchyNode classHierarchyNode =
+ _classHierarchyBuilder.getNodeFromClass(node);
+ ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting;
+ void addMember(ClassMember classMember,
+ {bool isSetter, bool isClassMember}) {
+ Member member = classMember.getMember(_classHierarchyBuilder);
+ Member memberOrigin = member.memberSignatureOrigin ?? member;
+ if (memberOrigin.enclosingClass == _coreTypes.objectClass) {
+ return;
+ }
+ Features features = new Features();
+
+ String memberName = classMemberName(classMember);
+ memberName += isClassMember ? '#cls' : '#int';
+ MemberId id = new MemberId.internal(memberName, className: node.name);
+
+ TreeNode nodeWithOffset;
+ if (member.enclosingClass == node) {
+ nodeWithOffset = computeTreeNodeWithOffset(member);
+ } else {
+ nodeWithOffset = computeTreeNodeWithOffset(node);
+ }
+ if (classMember.isSourceDeclaration) {
+ features.add(Tag.isSourceDeclaration);
+ }
+ if (classMember.isSynthesized) {
+ features.add(Tag.isSynthesized);
+ if (member.enclosingClass != node) {
+ features[Tag.member] = memberQualifiedName(member);
+ }
+ if (classMember.hasDeclarations) {
+ for (ClassMember declaration in classMember.declarations) {
+ features.addElement(
+ Tag.declarations, classMemberQualifiedName(declaration));
+ }
+ }
+ }
+ features[Tag.classBuilder] = classMember.classBuilder.name;
+
+ Set<ClassMember> declaredOverrides =
+ data.declaredOverrides[data.aliasMap[classMember] ?? classMember];
+ if (declaredOverrides != null) {
+ for (ClassMember override in declaredOverrides) {
+ features.addElement(
+ Tag.declaredOverrides, classMemberQualifiedName(override));
+ }
+ }
+
+ Set<ClassMember> mixinApplicationOverrides = data
+ .mixinApplicationOverrides[data.aliasMap[classMember] ?? classMember];
+ if (mixinApplicationOverrides != null) {
+ for (ClassMember override in mixinApplicationOverrides) {
+ features.addElement(Tag.mixinApplicationOverrides,
+ classMemberQualifiedName(override));
+ }
+ }
+
+ Set<ClassMember> inheritedImplements =
+ data.inheritedImplements[data.aliasMap[classMember] ?? classMember];
+ if (inheritedImplements != null) {
+ for (ClassMember implement in inheritedImplements) {
+ features.addElement(
+ Tag.inheritedImplements, classMemberQualifiedName(implement));
+ }
+ }
+
+ if (member.enclosingClass == node && member is Procedure) {
+ switch (member.stubKind) {
+ case ProcedureStubKind.Regular:
+ // TODO: Handle this case.
+ break;
+ case ProcedureStubKind.AbstractForwardingStub:
+ features.add(Tag.abstractForwardingStub);
+ features[Tag.type] = procedureType(member);
+ features[Tag.covariance] =
+ classMember.getCovariance(_classHierarchyBuilder).toString();
+ break;
+ case ProcedureStubKind.ConcreteForwardingStub:
+ features.add(Tag.concreteForwardingStub);
+ features[Tag.type] = procedureType(member);
+ features[Tag.covariance] =
+ classMember.getCovariance(_classHierarchyBuilder).toString();
+ features[Tag.stubTarget] = memberQualifiedName(member.stubTarget);
+ break;
+ case ProcedureStubKind.NoSuchMethodForwarder:
+ // TODO: Handle this case.
+ break;
+ case ProcedureStubKind.MemberSignature:
+ features.add(Tag.memberSignature);
+ features[Tag.type] = procedureType(member);
+ features[Tag.covariance] =
+ classMember.getCovariance(_classHierarchyBuilder).toString();
+ break;
+ case ProcedureStubKind.AbstractMixinStub:
+ features.add(Tag.abstractMixinStub);
+ break;
+ case ProcedureStubKind.ConcreteMixinStub:
+ features.add(Tag.concreteMixinStub);
+ features[Tag.stubTarget] = memberQualifiedName(member.stubTarget);
+ break;
+ }
+ }
+
+ registerValue(nodeWithOffset?.location?.file, nodeWithOffset?.fileOffset,
+ id, features, member);
+ }
+
+ classHierarchyNode.classMemberMap
+ ?.forEach((Name name, ClassMember classMember) {
+ addMember(classMember, isSetter: false, isClassMember: true);
+ });
+ classHierarchyNode.classSetterMap
+ ?.forEach((Name name, ClassMember classMember) {
+ addMember(classMember, isSetter: true, isClassMember: true);
+ });
+ classHierarchyNode.interfaceMemberMap
+ ?.forEach((Name name, ClassMember classMember) {
+ if (!identical(classMember, classHierarchyNode.classMemberMap[name])) {
+ addMember(classMember, isSetter: false, isClassMember: false);
+ }
+ });
+ classHierarchyNode.interfaceSetterMap
+ ?.forEach((Name name, ClassMember classMember) {
+ if (!identical(classMember, classHierarchyNode.classSetterMap[name])) {
+ addMember(classMember, isSetter: true, isClassMember: false);
+ }
+ });
+ }
+
+ @override
+ Features computeClassValue(Id id, Class node) {
+ Features features = new Features();
+ ClassHierarchyNode classHierarchyNode =
+ _classHierarchyBuilder.getNodeFromClass(node);
+ ClassHierarchyNodeDataForTesting data = classHierarchyNode.dataForTesting;
+ classHierarchyNode.superclasses.forEach((Supertype supertype) {
+ features.addElement(Tag.superclasses, supertypeToText(supertype));
+ });
+ classHierarchyNode.interfaces.forEach((Supertype supertype) {
+ features.addElement(Tag.interfaces, supertypeToText(supertype));
+ });
+ if (data.abstractMembers != null) {
+ for (ClassMember abstractMember in data.abstractMembers) {
+ features.addElement(
+ Tag.abstractMembers, classMemberQualifiedName(abstractMember));
+ }
+ }
+ features[Tag.maxInheritancePath] =
+ '${classHierarchyNode.maxInheritancePath}';
+ if (classHierarchyNode.hasNoSuchMethod) {
+ features.add(Tag.hasNoSuchMethod);
+ }
+ return features;
+ }
+}
+
+String classMemberName(ClassMember classMember) {
+ String name = classMember.name.text;
+ if (classMember.forSetter) {
+ name += '=';
+ }
+ return name;
+}
+
+String classMemberQualifiedName(ClassMember classMember) {
+ return '${classMember.classBuilder.name}.${classMemberName(classMember)}';
+}
+
+String memberName(Member member) {
+ String name = member.name.text;
+ if (member is Procedure && member.isSetter) {
+ name += '=';
+ }
+ return name;
+}
+
+String memberQualifiedName(Member member) {
+ return '${member.enclosingClass.name}.${memberName(member)}';
+}
+
+String procedureType(Procedure procedure) {
+ if (procedure.kind == ProcedureKind.Getter) {
+ return typeToText(procedure.function.returnType,
+ TypeRepresentation.analyzerNonNullableByDefault);
+ } else if (procedure.kind == ProcedureKind.Setter) {
+ return typeToText(procedure.function.positionalParameters.single.type,
+ TypeRepresentation.analyzerNonNullableByDefault);
+ } else {
+ Nullability functionTypeNullability;
+ if (procedure.enclosingLibrary.isNonNullableByDefault) {
+ functionTypeNullability = procedure.enclosingLibrary.nonNullable;
+ } else {
+ // We don't create a member signature when the member is just
+ // a substitution. We should still take the nullability to be
+ // legacy, though.
+ functionTypeNullability = procedure.enclosingLibrary.nonNullable;
+ }
+ return typeToText(
+ procedure.function.computeThisFunctionType(functionTypeNullability),
+ TypeRepresentation.analyzerNonNullableByDefault);
+ }
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_extends_field.dart b/pkg/front_end/test/class_hierarchy/data/abstract_extends_field.dart
new file mode 100644
index 0000000..fbd6127
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_extends_field.dart
@@ -0,0 +1,197 @@
+// Copyright (c) 2021, 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.
+
+/*class: AbstractSuper:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class AbstractSuper {
+ /*member: AbstractSuper.extendedConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.extendedConcreteField=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int extendedConcreteField = 0;
+
+ /*member: AbstractSuper.extendedAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.extendedAbstractField=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractField;
+
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteField=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteField=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int declaredAbstractExtendsConcreteField = 0;
+
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractField=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract int declaredConcreteExtendsAbstractField;
+
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractField=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractExtendsAbstractField;
+}
+
+/*class: AbstractClass:
+ maxInheritancePath=2,
+ superclasses=[
+ AbstractSuper,
+ Object]
+*/
+abstract class AbstractClass extends AbstractSuper {
+ /*member: AbstractClass.extendedConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedConcreteField=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedAbstractField=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteField=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int declaredConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractField#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredAbstractField=#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractField;
+
+ /*member: AbstractClass.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredConcreteExtendsConcreteField,
+ AbstractSuper.declaredConcreteExtendsConcreteField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteExtendsConcreteField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredConcreteExtendsConcreteField,
+ AbstractSuper.declaredConcreteExtendsConcreteField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteField,
+ AbstractSuper.declaredAbstractExtendsConcreteField],
+ declared-overrides=[
+ AbstractSuper.declaredAbstractExtendsConcreteField,
+ AbstractSuper.declaredAbstractExtendsConcreteField=],
+ isSynthesized
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteField=,
+ AbstractSuper.declaredAbstractExtendsConcreteField=],
+ declared-overrides=[
+ AbstractSuper.declaredAbstractExtendsConcreteField,
+ AbstractSuper.declaredAbstractExtendsConcreteField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractExtendsConcreteField;
+
+ /*member: AbstractClass.declaredConcreteExtendsAbstractField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredConcreteExtendsAbstractField,
+ AbstractSuper.declaredConcreteExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteExtendsAbstractField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredConcreteExtendsAbstractField,
+ AbstractSuper.declaredConcreteExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsAbstractField = 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsAbstractField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredAbstractExtendsAbstractField,
+ AbstractSuper.declaredAbstractExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredAbstractExtendsAbstractField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ AbstractSuper.declaredAbstractExtendsAbstractField,
+ AbstractSuper.declaredAbstractExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ int declaredAbstractExtendsAbstractField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_extends_final_field.dart b/pkg/front_end/test/class_hierarchy/data/abstract_extends_final_field.dart
new file mode 100644
index 0000000..b5ed4db
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_extends_final_field.dart
@@ -0,0 +1,116 @@
+// Copyright (c) 2021, 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.
+
+/*class: AbstractSuper:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class AbstractSuper {
+ /*member: AbstractSuper.extendedConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ final int extendedConcreteField = 0;
+
+ /*member: AbstractSuper.extendedAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractField;
+
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ final int declaredAbstractExtendsConcreteField = 0;
+
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract final int declaredConcreteExtendsAbstractField;
+
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractExtendsAbstractField;
+}
+
+/*class: AbstractClass:
+ maxInheritancePath=2,
+ superclasses=[
+ AbstractSuper,
+ Object]
+*/
+abstract class AbstractClass extends AbstractSuper {
+ /*member: AbstractClass.extendedConcreteField#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractField#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ final int declaredConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractField#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractField;
+
+ /*member: AbstractClass.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsConcreteField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteField,
+ AbstractSuper.declaredAbstractExtendsConcreteField],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsConcreteField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractExtendsConcreteField;
+
+ /*member: AbstractClass.declaredConcreteExtendsAbstractField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsAbstractField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsAbstractField = 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsAbstractField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsAbstractField,
+ AbstractSuper.declaredAbstractExtendsAbstractField],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsAbstractField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_extends_getter.dart b/pkg/front_end/test/class_hierarchy/data/abstract_extends_getter.dart
new file mode 100644
index 0000000..6900a41
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_extends_getter.dart
@@ -0,0 +1,116 @@
+// Copyright (c) 2021, 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.
+
+/*class: AbstractSuper:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class AbstractSuper {
+ /*member: AbstractSuper.extendedConcreteGetter#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get extendedConcreteGetter => 0;
+
+ /*member: AbstractSuper.extendedAbstractGetter#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get extendedAbstractGetter;
+
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteGetter#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsConcreteGetter => 0;
+
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteGetter#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get declaredAbstractExtendsConcreteGetter => 0;
+
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractGetter#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsAbstractGetter;
+
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractGetter#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ int get declaredAbstractExtendsAbstractGetter;
+}
+
+/*class: AbstractClass:
+ maxInheritancePath=2,
+ superclasses=[
+ AbstractSuper,
+ Object]
+*/
+abstract class AbstractClass extends AbstractSuper {
+ /*member: AbstractClass.extendedConcreteGetter#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractGetter#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteGetter#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int get declaredConcreteGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractGetter#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int get declaredAbstractGetter;
+
+ /*member: AbstractClass.declaredConcreteExtendsConcreteGetter#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsConcreteGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsConcreteGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsConcreteGetter#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteGetter
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteGetter,
+ AbstractSuper.declaredAbstractExtendsConcreteGetter],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsConcreteGetter],
+ isSynthesized
+ */
+ int get declaredAbstractExtendsConcreteGetter;
+
+ /*member: AbstractClass.declaredConcreteExtendsAbstractGetter#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsAbstractGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsAbstractGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractExtendsAbstractGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsAbstractGetter,
+ AbstractSuper.declaredAbstractExtendsAbstractGetter],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsAbstractGetter],
+ isSynthesized
+ */
+ int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_extends_method.dart b/pkg/front_end/test/class_hierarchy/data/abstract_extends_method.dart
new file mode 100644
index 0000000..7bbce15
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_extends_method.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2021, 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.
+
+/*class: AbstractSuper:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class AbstractSuper {
+ /*member: AbstractSuper.extendedConcreteMethod#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod() {}
+
+ /*member: AbstractSuper.extendedAbstractMethod#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod();
+
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteMethod#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsConcreteMethod() {}
+
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteMethod#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void declaredAbstractExtendsConcreteMethod() {}
+
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractMethod#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsAbstractMethod();
+
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractMethod#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void declaredAbstractExtendsAbstractMethod();
+}
+
+/*class: AbstractClass:
+ maxInheritancePath=2,
+ superclasses=[
+ AbstractSuper,
+ Object]
+*/
+/*member: AbstractClass.declaredAbstractExtendsConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteMethod
+*/
+abstract class AbstractClass extends AbstractSuper {
+ /*member: AbstractClass.extendedConcreteMethod#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractMethod#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void declaredConcreteMethod() {}
+
+ /*member: AbstractClass.declaredAbstractMethod#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void declaredAbstractMethod();
+
+ /*member: AbstractClass.declaredConcreteExtendsConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsConcreteMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsConcreteMethod() {}
+
+ /*member: AbstractClass.declaredAbstractExtendsConcreteMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteMethod,
+ AbstractSuper.declaredAbstractExtendsConcreteMethod],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsConcreteMethod],
+ isSynthesized
+ */
+ void declaredAbstractExtendsConcreteMethod();
+
+ /*member: AbstractClass.declaredConcreteExtendsAbstractMethod#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsAbstractMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsAbstractMethod() {}
+
+ /*member: AbstractClass.declaredAbstractExtendsAbstractMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsAbstractMethod,
+ AbstractSuper.declaredAbstractExtendsAbstractMethod],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsAbstractMethod],
+ isSynthesized
+ */
+ void declaredAbstractExtendsAbstractMethod();
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_extends_setter.dart b/pkg/front_end/test/class_hierarchy/data/abstract_extends_setter.dart
new file mode 100644
index 0000000..dbbd9a1
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_extends_setter.dart
@@ -0,0 +1,116 @@
+// Copyright (c) 2021, 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.
+
+/*class: AbstractSuper:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class AbstractSuper {
+ /*member: AbstractSuper.extendedConcreteSetter=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set extendedConcreteSetter(int value) {}
+
+ /*member: AbstractSuper.extendedAbstractSetter=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set extendedAbstractSetter(int value);
+
+ /*member: AbstractSuper.declaredConcreteExtendsConcreteSetter=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+ /*member: AbstractSuper.declaredAbstractExtendsConcreteSetter=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set declaredAbstractExtendsConcreteSetter(int value) {}
+
+ /*member: AbstractSuper.declaredConcreteExtendsAbstractSetter=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsAbstractSetter(int value);
+
+ /*member: AbstractSuper.declaredAbstractExtendsAbstractSetter=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+ void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+/*class: AbstractClass:
+ maxInheritancePath=2,
+ superclasses=[
+ AbstractSuper,
+ Object]
+*/
+abstract class AbstractClass extends AbstractSuper {
+ /*member: AbstractClass.extendedConcreteSetter=#cls:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractSetter=#int:
+ classBuilder=AbstractSuper,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteSetter=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void set declaredConcreteSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractSetter=#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void set declaredAbstractSetter(int value);
+
+ /*member: AbstractClass.declaredConcreteExtendsConcreteSetter=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsConcreteSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractExtendsConcreteSetter=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=AbstractSuper.declaredAbstractExtendsConcreteSetter=
+ */
+ /*member: AbstractClass.declaredAbstractExtendsConcreteSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsConcreteSetter=,
+ AbstractSuper.declaredAbstractExtendsConcreteSetter=],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsConcreteSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractExtendsConcreteSetter(int value);
+
+ /*member: AbstractClass.declaredConcreteExtendsAbstractSetter=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[AbstractSuper.declaredConcreteExtendsAbstractSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsAbstractSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractExtendsAbstractSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractExtendsAbstractSetter=,
+ AbstractSuper.declaredAbstractExtendsAbstractSetter=],
+ declared-overrides=[AbstractSuper.declaredAbstractExtendsAbstractSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_implements_field.dart b/pkg/front_end/test/class_hierarchy/data/abstract_implements_field.dart
new file mode 100644
index 0000000..273a40d
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_implements_field.dart
@@ -0,0 +1,192 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.implementedConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.implementedConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int implementedConcreteField = 0;
+
+ /*member: Interface.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.implementedAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int implementedAbstractField;
+
+ /*member: Interface.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredConcreteImplementsConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredAbstractImplementsConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int declaredAbstractImplementsConcreteField = 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredConcreteImplementsAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int declaredConcreteImplementsAbstractField;
+
+ /*member: Interface.declaredAbstractImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredAbstractImplementsAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractImplementsAbstractField;
+}
+
+/*class: AbstractClass:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface {
+ /*member: AbstractClass.implementedConcreteField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.implementedConcreteField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.implementedAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteField=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int declaredConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractField#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredAbstractField=#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractField;
+
+ /*member: AbstractClass.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsConcreteField,
+ Interface.declaredConcreteImplementsConcreteField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteImplementsConcreteField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsConcreteField,
+ Interface.declaredConcreteImplementsConcreteField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsConcreteField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField=],
+ isSynthesized
+ */
+ /*member: AbstractClass.declaredAbstractImplementsConcreteField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteField=,
+ Interface.declaredAbstractImplementsConcreteField=],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractImplementsConcreteField;
+
+ /*member: AbstractClass.declaredConcreteImplementsAbstractField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declaredConcreteImplementsAbstractField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsAbstractField = 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsAbstractField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField=],
+ isSynthesized
+ */
+ /*member: AbstractClass.declaredAbstractImplementsAbstractField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractField=,
+ Interface.declaredAbstractImplementsAbstractField=],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_implements_final_field.dart b/pkg/front_end/test/class_hierarchy/data/abstract_implements_final_field.dart
new file mode 100644
index 0000000..cb20cef
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_implements_final_field.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.implementedConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int implementedConcreteField = 0;
+
+ /*member: Interface.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int implementedAbstractField;
+
+ /*member: Interface.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int declaredAbstractImplementsConcreteField = 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int declaredConcreteImplementsAbstractField;
+
+ /*member: Interface.declaredAbstractImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractImplementsAbstractField;
+}
+
+/*class: AbstractClass:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface {
+ /*member: AbstractClass.implementedConcreteField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ final int declaredConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractField#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractField;
+
+ /*member: AbstractClass.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsConcreteField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractImplementsConcreteField;
+
+ /*member: AbstractClass.declaredConcreteImplementsAbstractField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsAbstractField = 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsAbstractField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_implements_getter.dart b/pkg/front_end/test/class_hierarchy/data/abstract_implements_getter.dart
new file mode 100644
index 0000000..2c44f41
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_implements_getter.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.implementedConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get implementedConcreteGetter => 0;
+
+ /*member: Interface.implementedAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get implementedAbstractGetter;
+
+ /*member: Interface.declaredConcreteImplementsConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsConcreteGetter => 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredAbstractImplementsConcreteGetter => 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsAbstractGetter;
+
+ /*member: Interface.declaredAbstractImplementsAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredAbstractImplementsAbstractGetter;
+}
+
+/*class: AbstractClass:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface {
+ /*member: AbstractClass.implementedConcreteGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.implementedAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteGetter#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int get declaredConcreteGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractGetter#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ int get declaredAbstractGetter;
+
+ /*member: AbstractClass.declaredConcreteImplementsConcreteGetter#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsConcreteGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsConcreteGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteGetter,
+ Interface.declaredAbstractImplementsConcreteGetter],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteGetter],
+ isSynthesized
+ */
+ int get declaredAbstractImplementsConcreteGetter;
+
+ /*member: AbstractClass.declaredConcreteImplementsAbstractGetter#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsAbstractGetter => 0;
+
+ /*member: AbstractClass.declaredAbstractImplementsAbstractGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractGetter,
+ Interface.declaredAbstractImplementsAbstractGetter],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractGetter],
+ isSynthesized
+ */
+ int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_implements_method.dart b/pkg/front_end/test/class_hierarchy/data/abstract_implements_method.dart
new file mode 100644
index 0000000..3b9071e
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_implements_method.dart
@@ -0,0 +1,108 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.implementedConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedConcreteMethod() {}
+
+ /*member: Interface.implementedAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedAbstractMethod();
+
+ /*member: Interface.declaredConcreteImplementsConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsConcreteMethod() {}
+
+ /*member: Interface.declaredAbstractImplementsConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredAbstractImplementsConcreteMethod() {}
+
+ /*member: Interface.declaredConcreteImplementsAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsAbstractMethod();
+
+ /*member: Interface.declaredAbstractImplementsAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredAbstractImplementsAbstractMethod();
+}
+
+/*class: AbstractClass:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface {
+ /*member: AbstractClass.implementedConcreteMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.implementedAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void declaredConcreteMethod() {}
+
+ /*member: AbstractClass.declaredAbstractMethod#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void declaredAbstractMethod();
+
+ /*member: AbstractClass.declaredConcreteImplementsConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsConcreteMethod() {}
+
+ /*member: AbstractClass.declaredAbstractImplementsConcreteMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteMethod,
+ Interface.declaredAbstractImplementsConcreteMethod],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteMethod],
+ isSynthesized
+ */
+ void declaredAbstractImplementsConcreteMethod();
+
+ /*member: AbstractClass.declaredConcreteImplementsAbstractMethod#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsAbstractMethod() {}
+
+ /*member: AbstractClass.declaredAbstractImplementsAbstractMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractMethod,
+ Interface.declaredAbstractImplementsAbstractMethod],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractMethod],
+ isSynthesized
+ */
+ void declaredAbstractImplementsAbstractMethod();
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/abstract_implements_setter.dart b/pkg/front_end/test/class_hierarchy/data/abstract_implements_setter.dart
new file mode 100644
index 0000000..601fb9d
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/abstract_implements_setter.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.implementedConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set implementedConcreteSetter(int value) {}
+
+ /*member: Interface.implementedAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set implementedAbstractSetter(int value);
+
+ /*member: Interface.declaredConcreteImplementsConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+ /*member: Interface.declaredAbstractImplementsConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredAbstractImplementsConcreteSetter(int value) {}
+
+ /*member: Interface.declaredConcreteImplementsAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsAbstractSetter(int value);
+
+ /*member: Interface.declaredAbstractImplementsAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+/*class: AbstractClass:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface {
+ /*member: AbstractClass.implementedConcreteSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.implementedAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.declaredConcreteSetter=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void set declaredConcreteSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractSetter=#int:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ void set declaredAbstractSetter(int value);
+
+ /*member: AbstractClass.declaredConcreteImplementsConcreteSetter=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractImplementsConcreteSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsConcreteSetter=,
+ Interface.declaredAbstractImplementsConcreteSetter=],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractImplementsConcreteSetter(int value);
+
+ /*member: AbstractClass.declaredConcreteImplementsAbstractSetter=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsAbstractSetter(int value) {}
+
+ /*member: AbstractClass.declaredAbstractImplementsAbstractSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declaredAbstractImplementsAbstractSetter=,
+ Interface.declaredAbstractImplementsAbstractSetter=],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_extends_field.dart b/pkg/front_end/test/class_hierarchy/data/concrete_extends_field.dart
new file mode 100644
index 0000000..549ab8d
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_extends_field.dart
@@ -0,0 +1,219 @@
+// Copyright (c) 2021, 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.
+
+/*class: ConcreteSuper:
+ abstractMembers=[
+ ConcreteSuper.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredAbstractExtendsAbstractField=,
+ ConcreteSuper.declaredConcreteExtendsAbstractField,
+ ConcreteSuper.declaredConcreteExtendsAbstractField=,
+ ConcreteSuper.extendedAbstractField,
+ ConcreteSuper.extendedAbstractField=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class ConcreteSuper {
+ /*member: ConcreteSuper.extendedConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.extendedConcreteField=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int extendedConcreteField = 0;
+
+ /*member: ConcreteSuper.extendedAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.extendedAbstractField=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractField;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteField=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteField=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int declaredAbstractExtendsConcreteField = 0;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractField=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract int declaredConcreteExtendsAbstractField;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractField=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractExtendsAbstractField;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractExtendsAbstractField,
+ ConcreteClass.declaredAbstractExtendsAbstractField=,
+ ConcreteClass.declaredAbstractField,
+ ConcreteClass.declaredAbstractField=,
+ ConcreteSuper.extendedAbstractField,
+ ConcreteSuper.extendedAbstractField=],
+ maxInheritancePath=2,
+ superclasses=[
+ ConcreteSuper,
+ Object]
+*/
+class ConcreteClass extends ConcreteSuper {
+ /*member: ConcreteClass.extendedConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedConcreteField=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedAbstractField=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteField#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteField=#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int declaredConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractField#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredAbstractField=#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractField;
+
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ ConcreteSuper.declaredConcreteExtendsConcreteField,
+ ConcreteSuper.declaredConcreteExtendsConcreteField=],
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteField=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ ConcreteSuper.declaredConcreteExtendsConcreteField,
+ ConcreteSuper.declaredConcreteExtendsConcreteField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteField],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteField,
+ ConcreteSuper.declaredAbstractExtendsConcreteField],
+ declared-overrides=[
+ ConcreteSuper.declaredAbstractExtendsConcreteField,
+ ConcreteSuper.declaredAbstractExtendsConcreteField=],
+ isSynthesized
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteField=],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteField=,
+ ConcreteSuper.declaredAbstractExtendsConcreteField=],
+ declared-overrides=[
+ ConcreteSuper.declaredAbstractExtendsConcreteField,
+ ConcreteSuper.declaredAbstractExtendsConcreteField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractExtendsConcreteField;
+
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ ConcreteSuper.declaredConcreteExtendsAbstractField,
+ ConcreteSuper.declaredConcreteExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractField=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ ConcreteSuper.declaredConcreteExtendsAbstractField,
+ ConcreteSuper.declaredConcreteExtendsAbstractField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteExtendsAbstractField = 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredAbstractExtendsAbstractField],
+ declared-overrides=[
+ ConcreteSuper.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredAbstractExtendsAbstractField=],
+ isSynthesized
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractField=,
+ ConcreteSuper.declaredAbstractExtendsAbstractField=],
+ declared-overrides=[
+ ConcreteSuper.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredAbstractExtendsAbstractField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_extends_final_field.dart b/pkg/front_end/test/class_hierarchy/data/concrete_extends_final_field.dart
new file mode 100644
index 0000000..10334b2
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_extends_final_field.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2021, 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.
+
+/*class: ConcreteSuper:
+ abstractMembers=[
+ ConcreteSuper.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredConcreteExtendsAbstractField,
+ ConcreteSuper.extendedAbstractField],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class ConcreteSuper {
+ /*member: ConcreteSuper.extendedConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ final int extendedConcreteField = 0;
+
+ /*member: ConcreteSuper.extendedAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractField;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ final int declaredAbstractExtendsConcreteField = 0;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract final int declaredConcreteExtendsAbstractField;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractExtendsAbstractField;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractExtendsAbstractField,
+ ConcreteClass.declaredAbstractField,
+ ConcreteSuper.extendedAbstractField],
+ maxInheritancePath=2,
+ superclasses=[
+ ConcreteSuper,
+ Object]
+*/
+class ConcreteClass extends ConcreteSuper {
+ /*member: ConcreteClass.extendedConcreteField#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractField#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteField#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ final int declaredConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractField#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractField;
+
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsConcreteField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteField],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteField
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteField,
+ ConcreteSuper.declaredAbstractExtendsConcreteField],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsConcreteField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractExtendsConcreteField;
+
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsAbstractField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteExtendsAbstractField = 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractField,
+ ConcreteSuper.declaredAbstractExtendsAbstractField],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsAbstractField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_extends_getter.dart b/pkg/front_end/test/class_hierarchy/data/concrete_extends_getter.dart
new file mode 100644
index 0000000..8bf90fe
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_extends_getter.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2021, 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.
+
+/*class: ConcreteSuper:
+ abstractMembers=[
+ ConcreteSuper.declaredAbstractExtendsAbstractGetter,
+ ConcreteSuper.declaredConcreteExtendsAbstractGetter,
+ ConcreteSuper.extendedAbstractGetter],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class ConcreteSuper {
+ /*member: ConcreteSuper.extendedConcreteGetter#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get extendedConcreteGetter => 0;
+
+ /*member: ConcreteSuper.extendedAbstractGetter#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get extendedAbstractGetter;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteGetter#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsConcreteGetter => 0;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteGetter#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get declaredAbstractExtendsConcreteGetter => 0;
+
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractGetter#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsAbstractGetter;
+
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractGetter#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ int get declaredAbstractExtendsAbstractGetter;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractExtendsAbstractGetter,
+ ConcreteClass.declaredAbstractGetter,
+ ConcreteSuper.extendedAbstractGetter],
+ maxInheritancePath=2,
+ superclasses=[
+ ConcreteSuper,
+ Object]
+*/
+class ConcreteClass extends ConcreteSuper {
+ /*member: ConcreteClass.extendedConcreteGetter#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractGetter#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteGetter#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int get declaredConcreteGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractGetter#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int get declaredAbstractGetter;
+
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteGetter#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsConcreteGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsConcreteGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteGetter#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteGetter],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteGetter
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteGetter,
+ ConcreteSuper.declaredAbstractExtendsConcreteGetter],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsConcreteGetter],
+ isSynthesized
+ */
+ int get declaredAbstractExtendsConcreteGetter;
+
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractGetter#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsAbstractGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteExtendsAbstractGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractGetter,
+ ConcreteSuper.declaredAbstractExtendsAbstractGetter],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsAbstractGetter],
+ isSynthesized
+ */
+ int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_extends_method.dart b/pkg/front_end/test/class_hierarchy/data/concrete_extends_method.dart
new file mode 100644
index 0000000..d35a461
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_extends_method.dart
@@ -0,0 +1,123 @@
+// Copyright (c) 2021, 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.
+
+/*class: ConcreteSuper:
+ abstractMembers=[
+ ConcreteSuper.declaredAbstractExtendsAbstractMethod,
+ ConcreteSuper.declaredConcreteExtendsAbstractMethod,
+ ConcreteSuper.extendedAbstractMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class ConcreteSuper {
+ /*member: ConcreteSuper.extendedConcreteMethod#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod() {}
+
+ /*member: ConcreteSuper.extendedAbstractMethod#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod();
+
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteMethod#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsConcreteMethod() {}
+
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteMethod#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void declaredAbstractExtendsConcreteMethod() {}
+
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractMethod#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsAbstractMethod();
+
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractMethod#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void declaredAbstractExtendsAbstractMethod();
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractExtendsAbstractMethod,
+ ConcreteClass.declaredAbstractMethod,
+ ConcreteSuper.extendedAbstractMethod],
+ maxInheritancePath=2,
+ superclasses=[
+ ConcreteSuper,
+ Object]
+*/
+class ConcreteClass extends ConcreteSuper {
+ /*member: ConcreteClass.extendedConcreteMethod#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractMethod#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void declaredConcreteMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractMethod#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void declaredAbstractMethod();
+
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsConcreteMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsConcreteMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteMethod],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteMethod
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteMethod,
+ ConcreteSuper.declaredAbstractExtendsConcreteMethod],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsConcreteMethod],
+ isSynthesized
+ */
+ void declaredAbstractExtendsConcreteMethod();
+
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractMethod#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsAbstractMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteExtendsAbstractMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractMethod,
+ ConcreteSuper.declaredAbstractExtendsAbstractMethod],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsAbstractMethod],
+ isSynthesized
+ */
+ void declaredAbstractExtendsAbstractMethod();
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_extends_setter.dart b/pkg/front_end/test/class_hierarchy/data/concrete_extends_setter.dart
new file mode 100644
index 0000000..35a7340
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_extends_setter.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2021, 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.
+
+/*class: ConcreteSuper:
+ abstractMembers=[
+ ConcreteSuper.declaredAbstractExtendsAbstractSetter=,
+ ConcreteSuper.declaredConcreteExtendsAbstractSetter=,
+ ConcreteSuper.extendedAbstractSetter=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class ConcreteSuper {
+ /*member: ConcreteSuper.extendedConcreteSetter=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set extendedConcreteSetter(int value) {}
+
+ /*member: ConcreteSuper.extendedAbstractSetter=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set extendedAbstractSetter(int value);
+
+ /*member: ConcreteSuper.declaredConcreteExtendsConcreteSetter=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+ /*member: ConcreteSuper.declaredAbstractExtendsConcreteSetter=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set declaredAbstractExtendsConcreteSetter(int value) {}
+
+ /*member: ConcreteSuper.declaredConcreteExtendsAbstractSetter=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsAbstractSetter(int value);
+
+ /*member: ConcreteSuper.declaredAbstractExtendsAbstractSetter=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+ void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractExtendsAbstractSetter=,
+ ConcreteClass.declaredAbstractSetter=,
+ ConcreteSuper.extendedAbstractSetter=],
+ maxInheritancePath=2,
+ superclasses=[
+ ConcreteSuper,
+ Object]
+*/
+class ConcreteClass extends ConcreteSuper {
+ /*member: ConcreteClass.extendedConcreteSetter=#cls:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractSetter=#int:
+ classBuilder=ConcreteSuper,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteSetter=#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void set declaredConcreteSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractSetter=#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void set declaredAbstractSetter(int value);
+
+ /*member: ConcreteClass.declaredConcreteExtendsConcreteSetter=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsConcreteSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteSetter=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.declaredAbstractExtendsConcreteSetter=],
+ isSynthesized,
+ member=ConcreteSuper.declaredAbstractExtendsConcreteSetter=
+ */
+ /*member: ConcreteClass.declaredAbstractExtendsConcreteSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsConcreteSetter=,
+ ConcreteSuper.declaredAbstractExtendsConcreteSetter=],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsConcreteSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractExtendsConcreteSetter(int value);
+
+ /*member: ConcreteClass.declaredConcreteExtendsAbstractSetter=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[ConcreteSuper.declaredConcreteExtendsAbstractSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteExtendsAbstractSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractExtendsAbstractSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractExtendsAbstractSetter=,
+ ConcreteSuper.declaredAbstractExtendsAbstractSetter=],
+ declared-overrides=[ConcreteSuper.declaredAbstractExtendsAbstractSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_implements_field.dart b/pkg/front_end/test/class_hierarchy/data/concrete_implements_field.dart
new file mode 100644
index 0000000..dabaa18
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_implements_field.dart
@@ -0,0 +1,210 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ abstractMembers=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField=,
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField=,
+ Interface.implementedAbstractField,
+ Interface.implementedAbstractField=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.implementedConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int implementedConcreteField = 0;
+
+ /*member: Interface.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.implementedAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int implementedAbstractField;
+
+ /*member: Interface.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredConcreteImplementsConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredAbstractImplementsConcreteField=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int declaredAbstractImplementsConcreteField = 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredConcreteImplementsAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int declaredConcreteImplementsAbstractField;
+
+ /*member: Interface.declaredAbstractImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.declaredAbstractImplementsAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractImplementsAbstractField;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractField,
+ ConcreteClass.declaredAbstractField=,
+ ConcreteClass.declaredAbstractImplementsAbstractField,
+ ConcreteClass.declaredAbstractImplementsAbstractField=,
+ ConcreteClass.declaredAbstractImplementsConcreteField,
+ ConcreteClass.declaredAbstractImplementsConcreteField=,
+ Interface.implementedAbstractField,
+ Interface.implementedAbstractField=,
+ Interface.implementedConcreteField,
+ Interface.implementedConcreteField=],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface {
+ /*member: ConcreteClass.implementedConcreteField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.implementedConcreteField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.implementedAbstractField=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteField#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteField=#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int declaredConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractField#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredAbstractField=#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ abstract int declaredAbstractField;
+
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsConcreteField,
+ Interface.declaredConcreteImplementsConcreteField=],
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteField=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsConcreteField,
+ Interface.declaredConcreteImplementsConcreteField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField=],
+ isSynthesized
+ */
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteField=,
+ Interface.declaredAbstractImplementsConcreteField=],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractImplementsConcreteField;
+
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField=],
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractField=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField=],
+ isSourceDeclaration
+ */
+ int declaredConcreteImplementsAbstractField = 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField=],
+ isSynthesized
+ */
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractField=,
+ Interface.declaredAbstractImplementsAbstractField=],
+ declared-overrides=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField=],
+ isSynthesized
+ */
+ abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_implements_final_field.dart b/pkg/front_end/test/class_hierarchy/data/concrete_implements_final_field.dart
new file mode 100644
index 0000000..20a42b0
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_implements_final_field.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ abstractMembers=[
+ Interface.declaredAbstractImplementsAbstractField,
+ Interface.declaredConcreteImplementsAbstractField,
+ Interface.implementedAbstractField],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int implementedConcreteField = 0;
+
+ /*member: Interface.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int implementedAbstractField;
+
+ /*member: Interface.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int declaredAbstractImplementsConcreteField = 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int declaredConcreteImplementsAbstractField;
+
+ /*member: Interface.declaredAbstractImplementsAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractImplementsAbstractField;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractField,
+ ConcreteClass.declaredAbstractImplementsAbstractField,
+ ConcreteClass.declaredAbstractImplementsConcreteField,
+ Interface.implementedAbstractField,
+ Interface.implementedConcreteField],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface {
+ /*member: ConcreteClass.implementedConcreteField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.implementedAbstractField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteField#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ final int declaredConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractField#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ abstract final int declaredAbstractField;
+
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsConcreteField = 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteField,
+ Interface.declaredAbstractImplementsConcreteField],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractImplementsConcreteField;
+
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractField],
+ isSourceDeclaration
+ */
+ final int declaredConcreteImplementsAbstractField = 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractField,
+ Interface.declaredAbstractImplementsAbstractField],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractField],
+ isSynthesized
+ */
+ abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_implements_getter.dart b/pkg/front_end/test/class_hierarchy/data/concrete_implements_getter.dart
new file mode 100644
index 0000000..80dbb0a
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_implements_getter.dart
@@ -0,0 +1,118 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ abstractMembers=[
+ Interface.declaredAbstractImplementsAbstractGetter,
+ Interface.declaredConcreteImplementsAbstractGetter,
+ Interface.implementedAbstractGetter],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get implementedConcreteGetter => 0;
+
+ /*member: Interface.implementedAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get implementedAbstractGetter;
+
+ /*member: Interface.declaredConcreteImplementsConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsConcreteGetter => 0;
+
+ /*member: Interface.declaredAbstractImplementsConcreteGetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredAbstractImplementsConcreteGetter => 0;
+
+ /*member: Interface.declaredConcreteImplementsAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsAbstractGetter;
+
+ /*member: Interface.declaredAbstractImplementsAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get declaredAbstractImplementsAbstractGetter;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractGetter,
+ ConcreteClass.declaredAbstractImplementsAbstractGetter,
+ ConcreteClass.declaredAbstractImplementsConcreteGetter,
+ Interface.implementedAbstractGetter,
+ Interface.implementedConcreteGetter],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+/*member: ConcreteClass.implementedConcreteGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+*/
+/*member: ConcreteClass.implementedAbstractGetter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+*/
+class ConcreteClass implements Interface {
+ /*member: ConcreteClass.declaredConcreteGetter#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int get declaredConcreteGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractGetter#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ int get declaredAbstractGetter;
+
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteGetter#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsConcreteGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteGetter,
+ Interface.declaredAbstractImplementsConcreteGetter],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteGetter],
+ isSynthesized
+ */
+ int get declaredAbstractImplementsConcreteGetter;
+
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractGetter#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractGetter],
+ isSourceDeclaration
+ */
+ int get declaredConcreteImplementsAbstractGetter => 0;
+
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractGetter,
+ Interface.declaredAbstractImplementsAbstractGetter],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractGetter],
+ isSynthesized
+ */
+ int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_implements_method.dart b/pkg/front_end/test/class_hierarchy/data/concrete_implements_method.dart
new file mode 100644
index 0000000..a040731
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_implements_method.dart
@@ -0,0 +1,118 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ abstractMembers=[
+ Interface.declaredAbstractImplementsAbstractMethod,
+ Interface.declaredConcreteImplementsAbstractMethod,
+ Interface.implementedAbstractMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedConcreteMethod() {}
+
+ /*member: Interface.implementedAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedAbstractMethod();
+
+ /*member: Interface.declaredConcreteImplementsConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsConcreteMethod() {}
+
+ /*member: Interface.declaredAbstractImplementsConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredAbstractImplementsConcreteMethod() {}
+
+ /*member: Interface.declaredConcreteImplementsAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsAbstractMethod();
+
+ /*member: Interface.declaredAbstractImplementsAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void declaredAbstractImplementsAbstractMethod();
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractImplementsAbstractMethod,
+ ConcreteClass.declaredAbstractImplementsConcreteMethod,
+ ConcreteClass.declaredAbstractMethod,
+ Interface.implementedAbstractMethod,
+ Interface.implementedConcreteMethod],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface {
+ /*member: ConcreteClass.implementedConcreteMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.implementedAbstractMethod#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void declaredConcreteMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractMethod#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void declaredAbstractMethod();
+
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsConcreteMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteMethod,
+ Interface.declaredAbstractImplementsConcreteMethod],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteMethod],
+ isSynthesized
+ */
+ void declaredAbstractImplementsConcreteMethod();
+
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractMethod#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractMethod],
+ isSourceDeclaration
+ */
+ void declaredConcreteImplementsAbstractMethod() {}
+
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractMethod,
+ Interface.declaredAbstractImplementsAbstractMethod],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractMethod],
+ isSynthesized
+ */
+ void declaredAbstractImplementsAbstractMethod();
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/concrete_implements_setter.dart b/pkg/front_end/test/class_hierarchy/data/concrete_implements_setter.dart
new file mode 100644
index 0000000..92279c3
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/concrete_implements_setter.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ abstractMembers=[
+ Interface.declaredAbstractImplementsAbstractSetter=,
+ Interface.declaredConcreteImplementsAbstractSetter=,
+ Interface.implementedAbstractSetter=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set implementedConcreteSetter(int value) {}
+
+ /*member: Interface.implementedAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set implementedAbstractSetter(int value);
+
+ /*member: Interface.declaredConcreteImplementsConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+ /*member: Interface.declaredAbstractImplementsConcreteSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredAbstractImplementsConcreteSetter(int value) {}
+
+ /*member: Interface.declaredConcreteImplementsAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsAbstractSetter(int value);
+
+ /*member: Interface.declaredAbstractImplementsAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declaredAbstractImplementsAbstractSetter=,
+ ConcreteClass.declaredAbstractImplementsConcreteSetter=,
+ ConcreteClass.declaredAbstractSetter=,
+ Interface.implementedAbstractSetter=,
+ Interface.implementedConcreteSetter=],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface {
+ /*member: ConcreteClass.implementedConcreteSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.implementedAbstractSetter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.declaredConcreteSetter=#cls:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void set declaredConcreteSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractSetter=#int:
+ classBuilder=ConcreteClass,
+ isSourceDeclaration
+ */
+ void set declaredAbstractSetter(int value);
+
+ /*member: ConcreteClass.declaredConcreteImplementsConcreteSetter=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsConcreteSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractImplementsConcreteSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsConcreteSetter=,
+ Interface.declaredAbstractImplementsConcreteSetter=],
+ declared-overrides=[Interface.declaredAbstractImplementsConcreteSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractImplementsConcreteSetter(int value);
+
+ /*member: ConcreteClass.declaredConcreteImplementsAbstractSetter=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[Interface.declaredConcreteImplementsAbstractSetter=],
+ isSourceDeclaration
+ */
+ void set declaredConcreteImplementsAbstractSetter(int value) {}
+
+ /*member: ConcreteClass.declaredAbstractImplementsAbstractSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declaredAbstractImplementsAbstractSetter=,
+ Interface.declaredAbstractImplementsAbstractSetter=],
+ declared-overrides=[Interface.declaredAbstractImplementsAbstractSetter=],
+ isSynthesized
+ */
+ void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/conflict.dart b/pkg/front_end/test/class_hierarchy/data/conflict.dart
new file mode 100644
index 0000000..10003cd
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/conflict.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedFieldDeclaredMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedFieldDeclaredMethod=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedFieldDeclaredMethod = 0;
+}
+
+/*class: Class:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: Class.extendedFieldDeclaredMethod=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+class Class extends Super {
+ /*member: Class.extendedFieldDeclaredMethod#cls:
+ classBuilder=Class,
+ isSourceDeclaration
+ */
+ void extendedFieldDeclaredMethod() {}
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/covariance.dart b/pkg/front_end/test/class_hierarchy/data/covariance.dart
new file mode 100644
index 0000000..e65d4ea
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/covariance.dart
@@ -0,0 +1,438 @@
+// Copyright (c) 2021, 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.
+
+// From language/covariant_override/tear_off_type_test
+
+// If a parameter is directly or indirectly a covariant override, its type in
+// the method tear-off should become Object?.
+
+/*class: M1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class M1 {
+ /*member: M1.method#cls:
+ classBuilder=M1,
+ isSourceDeclaration
+ */
+ method(covariant int a, int b) {}
+}
+
+/*class: M2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class M2 {
+ /*member: M2.method#cls:
+ classBuilder=M2,
+ isSourceDeclaration
+ */
+ method(int a, covariant int b) {}
+}
+
+/*class: _C&Object&M1:
+ interfaces=[M1],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+
+/*member: _C&Object&M1.method#cls:
+ classBuilder=_C&Object&M1,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=M1.method
+*/
+/*member: _C&Object&M1.method#int:
+ classBuilder=_C&Object&M1,
+ concreteMixinStub,
+ declarations=[M1.method],
+ isSynthesized,
+ stubTarget=M1.method
+*/
+
+/*class: _C&Object&M1&M2:
+ interfaces=[
+ M1,
+ M2],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ _C&Object&M1]
+*/
+
+/*member: _C&Object&M1&M2.method#cls:
+ classBuilder=_C&Object&M1&M2,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant,1:Covariant),
+ isSynthesized,
+ stubTarget=M2.method,
+ type=dynamic Function(int, int)
+*/
+/*member: _C&Object&M1&M2.method#int:
+ classBuilder=_C&Object&M1&M2,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant,1:Covariant),
+ declarations=[
+ M2.method,
+ _C&Object&M1.method],
+ isSynthesized,
+ stubTarget=M2.method,
+ type=dynamic Function(int, int)
+*/
+
+/*class: C:
+ interfaces=[
+ M1,
+ M2],
+ maxInheritancePath=4,
+ superclasses=[
+ Object,
+ _C&Object&M1,
+ _C&Object&M1&M2]
+*/
+class C extends Object with M1, M2 {
+ /*member: C.method#cls:
+ classBuilder=C,
+ inherited-implements=[_C&Object&M1&M2.method],
+ isSynthesized,
+ member=_C&Object&M1&M2.method
+ */
+ /*member: C.method#int:
+ classBuilder=_C&Object&M1&M2,
+ declarations=[
+ M2.method,
+ _C&Object&M1.method],
+ isSynthesized,
+ member=_C&Object&M1&M2.method
+ */
+}
+
+/*class: Direct:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Direct {
+ /*member: Direct.positional#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+ void positional(covariant int a, int b, covariant int c, int d, int e) {}
+
+ /*member: Direct.optional#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+ void optional(
+ [covariant int a = 0, int b = 0, covariant int c = 0, int d = 0]) {}
+
+ /*member: Direct.named#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+ void named(
+ {covariant int a = 0, int b = 0, covariant int c = 0, int d = 0}) {}
+}
+
+/*class: Inherited:
+ maxInheritancePath=2,
+ superclasses=[
+ Direct,
+ Object]
+*/
+class Inherited extends Direct {
+ /*member: Inherited.positional#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+
+ /*member: Inherited.optional#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+
+ /*member: Inherited.named#cls:
+ classBuilder=Direct,
+ isSourceDeclaration
+ */
+}
+
+// ---
+
+/*class: Override1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Override1 {
+ /*member: Override1.method#cls:
+ classBuilder=Override1,
+ isSourceDeclaration
+ */
+ void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+/*class: Override2:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Override1]
+*/
+class Override2 extends Override1 {
+ /*member: Override2.method#cls:
+ classBuilder=Override2,
+ declared-overrides=[Override1.method],
+ isSourceDeclaration
+ */
+ void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+/*class: Override3:
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Override1,
+ Override2]
+*/
+class Override3 extends Override2 {
+ /*member: Override3.method#cls:
+ classBuilder=Override3,
+ declared-overrides=[Override2.method],
+ isSourceDeclaration
+ */
+ void method(int a, int b, int c, int d, int e) {}
+}
+
+// ---
+
+/*class: Implement1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Implement1 {
+ /*member: Implement1.method#cls:
+ classBuilder=Implement1,
+ isSourceDeclaration
+ */
+ void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+/*class: Implement2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Implement2 {
+ /*member: Implement2.method#cls:
+ classBuilder=Implement2,
+ isSourceDeclaration
+ */
+ void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+/*class: Implement3:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Implement3 {
+ /*member: Implement3.method#cls:
+ classBuilder=Implement3,
+ isSourceDeclaration
+ */
+ void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+/*class: Implement4:
+ interfaces=[Implement3],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class Implement4 implements Implement3 {
+ /*member: Implement4.method#cls:
+ classBuilder=Implement4,
+ declared-overrides=[Implement3.method],
+ isSourceDeclaration
+ */
+ void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+/*class: Implement5:
+ interfaces=[
+ Implement1,
+ Implement2,
+ Implement3,
+ Implement4],
+ maxInheritancePath=3,
+ superclasses=[Object]
+*/
+class Implement5 implements Implement1, Implement2, Implement4 {
+ /*member: Implement5.method#cls:
+ classBuilder=Implement5,
+ declared-overrides=[
+ Implement1.method,
+ Implement2.method,
+ Implement4.method],
+ isSourceDeclaration
+ */
+ void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+// ---
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.method#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.method#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+/*class: Mixin1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin1 {
+ /*member: Mixin1.method#cls:
+ classBuilder=Mixin1,
+ isSourceDeclaration
+ */
+ void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+/*class: Mixin2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin2 {
+ /*member: Mixin2.method#cls:
+ classBuilder=Mixin2,
+ isSourceDeclaration
+ */
+ void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+/*class: Superclass:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Superclass {
+ /*member: Superclass.method#cls:
+ classBuilder=Superclass,
+ isSourceDeclaration
+ */
+ void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+/*class: _Mixed&Superclass&Mixin1:
+ interfaces=[Mixin1],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Superclass]
+*/
+
+/*member: _Mixed&Superclass&Mixin1.method#cls:
+ classBuilder=_Mixed&Superclass&Mixin1,
+ concreteForwardingStub,
+ covariance=Covariance(2:Covariant,4:Covariant),
+ isSynthesized,
+ stubTarget=Mixin1.method,
+ type=void Function(int, int, int, int, int)
+*/
+/*member: _Mixed&Superclass&Mixin1.method#int:
+ classBuilder=_Mixed&Superclass&Mixin1,
+ concreteForwardingStub,
+ covariance=Covariance(2:Covariant,4:Covariant),
+ declarations=[
+ Mixin1.method,
+ Superclass.method],
+ isSynthesized,
+ stubTarget=Mixin1.method,
+ type=void Function(int, int, int, int, int)
+*/
+
+/*class: _Mixed&Superclass&Mixin1&Mixin2:
+ interfaces=[
+ Mixin1,
+ Mixin2],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Superclass,
+ _Mixed&Superclass&Mixin1]
+*/
+
+/*member: _Mixed&Superclass&Mixin1&Mixin2.method#cls:
+ classBuilder=_Mixed&Superclass&Mixin1&Mixin2,
+ concreteForwardingStub,
+ covariance=Covariance(2:Covariant,3:Covariant,4:Covariant),
+ isSynthesized,
+ stubTarget=Mixin2.method,
+ type=void Function(int, int, int, int, int)
+*/
+/*member: _Mixed&Superclass&Mixin1&Mixin2.method#int:
+ classBuilder=_Mixed&Superclass&Mixin1&Mixin2,
+ concreteForwardingStub,
+ covariance=Covariance(2:Covariant,3:Covariant,4:Covariant),
+ declarations=[
+ Mixin2.method,
+ _Mixed&Superclass&Mixin1.method],
+ isSynthesized,
+ stubTarget=Mixin2.method,
+ type=void Function(int, int, int, int, int)
+*/
+
+/*class: Mixed:
+ interfaces=[
+ Interface1,
+ Interface2,
+ Mixin1,
+ Mixin2],
+ maxInheritancePath=4,
+ superclasses=[
+ Object,
+ Superclass,
+ _Mixed&Superclass&Mixin1,
+ _Mixed&Superclass&Mixin1&Mixin2]
+*/
+class Mixed extends Superclass
+ with Mixin1, Mixin2
+ implements Interface1, Interface2 {
+ /*member: Mixed.method#cls:
+ classBuilder=Mixed,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant,1:Covariant,2:Covariant,3:Covariant,4:Covariant),
+ inherited-implements=[Mixed.method],
+ isSynthesized,
+ stubTarget=Mixin2.method,
+ type=void Function(int, int, int, int, int)
+ */
+ /*member: Mixed.method#int:
+ classBuilder=Mixed,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant,1:Covariant,2:Covariant,3:Covariant,4:Covariant),
+ declarations=[
+ Interface1.method,
+ Interface2.method,
+ _Mixed&Superclass&Mixin1&Mixin2.method],
+ isSynthesized,
+ stubTarget=Mixin2.method,
+ type=void Function(int, int, int, int, int)
+ */
+}
+
+void main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/covariant_equals.dart b/pkg/front_end/test/class_hierarchy/data/covariant_equals.dart
new file mode 100644
index 0000000..5c20e81
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/covariant_equals.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+/*class: A:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class A {
+ /*member: A.==#cls:
+ classBuilder=A,
+ declared-overrides=[Object.==],
+ isSourceDeclaration
+ */
+ bool operator ==(covariant A other) => true;
+}
+
+/*class: B:
+ maxInheritancePath=2,
+ superclasses=[
+ A,
+ Object]
+*/
+class B extends A {
+ /*member: B.==#cls:
+ classBuilder=B,
+ declared-overrides=[A.==],
+ isSourceDeclaration
+ */
+ bool operator ==(other) => true;
+}
+
+/*class: C:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class C<T> {
+ /*member: C.==#cls:
+ classBuilder=C,
+ declared-overrides=[Object.==],
+ isSourceDeclaration
+ */
+ bool operator ==(covariant C<T> other) => true;
+}
+
+/*class: D:
+ maxInheritancePath=2,
+ superclasses=[
+ C<int>,
+ Object]
+*/
+class D extends C<int> {
+ /*member: D.==#cls:
+ classBuilder=C,
+ isSourceDeclaration
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/declares.dart b/pkg/front_end/test/class_hierarchy/data/declares.dart
new file mode 100644
index 0000000..ea7fd5b
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/declares.dart
@@ -0,0 +1,223 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractDeclaredAbstractMethod,
+ Super.extendedAbstractDeclaredConcreteMethod,
+ Super.extendedAbstractImplementedDeclaredAbstractMethod,
+ Super.extendedAbstractImplementedDeclaredConcreteMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteDeclaredConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteDeclaredConcreteMethod() {}
+
+ /*member: Super.extendedAbstractDeclaredConcreteMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractDeclaredConcreteMethod();
+
+ /*member: Super.extendedConcreteDeclaredAbstractMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteDeclaredAbstractMethod() {}
+ /*member: Super.extendedAbstractDeclaredAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractDeclaredAbstractMethod();
+
+ /*member: Super.extendedConcreteImplementedDeclaredConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+ /*member: Super.extendedAbstractImplementedDeclaredConcreteMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedDeclaredConcreteMethod();
+
+ /*member: Super.extendedConcreteImplementedDeclaredAbstractMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedDeclaredAbstractMethod() {}
+
+ /*member: Super.extendedAbstractImplementedDeclaredAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedDeclaredAbstractMethod();
+}
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedDeclaredConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedDeclaredConcreteMethod() {}
+
+ /*member: Interface.implementedDeclaredAbstractMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void implementedDeclaredAbstractMethod() {}
+
+ /*member: Interface.extendedConcreteImplementedDeclaredConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+ /*member: Interface.extendedAbstractImplementedDeclaredConcreteMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedDeclaredConcreteMethod() {}
+
+ /*member: Interface.extendedConcreteImplementedDeclaredAbstractMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedDeclaredAbstractMethod() {}
+
+ /*member: Interface.extendedAbstractImplementedDeclaredAbstractMethod#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedDeclaredAbstractMethod() {}
+}
+
+/*class: Class:
+ abstractMembers=[
+ Class.extendedAbstractDeclaredAbstractMethod,
+ Class.extendedAbstractImplementedDeclaredAbstractMethod,
+ Class.implementedDeclaredAbstractMethod],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class Class extends Super implements Interface {
+ /*member: Class.extendedConcreteDeclaredConcreteMethod#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedConcreteDeclaredConcreteMethod],
+ isSourceDeclaration
+ */
+ void extendedConcreteDeclaredConcreteMethod() {}
+
+ /*member: Class.extendedAbstractDeclaredConcreteMethod#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedAbstractDeclaredConcreteMethod],
+ isSourceDeclaration
+ */
+ void extendedAbstractDeclaredConcreteMethod() {}
+
+ /*member: Class.extendedConcreteDeclaredAbstractMethod#cls:
+ classBuilder=Class,
+ inherited-implements=[Class.extendedConcreteDeclaredAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteDeclaredAbstractMethod
+ */
+ /*member: Class.extendedConcreteDeclaredAbstractMethod#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedConcreteDeclaredAbstractMethod,
+ Super.extendedConcreteDeclaredAbstractMethod],
+ declared-overrides=[Super.extendedConcreteDeclaredAbstractMethod],
+ isSynthesized
+ */
+ void extendedConcreteDeclaredAbstractMethod();
+
+ /*member: Class.extendedAbstractDeclaredAbstractMethod#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedAbstractDeclaredAbstractMethod,
+ Super.extendedAbstractDeclaredAbstractMethod],
+ declared-overrides=[Super.extendedAbstractDeclaredAbstractMethod],
+ isSynthesized
+ */
+ void extendedAbstractDeclaredAbstractMethod();
+
+ /*member: Class.implementedDeclaredConcreteMethod#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface.implementedDeclaredConcreteMethod],
+ isSourceDeclaration
+ */
+ void implementedDeclaredConcreteMethod() {}
+
+ /*member: Class.implementedDeclaredAbstractMethod#int:
+ classBuilder=Class,
+ declarations=[
+ Class.implementedDeclaredAbstractMethod,
+ Interface.implementedDeclaredAbstractMethod],
+ declared-overrides=[Interface.implementedDeclaredAbstractMethod],
+ isSynthesized
+ */
+ void implementedDeclaredAbstractMethod();
+
+ /*member: Class.extendedConcreteImplementedDeclaredConcreteMethod#cls:
+ classBuilder=Class,
+ declared-overrides=[
+ Interface.extendedConcreteImplementedDeclaredConcreteMethod,
+ Super.extendedConcreteImplementedDeclaredConcreteMethod],
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+ /*member: Class.extendedAbstractImplementedDeclaredConcreteMethod#cls:
+ classBuilder=Class,
+ declared-overrides=[
+ Interface.extendedAbstractImplementedDeclaredConcreteMethod,
+ Super.extendedAbstractImplementedDeclaredConcreteMethod],
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedDeclaredConcreteMethod() {}
+
+ /*member: Class.extendedConcreteImplementedDeclaredAbstractMethod#cls:
+ classBuilder=Class,
+ inherited-implements=[Class.extendedConcreteImplementedDeclaredAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedDeclaredAbstractMethod
+ */
+ /*member: Class.extendedConcreteImplementedDeclaredAbstractMethod#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedConcreteImplementedDeclaredAbstractMethod,
+ Interface.extendedConcreteImplementedDeclaredAbstractMethod,
+ Super.extendedConcreteImplementedDeclaredAbstractMethod],
+ declared-overrides=[
+ Interface.extendedConcreteImplementedDeclaredAbstractMethod,
+ Super.extendedConcreteImplementedDeclaredAbstractMethod],
+ isSynthesized
+ */
+ void extendedConcreteImplementedDeclaredAbstractMethod();
+
+ /*member: Class.extendedAbstractImplementedDeclaredAbstractMethod#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedAbstractImplementedDeclaredAbstractMethod,
+ Interface.extendedAbstractImplementedDeclaredAbstractMethod,
+ Super.extendedAbstractImplementedDeclaredAbstractMethod],
+ declared-overrides=[
+ Interface.extendedAbstractImplementedDeclaredAbstractMethod,
+ Super.extendedAbstractImplementedDeclaredAbstractMethod],
+ isSynthesized
+ */
+ void extendedAbstractImplementedDeclaredAbstractMethod();
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/extend_multiple_field.dart b/pkg/front_end/test/class_hierarchy/data/extend_multiple_field.dart
new file mode 100644
index 0000000..ab7a907
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/extend_multiple_field.dart
@@ -0,0 +1,535 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteField = 0;
+
+ /*member: Super.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractField;
+
+ /*member: Super.extendedConcreteImplementedField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteImplementedField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedField = 0;
+
+ /*member: Super.extendedAbstractImplementedField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractImplementedField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractImplementedField;
+
+ /*member: Super.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Super.extendedAbstractImplementedMultipleField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractImplementedMultipleField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractImplementedMultipleField;
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedConcreteImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedField = 0;
+
+ /*member: Interface1.extendedAbstractImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedAbstractImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedAbstractImplementedField = 0;
+
+ /*member: Interface1.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Interface1.extendedAbstractImplementedMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedAbstractImplementedMultipleField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedAbstractImplementedMultipleField = 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Interface2.extendedAbstractImplementedMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.extendedAbstractImplementedMultipleField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int extendedAbstractImplementedMultipleField = 0;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedField=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField=,
+ Super.extendedConcreteImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField=,
+ Interface2.extendedConcreteImplementedMultipleField=,
+ Super.extendedConcreteImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+
+ /*member: AbstractClass.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+ */
+ /*member: AbstractClass.extendedAbstractImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField=,
+ Super.extendedAbstractImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField=
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+ */
+ /*member: AbstractClass.extendedAbstractImplementedMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField=,
+ Interface2.extendedAbstractImplementedMultipleField=,
+ Super.extendedAbstractImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField=
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedField,
+ AbstractClass.extendedAbstractImplementedField=,
+ AbstractClass.extendedAbstractImplementedMultipleField,
+ AbstractClass.extendedAbstractImplementedMultipleField=,
+ Super.extendedAbstractField,
+ Super.extendedAbstractField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedField=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField=,
+ Super.extendedConcreteImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField=,
+ Interface2.extendedConcreteImplementedMultipleField=,
+ Super.extendedConcreteImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+
+ /*member: ConcreteSub.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+ */
+ /*member: ConcreteSub.extendedAbstractImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField=,
+ Super.extendedAbstractImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField=
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+ */
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField=,
+ Interface2.extendedAbstractImplementedMultipleField=,
+ Super.extendedAbstractImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField=
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractImplementedField,
+ Interface1.extendedAbstractImplementedField=,
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface1.extendedAbstractImplementedMultipleField=,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField=,
+ Super.extendedAbstractField,
+ Super.extendedAbstractField=,
+ Super.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField=,
+ Super.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedField=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField=,
+ Super.extendedConcreteImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleField=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField=,
+ Interface2.extendedConcreteImplementedMultipleField=,
+ Super.extendedConcreteImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+
+ /*member: ConcreteClass.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+ */
+ /*member: ConcreteClass.extendedAbstractImplementedField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField=,
+ Super.extendedAbstractImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField=
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+ */
+ /*member: ConcreteClass.extendedAbstractImplementedMultipleField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField=,
+ Interface2.extendedAbstractImplementedMultipleField=,
+ Super.extendedAbstractImplementedMultipleField=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField=
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/extend_multiple_final_field.dart b/pkg/front_end/test/class_hierarchy/data/extend_multiple_final_field.dart
new file mode 100644
index 0000000..72bcf32
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/extend_multiple_final_field.dart
@@ -0,0 +1,311 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteField = 0;
+
+ /*member: Super.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractField;
+
+ /*member: Super.extendedConcreteImplementedField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteImplementedField = 0;
+
+ /*member: Super.extendedAbstractImplementedField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractImplementedField;
+
+ /*member: Super.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Super.extendedAbstractImplementedMultipleField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractImplementedMultipleField;
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int extendedConcreteImplementedField = 0;
+
+ /*member: Interface1.extendedAbstractImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int extendedAbstractImplementedField = 0;
+
+ /*member: Interface1.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Interface1.extendedAbstractImplementedMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int extendedAbstractImplementedMultipleField = 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final int extendedConcreteImplementedMultipleField = 0;
+
+ /*member: Interface2.extendedAbstractImplementedMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final int extendedAbstractImplementedMultipleField = 0;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+ */
+
+ /*member: AbstractClass.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedField,
+ AbstractClass.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractField],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+ */
+
+ /*member: ConcreteSub.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.extendedAbstractImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractImplementedField,
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractField,
+ Super.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedMultipleField],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: ConcreteClass.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: ConcreteClass.extendedConcreteImplementedField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+*/
+/*member: ConcreteClass.extendedConcreteImplementedMultipleField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+*/
+/*member: ConcreteClass.extendedConcreteImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedField,
+ Super.extendedConcreteImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedField
+*/
+/*member: ConcreteClass.extendedConcreteImplementedMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleField,
+ Interface2.extendedConcreteImplementedMultipleField,
+ Super.extendedConcreteImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleField
+*/
+/*member: ConcreteClass.extendedAbstractImplementedMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleField,
+ Interface2.extendedAbstractImplementedMultipleField,
+ Super.extendedAbstractImplementedMultipleField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleField
+*/
+/*member: ConcreteClass.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: ConcreteClass.extendedAbstractImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedField,
+ Super.extendedAbstractImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedField
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/extend_multiple_getter.dart b/pkg/front_end/test/class_hierarchy/data/extend_multiple_getter.dart
new file mode 100644
index 0000000..ba561c9
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/extend_multiple_getter.dart
@@ -0,0 +1,318 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteGetter => 0;
+
+ /*member: Super.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractGetter;
+
+ /*member: Super.extendedConcreteImplementedGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteImplementedGetter => 0;
+
+ /*member: Super.extendedAbstractImplementedGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractImplementedGetter;
+
+ /*member: Super.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteImplementedMultipleGetter => 0;
+
+ /*member: Super.extendedAbstractImplementedMultipleGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractImplementedMultipleGetter;
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get extendedConcreteImplementedGetter => 0;
+
+ /*member: Interface1.extendedAbstractImplementedGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get extendedAbstractImplementedGetter => 0;
+
+ /*member: Interface1.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get extendedConcreteImplementedMultipleGetter => 0;
+
+ /*member: Interface1.extendedAbstractImplementedMultipleGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int get extendedConcreteImplementedMultipleGetter => 0;
+
+ /*member: Interface2.extendedAbstractImplementedMultipleGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedGetter#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+ /*member: AbstractClass.extendedConcreteImplementedGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedGetter,
+ Super.extendedConcreteImplementedGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleGetter,
+ Interface2.extendedConcreteImplementedMultipleGetter,
+ Super.extendedConcreteImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+
+ /*member: AbstractClass.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedGetter,
+ Super.extendedAbstractImplementedGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedGetter
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleGetter,
+ Interface2.extendedAbstractImplementedMultipleGetter,
+ Super.extendedAbstractImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleGetter
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedGetter,
+ AbstractClass.extendedAbstractImplementedMultipleGetter,
+ Super.extendedAbstractGetter],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedGetter#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedGetter,
+ Super.extendedConcreteImplementedGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleGetter,
+ Interface2.extendedConcreteImplementedMultipleGetter,
+ Super.extendedConcreteImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+
+ /*member: ConcreteSub.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedGetter,
+ Super.extendedAbstractImplementedGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedGetter
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleGetter,
+ Interface2.extendedAbstractImplementedMultipleGetter,
+ Super.extendedAbstractImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleGetter
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractImplementedGetter,
+ Interface1.extendedAbstractImplementedMultipleGetter,
+ Interface2.extendedAbstractImplementedMultipleGetter,
+ Super.extendedAbstractGetter,
+ Super.extendedAbstractImplementedGetter,
+ Super.extendedAbstractImplementedMultipleGetter],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedGetter#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedGetter,
+ Super.extendedConcreteImplementedGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedGetter
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleGetter#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleGetter,
+ Interface2.extendedConcreteImplementedMultipleGetter,
+ Super.extendedConcreteImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleGetter
+ */
+
+ /*member: ConcreteClass.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedGetter,
+ Super.extendedAbstractImplementedGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedGetter
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedMultipleGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleGetter,
+ Interface2.extendedAbstractImplementedMultipleGetter,
+ Super.extendedAbstractImplementedMultipleGetter],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleGetter
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/extend_multiple_method.dart b/pkg/front_end/test/class_hierarchy/data/extend_multiple_method.dart
new file mode 100644
index 0000000..c0b274a
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/extend_multiple_method.dart
@@ -0,0 +1,314 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod() {}
+
+ /*member: Super.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod();
+
+ /*member: Super.extendedConcreteImplementedMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMethod() {}
+
+ /*member: Super.extendedAbstractImplementedMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMethod();
+
+ /*member: Super.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMultipleMethod() {}
+
+ /*member: Super.extendedAbstractImplementedMultipleMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMultipleMethod();
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMethod() {}
+
+ /*member: Interface1.extendedAbstractImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMethod() {}
+
+ /*member: Interface1.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMultipleMethod() {}
+
+ /*member: Interface1.extendedAbstractImplementedMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMultipleMethod() {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMultipleMethod() {}
+ /*member: Interface2.extendedAbstractImplementedMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMultipleMethod() {}
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Super,
+ Object]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleMethod,
+ Interface2.extendedConcreteImplementedMultipleMethod,
+ Super.extendedConcreteImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+
+ /*member: AbstractClass.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMethod
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleMethod,
+ Interface2.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleMethod
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedMethod,
+ AbstractClass.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleMethod,
+ Interface2.extendedConcreteImplementedMultipleMethod,
+ Super.extendedConcreteImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleMethod,
+ Interface2.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleMethod
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractImplementedMethod,
+ Interface1.extendedAbstractImplementedMultipleMethod,
+ Interface2.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleMethod,
+ Interface2.extendedConcreteImplementedMultipleMethod,
+ Super.extendedConcreteImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleMethod
+ */
+
+ /*member: ConcreteClass.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMethod
+ */
+ /*member: ConcreteClass.extendedAbstractImplementedMultipleMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleMethod,
+ Interface2.extendedAbstractImplementedMultipleMethod,
+ Super.extendedAbstractImplementedMultipleMethod],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleMethod
+ */
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/extend_multiple_setter.dart b/pkg/front_end/test/class_hierarchy/data/extend_multiple_setter.dart
new file mode 100644
index 0000000..fbfc164
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/extend_multiple_setter.dart
@@ -0,0 +1,318 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteSetter(int value) {}
+
+ /*member: Super.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractSetter(int value);
+
+ /*member: Super.extendedConcreteImplementedSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedSetter(int value) {}
+
+ /*member: Super.extendedAbstractImplementedSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedSetter(int value);
+
+ /*member: Super.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+ /*member: Super.extendedAbstractImplementedMultipleSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedMultipleSetter(int value);
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedSetter(int value) {}
+
+ /*member: Interface1.extendedAbstractImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedSetter(int value) {}
+
+ /*member: Interface1.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+ /*member: Interface1.extendedAbstractImplementedMultipleSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+ /*member: Interface2.extendedAbstractImplementedMultipleSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedSetter=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+ /*member: AbstractClass.extendedConcreteImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedSetter=,
+ Super.extendedConcreteImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleSetter=,
+ Interface2.extendedConcreteImplementedMultipleSetter=,
+ Super.extendedConcreteImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+
+ /*member: AbstractClass.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedSetter=,
+ Super.extendedAbstractImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedSetter=
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleSetter=,
+ Interface2.extendedAbstractImplementedMultipleSetter=,
+ Super.extendedAbstractImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleSetter=
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedMultipleSetter=,
+ AbstractClass.extendedAbstractImplementedSetter=,
+ Super.extendedAbstractSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedSetter=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedSetter=,
+ Super.extendedConcreteImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleSetter=,
+ Interface2.extendedConcreteImplementedMultipleSetter=,
+ Super.extendedConcreteImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+
+ /*member: ConcreteSub.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedSetter=,
+ Super.extendedAbstractImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedSetter=
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleSetter=,
+ Interface2.extendedAbstractImplementedMultipleSetter=,
+ Super.extendedAbstractImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleSetter=
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractImplementedMultipleSetter=,
+ Interface1.extendedAbstractImplementedSetter=,
+ Interface2.extendedAbstractImplementedMultipleSetter=,
+ Super.extendedAbstractImplementedMultipleSetter=,
+ Super.extendedAbstractImplementedSetter=,
+ Super.extendedAbstractSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedSetter=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedSetter=,
+ Super.extendedConcreteImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedSetter=
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleSetter=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMultipleSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMultipleSetter=,
+ Interface2.extendedConcreteImplementedMultipleSetter=,
+ Super.extendedConcreteImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMultipleSetter=
+ */
+
+ /*member: ConcreteClass.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedSetter=,
+ Super.extendedAbstractImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedSetter=
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedMultipleSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMultipleSetter=,
+ Interface2.extendedAbstractImplementedMultipleSetter=,
+ Super.extendedAbstractImplementedMultipleSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedMultipleSetter=
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_field.dart b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_field.dart
new file mode 100644
index 0000000..d9a3756
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_field.dart
@@ -0,0 +1,675 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteCovariantField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteCovariantField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ covariant int extendedConcreteCovariantField = 0;
+
+ /*member: Super.extendedAbstractCovariantField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractCovariantField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract covariant int extendedAbstractCovariantField;
+
+ /*member: Super.extendedConcreteCovariantImplementedField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteCovariantImplementedField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ covariant int extendedConcreteCovariantImplementedField = 0;
+
+ /*member: Super.extendedAbstractCovariantImplementedField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractCovariantImplementedField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract covariant int extendedAbstractCovariantImplementedField;
+
+ /*member: Super.extendedConcreteImplementedCovariantField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteImplementedCovariantField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteImplementedCovariantField = 0;
+
+ /*member: Super.extendedAbstractImplementedCovariantField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractImplementedCovariantField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractImplementedCovariantField;
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteCovariantImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedConcreteCovariantImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedConcreteCovariantImplementedField = 0;
+
+ /*member: Interface1.extendedAbstractCovariantImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedAbstractCovariantImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedAbstractCovariantImplementedField = 0;
+
+ /*member: Interface1.extendedConcreteImplementedCovariantField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedConcreteImplementedCovariantField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ covariant int extendedConcreteImplementedCovariantField = 0;
+
+ /*member: Interface1.extendedAbstractImplementedCovariantField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedAbstractImplementedCovariantField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ covariant int extendedAbstractImplementedCovariantField = 0;
+
+ /*member: Interface1.implementsMultipleCovariantField1#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.implementsMultipleCovariantField1=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ covariant int implementsMultipleCovariantField1 = 0;
+
+ /*member: Interface1.implementsMultipleCovariantField2#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.implementsMultipleCovariantField2=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int implementsMultipleCovariantField2 = 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementsMultipleCovariantField1#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.implementsMultipleCovariantField1=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int implementsMultipleCovariantField1 = 0;
+
+ /*member: Interface2.implementsMultipleCovariantField2#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.implementsMultipleCovariantField2=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ covariant int implementsMultipleCovariantField2 = 0;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteCovariantField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedConcreteCovariantField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteCovariantImplementedField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteCovariantImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField,
+ Super.extendedConcreteCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteCovariantImplementedField=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: AbstractClass.extendedConcreteCovariantImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField=,
+ Super.extendedConcreteCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedCovariantField#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedCovariantField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField,
+ Super.extendedConcreteImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: AbstractClass.extendedConcreteImplementedCovariantField=#cls:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantField,
+ type=int
+ */
+ /*member: AbstractClass.extendedConcreteImplementedCovariantField=#int:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField=,
+ Super.extendedConcreteImplementedCovariantField=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantField,
+ type=int
+ */
+
+ /*member: AbstractClass.extendedAbstractCovariantField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.extendedAbstractCovariantField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractCovariantImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField,
+ Super.extendedAbstractCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField
+ */
+ /*member: AbstractClass.extendedAbstractCovariantImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField=,
+ Super.extendedAbstractCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField=
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedCovariantField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField,
+ Super.extendedAbstractImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedCovariantField
+ */
+ /*member: AbstractClass.extendedAbstractImplementedCovariantField=#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField=,
+ Super.extendedAbstractImplementedCovariantField=],
+ isSynthesized,
+ type=int
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantField1#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1,
+ Interface2.implementsMultipleCovariantField1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+ /*member: AbstractClass.implementsMultipleCovariantField1=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1=,
+ Interface2.implementsMultipleCovariantField1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantField2#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField2,
+ Interface2.implementsMultipleCovariantField2],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField2
+ */
+ /*member: AbstractClass.implementsMultipleCovariantField2=#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantField2=,
+ Interface2.implementsMultipleCovariantField2=],
+ isSynthesized,
+ type=int
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractCovariantImplementedField,
+ AbstractClass.extendedAbstractCovariantImplementedField=,
+ AbstractClass.extendedAbstractImplementedCovariantField,
+ AbstractClass.extendedAbstractImplementedCovariantField=,
+ AbstractClass.implementsMultipleCovariantField1,
+ AbstractClass.implementsMultipleCovariantField1=,
+ AbstractClass.implementsMultipleCovariantField2,
+ AbstractClass.implementsMultipleCovariantField2=,
+ Super.extendedAbstractCovariantField,
+ Super.extendedAbstractCovariantField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteCovariantField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField,
+ Super.extendedConcreteCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedField=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField=,
+ Super.extendedConcreteCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantField#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField,
+ Super.extendedConcreteImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantField=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedCovariantField=],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantField=
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField=,
+ Super.extendedConcreteImplementedCovariantField=],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantField=
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.extendedAbstractCovariantField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantImplementedField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField,
+ Super.extendedAbstractCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField
+ */
+ /*member: ConcreteSub.extendedAbstractCovariantImplementedField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField=,
+ Super.extendedAbstractCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField=
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedCovariantField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField,
+ Super.extendedAbstractImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedCovariantField
+ */
+ /*member: ConcreteSub.extendedAbstractImplementedCovariantField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField=,
+ Super.extendedAbstractImplementedCovariantField=],
+ isSynthesized,
+ member=AbstractClass.extendedAbstractImplementedCovariantField=
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantField1#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1,
+ Interface2.implementsMultipleCovariantField1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+ /*member: ConcreteSub.implementsMultipleCovariantField1=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1=,
+ Interface2.implementsMultipleCovariantField1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantField2#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField2,
+ Interface2.implementsMultipleCovariantField2],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField2
+ */
+ /*member: ConcreteSub.implementsMultipleCovariantField2=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField2=,
+ Interface2.implementsMultipleCovariantField2=],
+ isSynthesized,
+ member=AbstractClass.implementsMultipleCovariantField2=
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractCovariantImplementedField,
+ Interface1.extendedAbstractCovariantImplementedField=,
+ Interface1.extendedAbstractImplementedCovariantField,
+ Interface1.extendedAbstractImplementedCovariantField=,
+ Interface1.implementsMultipleCovariantField1,
+ Interface1.implementsMultipleCovariantField1=,
+ Interface1.implementsMultipleCovariantField2,
+ Interface1.implementsMultipleCovariantField2=,
+ Interface2.implementsMultipleCovariantField1,
+ Interface2.implementsMultipleCovariantField1=,
+ Interface2.implementsMultipleCovariantField2,
+ Interface2.implementsMultipleCovariantField2=,
+ Super.extendedAbstractCovariantField,
+ Super.extendedAbstractCovariantField=,
+ Super.extendedAbstractCovariantImplementedField,
+ Super.extendedAbstractCovariantImplementedField=,
+ Super.extendedAbstractImplementedCovariantField,
+ Super.extendedAbstractImplementedCovariantField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteCovariantField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField,
+ Super.extendedConcreteCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedField=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedField=,
+ Super.extendedConcreteCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedField
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantField#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField,
+ Super.extendedConcreteImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedCovariantField
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantField=#cls:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedCovariantField=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantField,
+ type=int
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantField=#int:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantField=,
+ Super.extendedConcreteImplementedCovariantField=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantField,
+ type=int
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.extendedAbstractCovariantField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantImplementedField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField,
+ Super.extendedAbstractCovariantImplementedField],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField
+ */
+ /*member: ConcreteClass.extendedAbstractCovariantImplementedField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedField=,
+ Super.extendedAbstractCovariantImplementedField=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedField=
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedCovariantField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField,
+ Super.extendedAbstractImplementedCovariantField],
+ isSynthesized,
+ member=Super.extendedAbstractImplementedCovariantField
+ */
+ /*member: ConcreteClass.extendedAbstractImplementedCovariantField=#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantField=,
+ Super.extendedAbstractImplementedCovariantField=],
+ isSynthesized,
+ type=int
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantField1#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1,
+ Interface2.implementsMultipleCovariantField1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+ /*member: ConcreteClass.implementsMultipleCovariantField1=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField1=,
+ Interface2.implementsMultipleCovariantField1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField1
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantField2#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantField2,
+ Interface2.implementsMultipleCovariantField2],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantField2
+ */
+ /*member: ConcreteClass.implementsMultipleCovariantField2=#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantField2=,
+ Interface2.implementsMultipleCovariantField2=],
+ isSynthesized,
+ type=int
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_method.dart b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_method.dart
new file mode 100644
index 0000000..b2174b7
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_method.dart
@@ -0,0 +1,400 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteCovariantMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteCovariantMethod(covariant int i) {}
+
+ /*member: Super.extendedAbstractCovariantMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractCovariantMethod(covariant int i);
+
+ /*member: Super.extendedConcreteCovariantImplementedMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteCovariantImplementedMethod(covariant int i) {}
+
+ /*member: Super.extendedAbstractCovariantImplementedMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractCovariantImplementedMethod(covariant int i);
+
+ /*member: Super.extendedConcreteImplementedCovariantMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedCovariantMethod(int i) {}
+
+ /*member: Super.extendedAbstractImplementedCovariantMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedCovariantMethod(int i);
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteCovariantImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedConcreteCovariantImplementedMethod(int i) {}
+
+ /*member: Interface1.extendedAbstractCovariantImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedAbstractCovariantImplementedMethod(int i) {}
+
+ /*member: Interface1.extendedConcreteImplementedCovariantMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedCovariantMethod(covariant int i) {}
+
+ /*member: Interface1.extendedAbstractImplementedCovariantMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+
+ /*member: Interface1.implementsMultipleCovariantMethod1#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ void implementsMultipleCovariantMethod1(covariant int i) {}
+ /*member: Interface1.implementsMultipleCovariantMethod2#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void implementsMultipleCovariantMethod2(int i) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementsMultipleCovariantMethod1#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+
+ void implementsMultipleCovariantMethod1(int i) {}
+ /*member: Interface2.implementsMultipleCovariantMethod2#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void implementsMultipleCovariantMethod2(covariant int i) {}
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Super,
+ Object]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteCovariantMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractCovariantMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteCovariantImplementedMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+ /*member: AbstractClass.extendedConcreteCovariantImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedMethod,
+ Super.extendedConcreteCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedCovariantMethod#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantMethod,
+ Super.extendedAbstractImplementedCovariantMethod],
+ isSynthesized,
+ type=void Function(int)
+ */
+ /*member: AbstractClass.extendedAbstractCovariantImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedMethod,
+ Super.extendedAbstractCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedMethod
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedCovariantMethod#cls:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantMethod,
+ type=void Function(int)
+ */
+ /*member: AbstractClass.extendedConcreteImplementedCovariantMethod#int:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantMethod,
+ Super.extendedConcreteImplementedCovariantMethod],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantMethod,
+ type=void Function(int)
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantMethod1#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod1,
+ Interface2.implementsMultipleCovariantMethod1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantMethod1
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantMethod2#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod2,
+ Interface2.implementsMultipleCovariantMethod2],
+ isSynthesized,
+ type=void Function(int)
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractCovariantImplementedMethod,
+ AbstractClass.extendedAbstractImplementedCovariantMethod,
+ AbstractClass.implementsMultipleCovariantMethod1,
+ AbstractClass.implementsMultipleCovariantMethod2,
+ Super.extendedAbstractCovariantMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteCovariantMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedMethod,
+ Super.extendedConcreteCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedMethod,
+ Super.extendedAbstractCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedMethod
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedCovariantMethod],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantMethod
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantMethod,
+ Super.extendedConcreteImplementedCovariantMethod],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedCovariantMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantMethod,
+ Super.extendedAbstractImplementedCovariantMethod],
+ isSynthesized,
+ member=AbstractClass.extendedAbstractImplementedCovariantMethod
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantMethod1#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod1,
+ Interface2.implementsMultipleCovariantMethod1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantMethod1
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantMethod2#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod2,
+ Interface2.implementsMultipleCovariantMethod2],
+ isSynthesized,
+ member=AbstractClass.implementsMultipleCovariantMethod2
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractCovariantImplementedMethod,
+ Interface1.extendedAbstractImplementedCovariantMethod,
+ Interface1.implementsMultipleCovariantMethod1,
+ Interface1.implementsMultipleCovariantMethod2,
+ Interface2.implementsMultipleCovariantMethod1,
+ Interface2.implementsMultipleCovariantMethod2,
+ Super.extendedAbstractCovariantImplementedMethod,
+ Super.extendedAbstractCovariantMethod,
+ Super.extendedAbstractImplementedCovariantMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteCovariantMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedMethod,
+ Super.extendedConcreteCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedMethod
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedMethod,
+ Super.extendedAbstractCovariantImplementedMethod],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedMethod
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantMethod#cls:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedCovariantMethod],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantMethod,
+ type=void Function(int)
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantMethod#int:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantMethod,
+ Super.extendedConcreteImplementedCovariantMethod],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantMethod,
+ type=void Function(int)
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedCovariantMethod#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantMethod,
+ Super.extendedAbstractImplementedCovariantMethod],
+ isSynthesized,
+ type=void Function(int)
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantMethod1#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod1,
+ Interface2.implementsMultipleCovariantMethod1],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantMethod1
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantMethod2#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantMethod2,
+ Interface2.implementsMultipleCovariantMethod2],
+ isSynthesized,
+ type=void Function(int)
+ */
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_setter.dart b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_setter.dart
new file mode 100644
index 0000000..82c0ead
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/forwarding_stubs_setter.dart
@@ -0,0 +1,403 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteCovariantSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteCovariantSetter(covariant int i) {}
+
+ /*member: Super.extendedAbstractCovariantSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractCovariantSetter(covariant int i);
+
+ /*member: Super.extendedConcreteCovariantImplementedSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteCovariantImplementedSetter(covariant int i) {}
+
+ /*member: Super.extendedAbstractCovariantImplementedSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractCovariantImplementedSetter(covariant int i);
+
+ /*member: Super.extendedConcreteImplementedCovariantSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedCovariantSetter(int i) {}
+
+ /*member: Super.extendedAbstractImplementedCovariantSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedCovariantSetter(int i);
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.extendedConcreteCovariantImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedConcreteCovariantImplementedSetter(int i) {}
+
+ /*member: Interface1.extendedAbstractCovariantImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedAbstractCovariantImplementedSetter(int i) {}
+
+ /*member: Interface1.extendedConcreteImplementedCovariantSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedConcreteImplementedCovariantSetter(covariant int i) {}
+
+ /*member: Interface1.extendedAbstractImplementedCovariantSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+
+ /*member: Interface1.implementsMultipleCovariantSetter1=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementsMultipleCovariantSetter1(covariant int i) {}
+
+ /*member: Interface1.implementsMultipleCovariantSetter2=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementsMultipleCovariantSetter2(int i) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementsMultipleCovariantSetter1=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set implementsMultipleCovariantSetter1(int i) {}
+
+ /*member: Interface2.implementsMultipleCovariantSetter2=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set implementsMultipleCovariantSetter2(covariant int i) {}
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteCovariantSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedConcreteCovariantImplementedSetter=#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+ /*member: AbstractClass.extendedConcreteCovariantImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedSetter=,
+ Super.extendedConcreteCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedCovariantSetter=#cls:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantSetter=,
+ type=int
+ */
+ /*member: AbstractClass.extendedConcreteImplementedCovariantSetter=#int:
+ classBuilder=AbstractClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantSetter=,
+ Super.extendedConcreteImplementedCovariantSetter=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantSetter=,
+ type=int
+ */
+
+ /*member: AbstractClass.extendedAbstractCovariantSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: AbstractClass.extendedAbstractCovariantImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedSetter=,
+ Super.extendedAbstractCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedSetter=
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedCovariantSetter=#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantSetter=,
+ Super.extendedAbstractImplementedCovariantSetter=],
+ isSynthesized,
+ type=int
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantSetter1=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter1=,
+ Interface2.implementsMultipleCovariantSetter1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantSetter1=
+ */
+
+ /*member: AbstractClass.implementsMultipleCovariantSetter2=#int:
+ abstractForwardingStub,
+ classBuilder=AbstractClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter2=,
+ Interface2.implementsMultipleCovariantSetter2=],
+ isSynthesized,
+ type=int
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractCovariantImplementedSetter=,
+ AbstractClass.extendedAbstractImplementedCovariantSetter=,
+ AbstractClass.implementsMultipleCovariantSetter1=,
+ AbstractClass.implementsMultipleCovariantSetter2=,
+ Super.extendedAbstractCovariantSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object,
+ Super]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteCovariantSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedSetter=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+ /*member: ConcreteSub.extendedConcreteCovariantImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedSetter=,
+ Super.extendedConcreteCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantSetter=#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedCovariantSetter=],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantSetter=
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedCovariantSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantSetter=,
+ Super.extendedConcreteImplementedCovariantSetter=],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedCovariantSetter=
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.extendedAbstractCovariantImplementedSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedSetter=,
+ Super.extendedAbstractCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedSetter=
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedCovariantSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantSetter=,
+ Super.extendedAbstractImplementedCovariantSetter=],
+ isSynthesized,
+ member=AbstractClass.extendedAbstractImplementedCovariantSetter=
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantSetter1=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter1=,
+ Interface2.implementsMultipleCovariantSetter1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantSetter1=
+ */
+
+ /*member: ConcreteSub.implementsMultipleCovariantSetter2=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter2=,
+ Interface2.implementsMultipleCovariantSetter2=],
+ isSynthesized,
+ member=AbstractClass.implementsMultipleCovariantSetter2=
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Interface1.extendedAbstractCovariantImplementedSetter=,
+ Interface1.extendedAbstractImplementedCovariantSetter=,
+ Interface1.implementsMultipleCovariantSetter1=,
+ Interface1.implementsMultipleCovariantSetter2=,
+ Interface2.implementsMultipleCovariantSetter1=,
+ Interface2.implementsMultipleCovariantSetter2=,
+ Super.extendedAbstractCovariantImplementedSetter=,
+ Super.extendedAbstractCovariantSetter=,
+ Super.extendedAbstractImplementedCovariantSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteCovariantSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedSetter=#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+ /*member: ConcreteClass.extendedConcreteCovariantImplementedSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedConcreteCovariantImplementedSetter=,
+ Super.extendedConcreteCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteCovariantImplementedSetter=
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantSetter=#cls:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedCovariantSetter=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantSetter=,
+ type=int
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedCovariantSetter=#int:
+ classBuilder=ConcreteClass,
+ concreteForwardingStub,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedConcreteImplementedCovariantSetter=,
+ Super.extendedConcreteImplementedCovariantSetter=],
+ isSynthesized,
+ stubTarget=Super.extendedConcreteImplementedCovariantSetter=,
+ type=int
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteClass.extendedAbstractCovariantImplementedSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.extendedAbstractCovariantImplementedSetter=,
+ Super.extendedAbstractCovariantImplementedSetter=],
+ isSynthesized,
+ member=Super.extendedAbstractCovariantImplementedSetter=
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedCovariantSetter=#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.extendedAbstractImplementedCovariantSetter=,
+ Super.extendedAbstractImplementedCovariantSetter=],
+ isSynthesized,
+ type=int
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantSetter1=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter1=,
+ Interface2.implementsMultipleCovariantSetter1=],
+ isSynthesized,
+ member=Interface1.implementsMultipleCovariantSetter1=
+ */
+
+ /*member: ConcreteClass.implementsMultipleCovariantSetter2=#int:
+ abstractForwardingStub,
+ classBuilder=ConcreteClass,
+ covariance=Covariance(0:Covariant),
+ declarations=[
+ Interface1.implementsMultipleCovariantSetter2=,
+ Interface2.implementsMultipleCovariantSetter2=],
+ isSynthesized,
+ type=int
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/getter_setter.dart b/pkg/front_end/test/class_hierarchy/data/getter_setter.dart
new file mode 100644
index 0000000..7823072
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/getter_setter.dart
@@ -0,0 +1,1184 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedGetterDeclaredField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterDeclaredField => '';
+
+ /*member: Super.extendedGetterMixedInField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterMixedInField => '';
+
+ /*member: Super.extendedGetterImplementedField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterImplementedField => '';
+
+ /*member: Super.extendedGetterDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterDeclaredSetter => '';
+
+ /*member: Super.extendedGetterMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterMixedInSetter => '';
+
+ /*member: Super.extendedGetterImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedGetterImplementedSetter => '';
+
+ /*member: Super.extendedFieldDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final String extendedFieldDeclaredSetter = '';
+
+ /*member: Super.extendedFieldMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final String extendedFieldMixedInSetter = '';
+
+ /*member: Super.extendedFieldImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final String extendedFieldImplementedSetter = '';
+
+ /*member: Super.extendedSetterDeclaredField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterDeclaredField(int value) {}
+
+ /*member: Super.extendedSetterMixedInField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterMixedInField(int value) {}
+
+ /*member: Super.extendedSetterImplementedField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterImplementedField(int value) {}
+
+ /*member: Super.extendedSetterDeclaredGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterDeclaredGetter(int value) {}
+
+ /*member: Super.extendedSetterMixedInGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterMixedInGetter(int value) {}
+
+ /*member: Super.extendedSetterImplementedGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedSetterImplementedGetter(int value) {}
+}
+
+/*class: Mixin:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Mixin {
+ /*member: Mixin.extendedGetterMixedInField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.extendedGetterMixedInField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int extendedGetterMixedInField = 0;
+
+ /*member: Mixin.extendedGetterMixedInSetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedGetterMixedInSetter(int value) {}
+
+ /*member: Mixin.extendedFieldMixedInSetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedFieldMixedInSetter(int value) {}
+
+ /*member: Mixin.extendedSetterMixedInField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final String extendedSetterMixedInField = '';
+
+ /*member: Mixin.extendedSetterMixedInGetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ String get extendedSetterMixedInGetter => '';
+
+ /*member: Mixin.mixedInGetterDeclaredField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ String get mixedInGetterDeclaredField => '';
+
+ /*member: Mixin.mixedInGetterImplementedField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ String get mixedInGetterImplementedField => '';
+
+ /*member: Mixin.mixedInGetterDeclaredSetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ String get mixedInGetterDeclaredSetter => '';
+
+ /*member: Mixin.mixedInGetterImplementedSetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ String get mixedInGetterImplementedSetter => '';
+
+ /*member: Mixin.mixedInFieldDeclaredSetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final String mixedInFieldDeclaredSetter = '';
+
+ /*member: Mixin.mixedInFieldImplementedSetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final String mixedInFieldImplementedSetter = '';
+
+ /*member: Mixin.mixedInSetterDeclaredField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInSetterDeclaredField(int value) {}
+
+ /*member: Mixin.mixedInSetterImplementedField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInSetterImplementedField(int value) {}
+
+ /*member: Mixin.mixedInSetterDeclaredGetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInSetterDeclaredGetter(int value) {}
+
+ /*member: Mixin.mixedInSetterImplementedGetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInSetterImplementedGetter(int value) {}
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface1 {
+ /*member: Interface1.extendedGetterImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.extendedGetterImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int extendedGetterImplementedField = 0;
+
+ /*member: Interface1.extendedGetterImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedGetterImplementedSetter(int value) {}
+
+ /*member: Interface1.extendedFieldImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set extendedFieldImplementedSetter(int value) {}
+
+ /*member: Interface1.extendedSetterImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final String extendedSetterImplementedField = '';
+
+ /*member: Interface1.extendedSetterImplementedGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get extendedSetterImplementedGetter => '';
+
+ /*member: Interface1.mixedInGetterImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.mixedInGetterImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int mixedInGetterImplementedField = 0;
+
+ /*member: Interface1.mixedInGetterImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set mixedInGetterImplementedSetter(int value) {}
+
+ /*member: Interface1.mixedInFieldImplementedSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set mixedInFieldImplementedSetter(int value) {}
+
+ /*member: Interface1.mixedInSetterImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final String mixedInSetterImplementedField = '';
+
+ /*member: Interface1.mixedInSetterImplementedGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get mixedInSetterImplementedGetter => '';
+
+ /*member: Interface1.implementedGetterDeclaredField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get implementedGetterDeclaredField => '';
+
+ /*member: Interface1.implementedGetterImplementedField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get implementedGetterImplementedField => '';
+
+ /*member: Interface1.implementedGetterDeclaredSetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get implementedGetterDeclaredSetter => '';
+
+ /*member: Interface1.implementedGetterImplementedSetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get implementedGetterImplementedSetter => '';
+
+ /*member: Interface1.implementedFieldDeclaredSetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final String implementedFieldDeclaredSetter = '';
+
+ /*member: Interface1.implementedFieldImplementedSetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final String implementedFieldImplementedSetter = '';
+
+ /*member: Interface1.implementedSetterDeclaredField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementedSetterDeclaredField(int value) {}
+
+ /*member: Interface1.implementedSetterImplementedField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementedSetterImplementedField(int value) {}
+
+ /*member: Interface1.implementedSetterDeclaredGetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementedSetterDeclaredGetter(int value) {}
+
+ /*member: Interface1.implementedSetterImplementedGetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementedSetterImplementedGetter(int value) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface2 {
+ /*member: Interface2.implementedGetterImplementedField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.implementedGetterImplementedField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int implementedGetterImplementedField = 0;
+
+ /*member: Interface2.implementedGetterImplementedSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set implementedGetterImplementedSetter(int value) {}
+
+ /*member: Interface2.implementedFieldImplementedSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set implementedFieldImplementedSetter(int value) {}
+
+ /*member: Interface2.implementedSetterImplementedField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final String implementedSetterImplementedField = '';
+
+ /*member: Interface2.implementedSetterImplementedGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ String get implementedSetterImplementedGetter => '';
+}
+
+/*class: _Class&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterMixedInField#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInField
+*/
+/*member: _Class&Super&Mixin.extendedGetterMixedInField#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedGetterMixedInField,
+ Super.extendedGetterMixedInField],
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInField
+*/
+/*member: _Class&Super&Mixin.extendedGetterMixedInField=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInField
+*/
+/*member: _Class&Super&Mixin.extendedGetterMixedInField=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.extendedGetterMixedInField=],
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInField
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterMixedInField#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedSetterMixedInField
+*/
+/*member: _Class&Super&Mixin.extendedSetterMixedInField#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.extendedSetterMixedInField],
+ isSynthesized,
+ stubTarget=Mixin.extendedSetterMixedInField
+*/
+/*member: _Class&Super&Mixin.extendedSetterMixedInField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterMixedInGetter#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedSetterMixedInGetter
+*/
+/*member: _Class&Super&Mixin.extendedSetterMixedInGetter#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.extendedSetterMixedInGetter],
+ isSynthesized,
+ stubTarget=Mixin.extendedSetterMixedInGetter
+*/
+/*member: _Class&Super&Mixin.extendedSetterMixedInGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.mixedInGetterDeclaredField#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterDeclaredField
+*/
+/*member: _Class&Super&Mixin.mixedInGetterDeclaredField#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInGetterDeclaredField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterDeclaredField
+*/
+
+/*member: _Class&Super&Mixin.mixedInGetterImplementedField#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterImplementedField
+*/
+/*member: _Class&Super&Mixin.mixedInGetterImplementedField#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInGetterImplementedField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterImplementedField
+*/
+
+/*member: _Class&Super&Mixin.mixedInGetterDeclaredSetter#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterDeclaredSetter
+*/
+/*member: _Class&Super&Mixin.mixedInGetterDeclaredSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInGetterDeclaredSetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterDeclaredSetter
+*/
+
+/*member: _Class&Super&Mixin.mixedInGetterImplementedSetter#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterImplementedSetter
+*/
+/*member: _Class&Super&Mixin.mixedInGetterImplementedSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInGetterImplementedSetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInGetterImplementedSetter
+*/
+
+/*member: _Class&Super&Mixin.mixedInFieldDeclaredSetter#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInFieldDeclaredSetter
+*/
+/*member: _Class&Super&Mixin.mixedInFieldDeclaredSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInFieldDeclaredSetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInFieldDeclaredSetter
+*/
+
+/*member: _Class&Super&Mixin.mixedInFieldImplementedSetter#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInFieldImplementedSetter
+*/
+/*member: _Class&Super&Mixin.mixedInFieldImplementedSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInFieldImplementedSetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInFieldImplementedSetter
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: _Class&Super&Mixin.extendedGetterMixedInSetter=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInSetter=
+*/
+/*member: _Class&Super&Mixin.extendedGetterMixedInSetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.extendedGetterMixedInSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedGetterMixedInSetter=
+*/
+
+/*member: _Class&Super&Mixin.extendedFieldMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: _Class&Super&Mixin.extendedFieldMixedInSetter=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedFieldMixedInSetter=
+*/
+/*member: _Class&Super&Mixin.extendedFieldMixedInSetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.extendedFieldMixedInSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedFieldMixedInSetter=
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterDeclaredField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterImplementedField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedGetterImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedFieldDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedFieldImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.mixedInSetterDeclaredField=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterDeclaredField=
+*/
+/*member: _Class&Super&Mixin.mixedInSetterDeclaredField=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInSetterDeclaredField=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterDeclaredField=
+*/
+
+/*member: _Class&Super&Mixin.mixedInSetterImplementedField=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterImplementedField=
+*/
+/*member: _Class&Super&Mixin.mixedInSetterImplementedField=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInSetterImplementedField=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterImplementedField=
+*/
+
+/*member: _Class&Super&Mixin.mixedInSetterDeclaredGetter=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterDeclaredGetter=
+*/
+/*member: _Class&Super&Mixin.mixedInSetterDeclaredGetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInSetterDeclaredGetter=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterDeclaredGetter=
+*/
+
+/*member: _Class&Super&Mixin.mixedInSetterImplementedGetter=#cls:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterImplementedGetter=
+*/
+/*member: _Class&Super&Mixin.mixedInSetterImplementedGetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInSetterImplementedGetter=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInSetterImplementedGetter=
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterDeclaredField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterImplementedField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterDeclaredGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _Class&Super&Mixin.extendedSetterImplementedGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: Class:
+ interfaces=[
+ Interface1,
+ Interface2,
+ Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _Class&Super&Mixin]
+*/
+abstract class Class extends Super
+ with Mixin
+ implements Interface1, Interface2 {
+ /*member: Class.extendedGetterMixedInField#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInField
+ */
+ /*member: Class.extendedGetterMixedInField#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[
+ Mixin.extendedGetterMixedInField,
+ Super.extendedGetterMixedInField],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInField
+ */
+ /*member: Class.extendedGetterMixedInField=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInField=
+ */
+ /*member: Class.extendedGetterMixedInField=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.extendedGetterMixedInField=],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInField=
+ */
+
+ /*member: Class.extendedSetterMixedInField#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedSetterMixedInField
+ */
+ /*member: Class.extendedSetterMixedInField#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.extendedSetterMixedInField],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedSetterMixedInField
+ */
+ /*member: Class.extendedSetterMixedInField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedSetterMixedInGetter#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedSetterMixedInGetter
+ */
+ /*member: Class.extendedSetterMixedInGetter#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.extendedSetterMixedInGetter],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedSetterMixedInGetter
+ */
+ /*member: Class.extendedSetterMixedInGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: Class.mixedInGetterImplementedField#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterImplementedField
+ */
+ /*member: Class.mixedInGetterImplementedField#int:
+ classBuilder=Class,
+ declarations=[
+ Interface1.mixedInGetterImplementedField,
+ _Class&Super&Mixin.mixedInGetterImplementedField],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterImplementedField
+ */
+ /*member: Class.mixedInGetterImplementedField=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.mixedInGetterImplementedSetter#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterImplementedSetter
+ */
+ /*member: Class.mixedInGetterImplementedSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInGetterImplementedSetter],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterImplementedSetter
+ */
+ /*member: Class.mixedInGetterImplementedSetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.mixedInFieldImplementedSetter#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInFieldImplementedSetter
+ */
+ /*member: Class.mixedInFieldImplementedSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInFieldImplementedSetter],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInFieldImplementedSetter
+ */
+ /*member: Class.mixedInFieldImplementedSetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedGetterMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedGetterMixedInSetter=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInSetter=
+ */
+ /*member: Class.extendedGetterMixedInSetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.extendedGetterMixedInSetter=],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedGetterMixedInSetter=
+ */
+
+ /*member: Class.extendedFieldMixedInSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedFieldMixedInSetter=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedFieldMixedInSetter=
+ */
+ /*member: Class.extendedFieldMixedInSetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.extendedFieldMixedInSetter=],
+ isSynthesized,
+ member=_Class&Super&Mixin.extendedFieldMixedInSetter=
+ */
+
+ /*member: Class.extendedGetterImplementedField#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=Super.extendedGetterImplementedField
+ */
+ /*member: Class.extendedGetterImplementedField#int:
+ classBuilder=Class,
+ declarations=[
+ Interface1.extendedGetterImplementedField,
+ Super.extendedGetterImplementedField],
+ isSynthesized,
+ member=Super.extendedGetterImplementedField
+ */
+ /*member: Class.extendedGetterImplementedField=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedGetterImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedGetterImplementedSetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedFieldImplementedSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedFieldImplementedSetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.mixedInSetterImplementedField#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.mixedInSetterImplementedField=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterImplementedField=
+ */
+ /*member: Class.mixedInSetterImplementedField=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInSetterImplementedField=],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterImplementedField=
+ */
+
+ /*member: Class.mixedInSetterImplementedGetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.mixedInSetterImplementedGetter=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterImplementedGetter=
+ */
+ /*member: Class.mixedInSetterImplementedGetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInSetterImplementedGetter=],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterImplementedGetter=
+ */
+
+ /*member: Class.extendedSetterImplementedField#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedSetterImplementedField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedSetterImplementedGetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedSetterImplementedGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedGetterImplementedField#int:
+ classBuilder=Class,
+ declarations=[
+ Interface1.implementedGetterImplementedField,
+ Interface2.implementedGetterImplementedField],
+ isSynthesized,
+ member=Interface1.implementedGetterImplementedField
+ */
+ /*member: Class.implementedGetterImplementedField=#int:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedGetterImplementedSetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedGetterImplementedSetter=#int:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedFieldImplementedSetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedFieldImplementedSetter=#int:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedSetterImplementedField#int:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedSetterImplementedField=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedSetterImplementedGetter#int:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedSetterImplementedGetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+
+ /*member: Class.extendedGetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedGetterDeclaredField],
+ isSourceDeclaration
+ */
+ /*member: Class.extendedGetterDeclaredField=#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedGetterDeclaredField],
+ isSourceDeclaration
+ */
+ int extendedGetterDeclaredField = 0;
+
+ /*member: Class.extendedGetterDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedGetterDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedGetterDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set extendedGetterDeclaredSetter(int value) {}
+
+ /*member: Class.extendedFieldDeclaredSetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Class.extendedFieldDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedFieldDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set extendedFieldDeclaredSetter(int value) {}
+
+ /*member: Class.extendedSetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedSetterDeclaredField=],
+ isSourceDeclaration
+ */
+ /*member: Class.extendedSetterDeclaredField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final String extendedSetterDeclaredField = '';
+
+ /*member: Class.extendedSetterDeclaredGetter#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.extendedSetterDeclaredGetter=],
+ isSourceDeclaration
+ */
+ /*member: Class.extendedSetterDeclaredGetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ String get extendedSetterDeclaredGetter => '';
+
+ /*member: Class.mixedInGetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredField],
+ isSourceDeclaration
+ */
+ /*member: Class.mixedInGetterDeclaredField=#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredField],
+ isSourceDeclaration
+ */
+ int mixedInGetterDeclaredField = 0;
+
+ /*member: Class.mixedInGetterDeclaredSetter#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterDeclaredSetter
+ */
+ /*member: Class.mixedInGetterDeclaredSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInGetterDeclaredSetter],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInGetterDeclaredSetter
+ */
+ /*member: Class.mixedInGetterDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInGetterDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set mixedInGetterDeclaredSetter(int value) {}
+
+ /*member: Class.mixedInFieldDeclaredSetter#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInFieldDeclaredSetter
+ */
+ /*member: Class.mixedInFieldDeclaredSetter#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInFieldDeclaredSetter],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInFieldDeclaredSetter
+ */
+ /*member: Class.mixedInFieldDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInFieldDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set mixedInFieldDeclaredSetter(int value) {}
+
+ /*member: Class.mixedInSetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInSetterDeclaredField=],
+ isSourceDeclaration
+ */
+ /*member: Class.mixedInSetterDeclaredField=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterDeclaredField=
+ */
+ /*member: Class.mixedInSetterDeclaredField=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInSetterDeclaredField=],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterDeclaredField=
+ */
+ final String mixedInSetterDeclaredField = '';
+
+ /*member: Class.mixedInSetterDeclaredGetter#cls:
+ classBuilder=Class,
+ declared-overrides=[_Class&Super&Mixin.mixedInSetterDeclaredGetter=],
+ isSourceDeclaration
+ */
+ /*member: Class.mixedInSetterDeclaredGetter=#cls:
+ classBuilder=Class,
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterDeclaredGetter=
+ */
+ /*member: Class.mixedInSetterDeclaredGetter=#int:
+ classBuilder=_Class&Super&Mixin,
+ declarations=[Mixin.mixedInSetterDeclaredGetter=],
+ isSynthesized,
+ member=_Class&Super&Mixin.mixedInSetterDeclaredGetter=
+ */
+ String get mixedInSetterDeclaredGetter => '';
+
+ /*member: Class.implementedGetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedGetterDeclaredField],
+ isSourceDeclaration
+ */
+ /*member: Class.implementedGetterDeclaredField=#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedGetterDeclaredField],
+ isSourceDeclaration
+ */
+ int implementedGetterDeclaredField = 0;
+
+ /*member: Class.implementedGetterDeclaredSetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedGetterDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedGetterDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set implementedGetterDeclaredSetter(int value) {}
+
+ /*member: Class.implementedFieldDeclaredSetter#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Class.implementedFieldDeclaredSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedFieldDeclaredSetter],
+ isSourceDeclaration
+ */
+ void set implementedFieldDeclaredSetter(int value) {}
+
+ /*member: Class.implementedSetterDeclaredField#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedSetterDeclaredField=],
+ isSourceDeclaration
+ */
+ /*member: Class.implementedSetterDeclaredField=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final String implementedSetterDeclaredField = '';
+
+ /*member: Class.implementedSetterDeclaredGetter#cls:
+ classBuilder=Class,
+ declared-overrides=[Interface1.implementedSetterDeclaredGetter=],
+ isSourceDeclaration
+ */
+
+ /*member: Class.implementedSetterDeclaredGetter=#int:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ String get implementedSetterDeclaredGetter => '';
+
+ /*member: Class.declaredGetterDeclaredSetter#cls:
+ classBuilder=Class,
+ isSourceDeclaration
+ */
+ String get declaredGetterDeclaredSetter => '';
+
+ /*member: Class.declaredGetterDeclaredSetter=#cls:
+ classBuilder=Class,
+ isSourceDeclaration
+ */
+ void set declaredGetterDeclaredSetter(int value) {}
+
+ /*member: Class.declaredFieldDeclaredSetter#cls:
+ classBuilder=Class,
+ isSourceDeclaration
+ */
+ final String declaredFieldDeclaredSetter = '';
+
+ /*member: Class.declaredFieldDeclaredSetter=#cls:
+ classBuilder=Class,
+ isSourceDeclaration
+ */
+ void set declaredFieldDeclaredSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/implement_multiple_field.dart b/pkg/front_end/test/class_hierarchy/data/implement_multiple_field.dart
new file mode 100644
index 0000000..b68d55b
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/implement_multiple_field.dart
@@ -0,0 +1,293 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.implementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.implementMultipleField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int implementMultipleField = 0;
+
+ /*member: Interface1.declareConcreteImplementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.declareConcreteImplementMultipleField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int declareConcreteImplementMultipleField = 0;
+
+ /*member: Interface1.declareAbstractImplementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ /*member: Interface1.declareAbstractImplementMultipleField=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int declareAbstractImplementMultipleField = 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.implementMultipleField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int implementMultipleField = 0;
+
+ /*member: Interface2.declareConcreteImplementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.declareConcreteImplementMultipleField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int declareConcreteImplementMultipleField = 0;
+
+ /*member: Interface2.declareAbstractImplementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ /*member: Interface2.declareAbstractImplementMultipleField=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int declareAbstractImplementMultipleField = 0;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declareAbstractImplementMultipleField,
+ ConcreteClass.declareAbstractImplementMultipleField=,
+ Interface1.implementMultipleField,
+ Interface1.implementMultipleField=,
+ Interface2.implementMultipleField,
+ Interface2.implementMultipleField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface1, Interface2 {
+ /*member: ConcreteClass.implementMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+ /*member: ConcreteClass.implementMultipleField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleField=,
+ Interface2.implementMultipleField=],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+
+ /*member: ConcreteClass.declareConcreteImplementMultipleField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface1.declareConcreteImplementMultipleField=,
+ Interface2.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField=],
+ isSourceDeclaration
+ */
+ /*member: ConcreteClass.declareConcreteImplementMultipleField=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface1.declareConcreteImplementMultipleField=,
+ Interface2.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField=],
+ isSourceDeclaration
+ */
+ int declareConcreteImplementMultipleField = 0;
+
+ /*member: ConcreteClass.declareAbstractImplementMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField=],
+ isSynthesized
+ */
+ /*member: ConcreteClass.declareAbstractImplementMultipleField=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleField=,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField=],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField=],
+ isSynthesized
+ */
+ abstract int declareAbstractImplementMultipleField;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface1, Interface2 {
+ /*member: AbstractClass.implementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+ /*member: AbstractClass.implementMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField=,
+ Interface2.implementMultipleField=],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+
+ /*member: AbstractClass.declareConcreteImplementMultipleField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface1.declareConcreteImplementMultipleField=,
+ Interface2.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField=],
+ isSourceDeclaration
+ */
+ /*member: AbstractClass.declareConcreteImplementMultipleField=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface1.declareConcreteImplementMultipleField=,
+ Interface2.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField=],
+ isSourceDeclaration
+ */
+ int declareConcreteImplementMultipleField = 0;
+
+ /*member: AbstractClass.declareAbstractImplementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField=],
+ isSynthesized
+ */
+ /*member: AbstractClass.declareAbstractImplementMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField=,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField=],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField=],
+ isSynthesized
+ */
+ abstract int declareAbstractImplementMultipleField;
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ AbstractClass.declareAbstractImplementMultipleField=,
+ AbstractClass.implementMultipleField,
+ AbstractClass.implementMultipleField=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.declareConcreteImplementMultipleField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+ /*member: ConcreteSub.declareConcreteImplementMultipleField=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.declareAbstractImplementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleField
+ */
+ /*member: ConcreteSub.declareAbstractImplementMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField=,
+ Interface1.declareAbstractImplementMultipleField=,
+ Interface2.declareAbstractImplementMultipleField=],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleField=
+ */
+
+ /*member: ConcreteSub.implementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+ /*member: ConcreteSub.implementMultipleField=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField=,
+ Interface2.implementMultipleField=],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/implement_multiple_final_field.dart b/pkg/front_end/test/class_hierarchy/data/implement_multiple_final_field.dart
new file mode 100644
index 0000000..c3a5321
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/implement_multiple_final_field.dart
@@ -0,0 +1,175 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.implementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int implementMultipleField = 0;
+
+ /*member: Interface1.declareConcreteImplementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int declareConcreteImplementMultipleField = 0;
+
+ /*member: Interface1.declareAbstractImplementMultipleField#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ final int declareAbstractImplementMultipleField = 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final int implementMultipleField = 0;
+
+ /*member: Interface2.declareConcreteImplementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final int declareConcreteImplementMultipleField = 0;
+
+ /*member: Interface2.declareAbstractImplementMultipleField#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ final int declareAbstractImplementMultipleField = 0;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declareAbstractImplementMultipleField,
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface1, Interface2 {
+ /*member: ConcreteClass.implementMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+
+ /*member: ConcreteClass.declareConcreteImplementMultipleField#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField],
+ isSourceDeclaration
+ */
+ final int declareConcreteImplementMultipleField = 0;
+
+ /*member: ConcreteClass.declareAbstractImplementMultipleField#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ isSynthesized
+ */
+ abstract final int declareAbstractImplementMultipleField;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface1, Interface2 {
+ /*member: AbstractClass.implementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+
+ /*member: AbstractClass.declareConcreteImplementMultipleField#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleField,
+ Interface2.declareConcreteImplementMultipleField],
+ isSourceDeclaration
+ */
+ final int declareConcreteImplementMultipleField = 0;
+
+ /*member: AbstractClass.declareAbstractImplementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ isSynthesized
+ */
+ abstract final int declareAbstractImplementMultipleField;
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ AbstractClass.implementMultipleField],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.declareConcreteImplementMultipleField#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.declareAbstractImplementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleField,
+ Interface1.declareAbstractImplementMultipleField,
+ Interface2.declareAbstractImplementMultipleField],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleField
+ */
+
+ /*member: ConcreteSub.implementMultipleField#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleField,
+ Interface2.implementMultipleField],
+ isSynthesized,
+ member=Interface1.implementMultipleField
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/implement_multiple_getter.dart b/pkg/front_end/test/class_hierarchy/data/implement_multiple_getter.dart
new file mode 100644
index 0000000..2460469
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/implement_multiple_getter.dart
@@ -0,0 +1,175 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.implementMultipleGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get implementMultipleGetter => 0;
+
+ /*member: Interface1.declareConcreteImplementMultipleGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get declareConcreteImplementMultipleGetter => 0;
+
+ /*member: Interface1.declareAbstractImplementMultipleGetter#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ int get declareAbstractImplementMultipleGetter => 0;
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementMultipleGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int get implementMultipleGetter => 0;
+
+ /*member: Interface2.declareConcreteImplementMultipleGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int get declareConcreteImplementMultipleGetter => 0;
+
+ /*member: Interface2.declareAbstractImplementMultipleGetter#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ int get declareAbstractImplementMultipleGetter => 0;
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declareAbstractImplementMultipleGetter,
+ Interface1.implementMultipleGetter,
+ Interface2.implementMultipleGetter],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface1, Interface2 {
+ /*member: ConcreteClass.implementMultipleGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleGetter,
+ Interface2.implementMultipleGetter],
+ isSynthesized,
+ member=Interface1.implementMultipleGetter
+ */
+
+ /*member: ConcreteClass.declareConcreteImplementMultipleGetter#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleGetter,
+ Interface2.declareConcreteImplementMultipleGetter],
+ isSourceDeclaration
+ */
+ int get declareConcreteImplementMultipleGetter => 0;
+
+ /*member: ConcreteClass.declareAbstractImplementMultipleGetter#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleGetter,
+ Interface1.declareAbstractImplementMultipleGetter,
+ Interface2.declareAbstractImplementMultipleGetter],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleGetter,
+ Interface2.declareAbstractImplementMultipleGetter],
+ isSynthesized
+ */
+ int get declareAbstractImplementMultipleGetter;
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface1, Interface2 {
+ /*member: AbstractClass.implementMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleGetter,
+ Interface2.implementMultipleGetter],
+ isSynthesized,
+ member=Interface1.implementMultipleGetter
+ */
+
+ /*member: AbstractClass.declareConcreteImplementMultipleGetter#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleGetter,
+ Interface2.declareConcreteImplementMultipleGetter],
+ isSourceDeclaration
+ */
+ int get declareConcreteImplementMultipleGetter => 0;
+
+ /*member: AbstractClass.declareAbstractImplementMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleGetter,
+ Interface1.declareAbstractImplementMultipleGetter,
+ Interface2.declareAbstractImplementMultipleGetter],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleGetter,
+ Interface2.declareAbstractImplementMultipleGetter],
+ isSynthesized
+ */
+ int get declareAbstractImplementMultipleGetter;
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.declareAbstractImplementMultipleGetter,
+ AbstractClass.implementMultipleGetter],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.declareConcreteImplementMultipleGetter#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.declareAbstractImplementMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleGetter,
+ Interface1.declareAbstractImplementMultipleGetter,
+ Interface2.declareAbstractImplementMultipleGetter],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleGetter
+ */
+
+ /*member: ConcreteSub.implementMultipleGetter#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleGetter,
+ Interface2.implementMultipleGetter],
+ isSynthesized,
+ member=Interface1.implementMultipleGetter
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/implement_multiple_method.dart b/pkg/front_end/test/class_hierarchy/data/implement_multiple_method.dart
new file mode 100644
index 0000000..99d540c
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/implement_multiple_method.dart
@@ -0,0 +1,171 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.implementMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void implementMultipleMethod() {}
+
+ /*member: Interface1.declareConcreteImplementMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void declareConcreteImplementMultipleMethod() {}
+
+ /*member: Interface1.declareAbstractImplementMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void declareAbstractImplementMultipleMethod() {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void implementMultipleMethod() {}
+ /*member: Interface2.declareConcreteImplementMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void declareConcreteImplementMultipleMethod() {}
+ /*member: Interface2.declareAbstractImplementMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void declareAbstractImplementMultipleMethod() {}
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declareAbstractImplementMultipleMethod,
+ Interface1.implementMultipleMethod,
+ Interface2.implementMultipleMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface1, Interface2 {
+ /*member: ConcreteClass.implementMultipleMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleMethod,
+ Interface2.implementMultipleMethod],
+ isSynthesized,
+ member=Interface1.implementMultipleMethod
+ */
+
+ /*member: ConcreteClass.declareConcreteImplementMultipleMethod#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleMethod,
+ Interface2.declareConcreteImplementMultipleMethod],
+ isSourceDeclaration
+ */
+ void declareConcreteImplementMultipleMethod() {}
+
+ /*member: ConcreteClass.declareAbstractImplementMultipleMethod#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleMethod,
+ Interface1.declareAbstractImplementMultipleMethod,
+ Interface2.declareAbstractImplementMultipleMethod],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleMethod,
+ Interface2.declareAbstractImplementMultipleMethod],
+ isSynthesized
+ */
+ void declareAbstractImplementMultipleMethod();
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+abstract class AbstractClass implements Interface1, Interface2 {
+ /*member: AbstractClass.implementMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleMethod,
+ Interface2.implementMultipleMethod],
+ isSynthesized,
+ member=Interface1.implementMultipleMethod
+ */
+
+ /*member: AbstractClass.declareConcreteImplementMultipleMethod#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleMethod,
+ Interface2.declareConcreteImplementMultipleMethod],
+ isSourceDeclaration
+ */
+ void declareConcreteImplementMultipleMethod() {}
+
+ /*member: AbstractClass.declareAbstractImplementMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleMethod,
+ Interface1.declareAbstractImplementMultipleMethod,
+ Interface2.declareAbstractImplementMultipleMethod],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleMethod,
+ Interface2.declareAbstractImplementMultipleMethod],
+ isSynthesized
+ */
+ void declareAbstractImplementMultipleMethod();
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.declareAbstractImplementMultipleMethod,
+ AbstractClass.implementMultipleMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.declareConcreteImplementMultipleMethod#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.declareAbstractImplementMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleMethod,
+ Interface1.declareAbstractImplementMultipleMethod,
+ Interface2.declareAbstractImplementMultipleMethod],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleMethod
+ */
+
+ /*member: ConcreteSub.implementMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleMethod,
+ Interface2.implementMultipleMethod],
+ isSynthesized,
+ member=Interface1.implementMultipleMethod
+ */
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/implement_multiple_setter.dart b/pkg/front_end/test/class_hierarchy/data/implement_multiple_setter.dart
new file mode 100644
index 0000000..1ddc683
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/implement_multiple_setter.dart
@@ -0,0 +1,176 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface1 {
+ /*member: Interface1.implementMultipleSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set implementMultipleSetter(int i) {}
+
+ /*member: Interface1.declareConcreteImplementMultipleSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set declareConcreteImplementMultipleSetter(int i) {}
+
+ /*member: Interface1.declareAbstractImplementMultipleSetter=#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface2 {
+ /*member: Interface2.implementMultipleSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set implementMultipleSetter(int i) {}
+
+ /*member: Interface2.declareConcreteImplementMultipleSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set declareConcreteImplementMultipleSetter(int i) {}
+
+ /*member: Interface2.declareAbstractImplementMultipleSetter=#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ ConcreteClass.declareAbstractImplementMultipleSetter=,
+ Interface1.implementMultipleSetter=,
+ Interface2.implementMultipleSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class ConcreteClass implements Interface1, Interface2 {
+ /*member: ConcreteClass.implementMultipleSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ Interface1.implementMultipleSetter=,
+ Interface2.implementMultipleSetter=],
+ isSynthesized,
+ member=Interface1.implementMultipleSetter=
+ */
+
+ /*member: ConcreteClass.declareConcreteImplementMultipleSetter=#cls:
+ classBuilder=ConcreteClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleSetter=,
+ Interface2.declareConcreteImplementMultipleSetter=],
+ isSourceDeclaration
+ */
+ void set declareConcreteImplementMultipleSetter(int i) {}
+
+ /*member: ConcreteClass.declareAbstractImplementMultipleSetter=#int:
+ classBuilder=ConcreteClass,
+ declarations=[
+ ConcreteClass.declareAbstractImplementMultipleSetter=,
+ Interface1.declareAbstractImplementMultipleSetter=,
+ Interface2.declareAbstractImplementMultipleSetter=],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleSetter=,
+ Interface2.declareAbstractImplementMultipleSetter=],
+ isSynthesized
+ */
+ void set declareAbstractImplementMultipleSetter(int i);
+}
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+
+abstract class AbstractClass implements Interface1, Interface2 {
+ /*member: AbstractClass.implementMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleSetter=,
+ Interface2.implementMultipleSetter=],
+ isSynthesized,
+ member=Interface1.implementMultipleSetter=
+ */
+
+ /*member: AbstractClass.declareConcreteImplementMultipleSetter=#cls:
+ classBuilder=AbstractClass,
+ declared-overrides=[
+ Interface1.declareConcreteImplementMultipleSetter=,
+ Interface2.declareConcreteImplementMultipleSetter=],
+ isSourceDeclaration
+ */
+ void set declareConcreteImplementMultipleSetter(int i) {}
+
+ /*member: AbstractClass.declareAbstractImplementMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleSetter=,
+ Interface1.declareAbstractImplementMultipleSetter=,
+ Interface2.declareAbstractImplementMultipleSetter=],
+ declared-overrides=[
+ Interface1.declareAbstractImplementMultipleSetter=,
+ Interface2.declareAbstractImplementMultipleSetter=],
+ isSynthesized
+ */
+ void set declareAbstractImplementMultipleSetter(int i);
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.declareAbstractImplementMultipleSetter=,
+ AbstractClass.implementMultipleSetter=],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.declareConcreteImplementMultipleSetter=#cls:
+ classBuilder=AbstractClass,
+ isSourceDeclaration
+ */
+
+ /*member: ConcreteSub.declareAbstractImplementMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ AbstractClass.declareAbstractImplementMultipleSetter=,
+ Interface1.declareAbstractImplementMultipleSetter=,
+ Interface2.declareAbstractImplementMultipleSetter=],
+ isSynthesized,
+ member=AbstractClass.declareAbstractImplementMultipleSetter=
+ */
+
+ /*member: ConcreteSub.implementMultipleSetter=#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementMultipleSetter=,
+ Interface2.implementMultipleSetter=],
+ isSynthesized,
+ member=Interface1.implementMultipleSetter=
+ */
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/in_out_in/in.dart b/pkg/front_end/test/class_hierarchy/data/in_out_in/in.dart
new file mode 100644
index 0000000..2c7d774
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/in_out_in/in.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.method#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int method(int i) => i;
+}
+
+/*class: SuperQ:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class SuperQ {
+ /*member: SuperQ.method#cls:
+ classBuilder=SuperQ,
+ isSourceDeclaration
+ */
+ int? method(int? i) => i;
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/in_out_in/main.dart b/pkg/front_end/test/class_hierarchy/data/in_out_in/main.dart
new file mode 100644
index 0000000..1eb489c
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/in_out_in/main.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2021, 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 'in.dart';
+import 'out.dart';
+
+/*class: Class:
+ interfaces=[SuperQ],
+ maxInheritancePath=3,
+ superclasses=[
+ LegacyClass,
+ Object,
+ Super]
+*/
+class Class extends LegacyClass implements SuperQ {
+ /*member: Class.method#cls:
+ classBuilder=Class,
+ inherited-implements=[Class.method],
+ isSynthesized,
+ member=Super.method
+ */
+ /*member: Class.method#int:
+ classBuilder=Class,
+ covariance=Covariance.empty(),
+ declarations=[
+ LegacyClass.method,
+ SuperQ.method],
+ isSynthesized,
+ memberSignature,
+ type=int? Function(int?)
+ */
+}
+
+/*class: ClassQ:
+ interfaces=[Super],
+ maxInheritancePath=3,
+ superclasses=[
+ LegacyClassQ,
+ Object,
+ SuperQ]
+*/
+/*member: ClassQ.method#cls:
+ classBuilder=ClassQ,
+ inherited-implements=[ClassQ.method],
+ isSynthesized,
+ member=SuperQ.method
+*/
+/*member: ClassQ.method#int:
+ classBuilder=ClassQ,
+ covariance=Covariance.empty(),
+ declarations=[
+ LegacyClassQ.method,
+ Super.method],
+ isSynthesized,
+ memberSignature,
+ type=int Function(int)
+*/
+class ClassQ extends LegacyClassQ implements Super {}
diff --git a/pkg/front_end/test/class_hierarchy/data/in_out_in/out.dart b/pkg/front_end/test/class_hierarchy/data/in_out_in/out.dart
new file mode 100644
index 0000000..ddfc71b
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/in_out_in/out.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'in.dart';
+
+/*class: LegacyClass:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+class LegacyClass extends Super {
+ /*member: LegacyClass.method#cls:
+ classBuilder=LegacyClass,
+ isSynthesized,
+ member=Super.method
+ */
+ /*member: LegacyClass.method#int:
+ classBuilder=LegacyClass,
+ covariance=Covariance.empty(),
+ declarations=[Super.method],
+ isSynthesized,
+ memberSignature,
+ type=int* Function(int*)*
+ */
+}
+
+/*class: LegacyClassQ:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ SuperQ]
+*/
+class LegacyClassQ extends SuperQ {
+ /*member: LegacyClassQ.method#cls:
+ classBuilder=LegacyClassQ,
+ isSynthesized,
+ member=SuperQ.method
+ */
+ /*member: LegacyClassQ.method#int:
+ classBuilder=LegacyClassQ,
+ covariance=Covariance.empty(),
+ declarations=[SuperQ.method],
+ isSynthesized,
+ memberSignature,
+ type=int* Function(int*)*
+ */
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/infer_parameter_opt_out.dart b/pkg/front_end/test/class_hierarchy/data/infer_parameter_opt_out.dart
new file mode 100644
index 0000000..4c1858f
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/infer_parameter_opt_out.dart
@@ -0,0 +1,153 @@
+// Copyright (c) 2020, 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.
+
+// @dart=2.9
+
+/*class: A:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class A {
+ /*member: A.method#cls:
+ classBuilder=A,
+ isSourceDeclaration
+ */
+ dynamic method(dynamic o, {dynamic named}) {}
+}
+
+/*class: B:
+ maxInheritancePath=2,
+ superclasses=[
+ A,
+ Object]
+*/
+abstract class B extends A {
+ /*member: B.method#cls:
+ classBuilder=B,
+ isSynthesized,
+ member=A.method
+ */
+ /*member: B.method#int:
+ classBuilder=B,
+ declarations=[
+ A.method,
+ B.method],
+ declared-overrides=[A.method],
+ isSynthesized
+ */
+ Object method(Object o, {Object named});
+}
+
+/*class: C1:
+ interfaces=[B],
+ maxInheritancePath=3,
+ superclasses=[
+ A,
+ Object]
+*/
+class C1 extends A implements B {
+ /*member: C1.method#cls:
+ classBuilder=C1,
+ declared-overrides=[
+ A.method,
+ B.method],
+ isSourceDeclaration
+ */
+ method(o, {named}) {}
+}
+
+/*class: C2:
+ maxInheritancePath=3,
+ superclasses=[
+ A,
+ B,
+ Object]
+*/
+class C2 extends B implements A {
+ /*member: C2.method#cls:
+ classBuilder=C2,
+ declared-overrides=[
+ A.method,
+ B.method],
+ isSourceDeclaration
+ */
+ method(o, {named}) {}
+}
+
+/*class: C3:
+ interfaces=[
+ A,
+ B],
+ maxInheritancePath=3,
+ superclasses=[Object]
+*/
+class C3 implements A, B {
+ /*member: C3.method#cls:
+ classBuilder=C3,
+ declared-overrides=[
+ A.method,
+ B.method],
+ isSourceDeclaration
+ */
+ method(o, {named}) {}
+}
+
+/*class: C4:
+ interfaces=[
+ A,
+ B],
+ maxInheritancePath=3,
+ superclasses=[Object]
+*/
+class C4 implements B, A {
+ /*member: C4.method#cls:
+ classBuilder=C4,
+ declared-overrides=[
+ A.method,
+ B.method],
+ isSourceDeclaration
+ */
+ method(o, {named}) {}
+}
+
+/*class: D:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class D {
+ /*member: D.==#int:
+ classBuilder=D,
+ declarations=[
+ D.==,
+ Object.==],
+ declared-overrides=[Object.==],
+ isSynthesized
+ */
+ bool operator ==(Object other);
+}
+
+/*class: F:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class F {}
+
+/*class: E:
+ interfaces=[
+ D,
+ F],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class E implements D, F {
+ /*member: E.==#cls:
+ classBuilder=E,
+ declared-overrides=[
+ D.==,
+ F.==,
+ Object.==],
+ isSourceDeclaration
+ */
+ bool operator ==(other) => true;
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/late.dart b/pkg/front_end/test/class_hierarchy/data/late.dart
new file mode 100644
index 0000000..5b0ff6a
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/late.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Interface {
+ /*member: Interface.implementedLateFieldDeclaredGetterSetter#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.implementedLateFieldDeclaredGetterSetter=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ late int implementedLateFieldDeclaredGetterSetter;
+}
+
+/*class: Class:
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class Class implements Interface {
+/*member: Class.implementedLateFieldDeclaredGetterSetter#cls:
+ classBuilder=Class,
+ declared-overrides=[
+ Interface.implementedLateFieldDeclaredGetterSetter,
+ Interface.implementedLateFieldDeclaredGetterSetter=],
+ isSourceDeclaration
+*/
+ int get implementedLateFieldDeclaredGetterSetter => 0;
+
+/*member: Class.implementedLateFieldDeclaredGetterSetter=#cls:
+ classBuilder=Class,
+ declared-overrides=[
+ Interface.implementedLateFieldDeclaredGetterSetter,
+ Interface.implementedLateFieldDeclaredGetterSetter=],
+ isSourceDeclaration
+*/
+ void set implementedLateFieldDeclaredGetterSetter(int value) {}
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/marker.options b/pkg/front_end/test/class_hierarchy/data/marker.options
new file mode 100644
index 0000000..8b2da11
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/marker.options
@@ -0,0 +1 @@
+cfe:nnbd=pkg/front_end/test/class_hierarchy/class_hierarchy_test.dart
diff --git a/pkg/front_end/test/class_hierarchy/data/member_signatures/lib.dart b/pkg/front_end/test/class_hierarchy/data/member_signatures/lib.dart
new file mode 100644
index 0000000..af6c533
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/member_signatures/lib.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Super {
+ /*member: Super.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod(int i) {}
+
+ /*member: Super.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod(int i);
+
+ /*member: Super.extendedConcreteImplementedMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMethod(int i) {}
+
+ /*member: Super.extendedAbstractImplementedMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMethod(int i);
+}
+
+/*class: Interface1:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface1 {
+ /*member: Interface1.extendedConcreteImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedConcreteImplementedMethod(int i) {}
+
+ /*member: Interface1.extendedAbstractImplementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void extendedAbstractImplementedMethod(int i) {}
+
+ /*member: Interface1.implementedMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void implementedMethod(int i) {}
+
+ /*member: Interface1.implementedMultipleMethod#cls:
+ classBuilder=Interface1,
+ isSourceDeclaration
+ */
+ void implementedMultipleMethod(int i) {}
+}
+
+/*class: Interface2:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface2 {
+ /*member: Interface2.implementedMultipleMethod#cls:
+ classBuilder=Interface2,
+ isSourceDeclaration
+ */
+ void implementedMultipleMethod(int i) {}
+}
diff --git a/pkg/front_end/test/class_hierarchy/data/member_signatures/main.dart b/pkg/front_end/test/class_hierarchy/data/member_signatures/main.dart
new file mode 100644
index 0000000..a7260ed
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/member_signatures/main.dart
@@ -0,0 +1,364 @@
+// Copyright (c) 2021, 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.
+
+// @dart=2.9
+
+import 'lib.dart';
+
+/*class: AbstractClass:
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Super,
+ Object]
+*/
+abstract class AbstractClass extends Super implements Interface1, Interface2 {
+ /*member: AbstractClass.extendedConcreteMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteMethod
+ */
+ /*member: AbstractClass.extendedConcreteMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedConcreteMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: AbstractClass.extendedAbstractMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedAbstractMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: AbstractClass.extendedConcreteImplementedMethod#cls:
+ classBuilder=AbstractClass,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: AbstractClass.extendedConcreteImplementedMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: AbstractClass.extendedAbstractImplementedMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: AbstractClass.implementedMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[Interface1.implementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: AbstractClass.implementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.implementedMultipleMethod,
+ Interface2.implementedMultipleMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+}
+
+/*class: ConcreteSub:
+ abstractMembers=[
+ AbstractClass.extendedAbstractImplementedMethod,
+ AbstractClass.extendedAbstractMethod,
+ AbstractClass.implementedMethod,
+ AbstractClass.implementedMultipleMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=3,
+ superclasses=[
+ Super,
+ AbstractClass,
+ Object]
+*/
+class ConcreteSub extends AbstractClass {
+ /*member: ConcreteSub.extendedConcreteMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMethod
+ */
+ /*member: ConcreteSub.extendedConcreteMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[Super.extendedConcreteMethod],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[Super.extendedAbstractMethod],
+ isSynthesized,
+ member=AbstractClass.extendedAbstractMethod
+ */
+
+ /*member: ConcreteSub.extendedConcreteImplementedMethod#cls:
+ classBuilder=ConcreteSub,
+ inherited-implements=[AbstractClass.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: ConcreteSub.extendedConcreteImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=AbstractClass.extendedConcreteImplementedMethod
+ */
+
+ /*member: ConcreteSub.extendedAbstractImplementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ member=AbstractClass.extendedAbstractImplementedMethod
+ */
+
+ /*member: ConcreteSub.implementedMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[Interface1.implementedMethod],
+ isSynthesized,
+ member=AbstractClass.implementedMethod
+ */
+
+ /*member: ConcreteSub.implementedMultipleMethod#int:
+ classBuilder=AbstractClass,
+ declarations=[
+ Interface1.implementedMultipleMethod,
+ Interface2.implementedMultipleMethod],
+ isSynthesized,
+ member=AbstractClass.implementedMultipleMethod
+ */
+}
+
+/*class: ConcreteClass:
+ abstractMembers=[
+ Super.extendedAbstractImplementedMethod,
+ Super.extendedAbstractMethod,
+ Interface1.extendedAbstractImplementedMethod,
+ Interface1.implementedMethod,
+ Interface1.implementedMultipleMethod,
+ Interface2.implementedMultipleMethod],
+ interfaces=[
+ Interface1,
+ Interface2],
+ maxInheritancePath=2,
+ superclasses=[
+ Super,
+ Object]
+*/
+class ConcreteClass extends Super implements Interface1, Interface2 {
+ /*member: ConcreteClass.extendedConcreteMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMethod
+ */
+ /*member: ConcreteClass.extendedConcreteMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedConcreteMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: ConcreteClass.extendedAbstractMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedAbstractMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: ConcreteClass.extendedConcreteImplementedMethod#cls:
+ classBuilder=ConcreteClass,
+ inherited-implements=[ConcreteClass.extendedConcreteImplementedMethod],
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+ */
+ /*member: ConcreteClass.extendedConcreteImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: ConcreteClass.extendedAbstractImplementedMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: ConcreteClass.implementedMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[Interface1.implementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+
+ /*member: ConcreteClass.implementedMultipleMethod#int:
+ classBuilder=ConcreteClass,
+ covariance=Covariance.empty(),
+ declarations=[
+ Interface1.implementedMultipleMethod,
+ Interface2.implementedMultipleMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+ */
+}
+
+/*class: OptOutInterface:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: OptOutInterface.extendedConcreteImplementedMethod#cls:
+ classBuilder=OptOutInterface,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+*/
+/*member: OptOutInterface.extendedConcreteImplementedMethod#int:
+ classBuilder=OptOutInterface,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: OptOutInterface.extendedAbstractImplementedMethod#int:
+ classBuilder=OptOutInterface,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: OptOutInterface.extendedConcreteMethod#cls:
+ classBuilder=OptOutInterface,
+ isSynthesized,
+ member=Super.extendedConcreteMethod
+*/
+/*member: OptOutInterface.extendedConcreteMethod#int:
+ classBuilder=OptOutInterface,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedConcreteMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: OptOutInterface.extendedAbstractMethod#int:
+ classBuilder=OptOutInterface,
+ covariance=Covariance.empty(),
+ declarations=[Super.extendedAbstractMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+abstract class OptOutInterface extends Super {}
+
+/*class: ClassImplementsOptOut:
+ interfaces=[OptOutInterface],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: ClassImplementsOptOut.extendedConcreteImplementedMethod#int:
+ classBuilder=ClassImplementsOptOut,
+ covariance=Covariance.empty(),
+ declarations=[
+ OptOutInterface.extendedConcreteImplementedMethod,
+ Super.extendedConcreteImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: ClassImplementsOptOut.extendedAbstractImplementedMethod#int:
+ classBuilder=ClassImplementsOptOut,
+ covariance=Covariance.empty(),
+ declarations=[
+ OptOutInterface.extendedAbstractImplementedMethod,
+ Super.extendedAbstractImplementedMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: ClassImplementsOptOut.extendedConcreteMethod#cls:
+ classBuilder=ClassImplementsOptOut,
+ isSynthesized,
+ member=Super.extendedConcreteMethod
+*/
+/*member: ClassImplementsOptOut.extendedConcreteImplementedMethod#cls:
+ classBuilder=ClassImplementsOptOut,
+ isSynthesized,
+ member=Super.extendedConcreteImplementedMethod
+*/
+/*member: ClassImplementsOptOut.extendedConcreteMethod#int:
+ classBuilder=ClassImplementsOptOut,
+ covariance=Covariance.empty(),
+ declarations=[
+ OptOutInterface.extendedConcreteMethod,
+ Super.extendedConcreteMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+/*member: ClassImplementsOptOut.extendedAbstractMethod#int:
+ classBuilder=ClassImplementsOptOut,
+ covariance=Covariance.empty(),
+ declarations=[
+ OptOutInterface.extendedAbstractMethod,
+ Super.extendedAbstractMethod],
+ isSynthesized,
+ memberSignature,
+ type=void Function(int*)*
+*/
+abstract class ClassImplementsOptOut extends Super implements OptOutInterface {}
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_field.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_field.dart
new file mode 100644
index 0000000..01f7b92
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_field.dart
@@ -0,0 +1,765 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractField,
+ Super.extendedAbstractField=,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteField = 0;
+
+ /*member: Super.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractField;
+
+ /*member: Super.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteMixedInConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteMixedInConcreteField = 0;
+
+ /*member: Super.extendedAbstractMixedInConcreteField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractMixedInConcreteField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractMixedInConcreteField;
+
+ /*member: Super.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedConcreteMixedInAbstractField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int extendedConcreteMixedInAbstractField = 0;
+
+ /*member: Super.extendedAbstractMixedInAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: Super.extendedAbstractMixedInAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractMixedInAbstractField;
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Mixin.mixedInAbstractField,
+ Mixin.mixedInAbstractField=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.mixedInConcreteField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int mixedInConcreteField = 0;
+
+ /*member: Mixin.mixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.mixedInAbstractField=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract int mixedInAbstractField;
+
+ /*member: Mixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.extendedConcreteMixedInConcreteField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int extendedConcreteMixedInConcreteField = 0;
+
+ /*member: Mixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.extendedAbstractMixedInConcreteField=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int extendedAbstractMixedInConcreteField = 0;
+
+ /*member: Mixin.extendedConcreteMixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.extendedConcreteMixedInAbstractField=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract int extendedConcreteMixedInAbstractField;
+
+ /*member: Mixin.extendedAbstractMixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ /*member: Mixin.extendedAbstractMixedInAbstractField=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract int extendedAbstractMixedInAbstractField;
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/ /*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField=,
+ Super.extendedConcreteMixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField=,
+ Super.extendedAbstractMixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField=]
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInAbstractField,
+ Mixin.mixedInAbstractField=]
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInAbstractField,
+ Mixin.mixedInAbstractField=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField=]
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractField,
+ Super.extendedAbstractField=,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField=,
+ _ClassMixin&Super&Mixin.mixedInAbstractField,
+ _ClassMixin&Super&Mixin.mixedInAbstractField=],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.mixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField
+ */
+ /*member: ClassMixin.mixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField
+ */
+ /*member: ClassMixin.mixedInConcreteField=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField=
+ */
+ /*member: ClassMixin.mixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField=
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField=
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField=,
+ Super.extendedConcreteMixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField=
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField=
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField=,
+ Super.extendedAbstractMixedInConcreteField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField=
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField=],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField=
+ */
+
+ /*member: ClassMixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ClassMixin.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.mixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractField
+ */
+ /*member: ClassMixin.mixedInAbstractField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractField=
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField
+ */
+ /*member: ClassMixin.extendedAbstractMixedInAbstractField=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField=
+ */
+
+ /*member: ClassMixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ /*member: ClassMixin.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractField,
+ NamedMixin.extendedAbstractMixedInAbstractField=,
+ NamedMixin.mixedInAbstractField,
+ NamedMixin.mixedInAbstractField=,
+ Super.extendedAbstractField,
+ Super.extendedAbstractField=],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: NamedMixin.mixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInConcreteField,
+ Mixin.mixedInConcreteField=],
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: NamedMixin.mixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: NamedMixin.mixedInConcreteField=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInConcreteField,
+ Mixin.mixedInConcreteField=],
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: NamedMixin.mixedInConcreteField=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Mixin.extendedConcreteMixedInConcreteField=,
+ Super.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField=],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteField=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Mixin.extendedConcreteMixedInConcreteField=,
+ Super.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField=],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteField=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField=,
+ Super.extendedConcreteMixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Mixin.extendedAbstractMixedInConcreteField=,
+ Super.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField=],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteField=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Mixin.extendedAbstractMixedInConcreteField=,
+ Super.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField=],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteField=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField=,
+ Super.extendedAbstractMixedInConcreteField=],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField=]
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractField=#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractField=],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField=,
+ Super.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField=]
+*/
+
+/*member: NamedMixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: NamedMixin.extendedConcreteField=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.mixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInAbstractField,
+ Mixin.mixedInAbstractField=]
+*/
+/*member: NamedMixin.mixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.mixedInAbstractField,
+ Mixin.mixedInAbstractField=]
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField=]
+*/
+/*member: NamedMixin.extendedAbstractMixedInAbstractField=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedAbstractMixedInAbstractField=,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField=]
+*/
+
+/*member: NamedMixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: NamedMixin.extendedAbstractField=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_final_field.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_final_field.dart
new file mode 100644
index 0000000..b1e0208
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_final_field.dart
@@ -0,0 +1,413 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractField,
+ Super.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInConcreteField],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteField = 0;
+
+ /*member: Super.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractField;
+
+ /*member: Super.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteMixedInConcreteField = 0;
+
+ /*member: Super.extendedAbstractMixedInConcreteField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractMixedInConcreteField;
+
+ /*member: Super.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ final int extendedConcreteMixedInAbstractField = 0;
+
+ /*member: Super.extendedAbstractMixedInAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractMixedInAbstractField;
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Mixin.extendedConcreteMixedInAbstractField,
+ Mixin.mixedInAbstractField],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final int mixedInConcreteField = 0;
+
+ /*member: Mixin.mixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract final int mixedInAbstractField;
+
+ /*member: Mixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final int extendedConcreteMixedInConcreteField = 0;
+
+ /*member: Mixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ final int extendedAbstractMixedInConcreteField = 0;
+
+ /*member: Mixin.extendedConcreteMixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract final int extendedConcreteMixedInAbstractField;
+
+ /*member: Mixin.extendedAbstractMixedInAbstractField#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ abstract final int extendedAbstractMixedInAbstractField;
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractField]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractField,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField,
+ _ClassMixin&Super&Mixin.mixedInAbstractField],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.mixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField
+ */
+ /*member: ClassMixin.mixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteField
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteField
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteField
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractField
+ */
+
+ /*member: ClassMixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.mixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractField
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractField#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractField
+ */
+
+ /*member: ClassMixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractField,
+ NamedMixin.mixedInAbstractField,
+ Super.extendedAbstractField],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: NamedMixin.mixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInConcreteField],
+ stubTarget=Mixin.mixedInConcreteField
+*/
+/*member: NamedMixin.mixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteField,
+ Super.extendedConcreteMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInConcreteField#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteField#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteField,
+ Super.extendedAbstractMixedInConcreteField],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteField
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInAbstractField#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractField
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractField,
+ Super.extendedConcreteMixedInAbstractField]
+*/
+
+/*member: NamedMixin.extendedConcreteField#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.mixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractField]
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInAbstractField#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractField,
+ Super.extendedAbstractMixedInAbstractField]
+*/
+
+/*member: NamedMixin.extendedAbstractField#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_getter.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_getter.dart
new file mode 100644
index 0000000..e4edc5c
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_getter.dart
@@ -0,0 +1,412 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInConcreteGetter],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteGetter => 0;
+
+ /*member: Super.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractGetter;
+
+ /*member: Super.extendedConcreteMixedInConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteMixedInConcreteGetter => 0;
+
+ /*member: Super.extendedAbstractMixedInConcreteGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractMixedInConcreteGetter;
+
+ /*member: Super.extendedConcreteMixedInAbstractGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedConcreteMixedInAbstractGetter => 0;
+
+ /*member: Super.extendedAbstractMixedInAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ int get extendedAbstractMixedInAbstractGetter;
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Mixin.mixedInAbstractGetter],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteGetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get mixedInConcreteGetter => 0;
+
+ /*member: Mixin.mixedInAbstractGetter#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get mixedInAbstractGetter;
+
+ /*member: Mixin.extendedConcreteMixedInConcreteGetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get extendedConcreteMixedInConcreteGetter => 0;
+
+ /*member: Mixin.extendedAbstractMixedInConcreteGetter#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get extendedAbstractMixedInConcreteGetter => 0;
+
+ /*member: Mixin.extendedConcreteMixedInAbstractGetter#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get extendedConcreteMixedInAbstractGetter;
+
+ /*member: Mixin.extendedAbstractMixedInAbstractGetter#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ int get extendedAbstractMixedInAbstractGetter;
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteGetter#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteGetter
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteGetter
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteGetter#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteGetter
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteGetter,
+ Super.extendedConcreteMixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteGetter
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteGetter#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteGetter
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteGetter,
+ Super.extendedAbstractMixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteGetter
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractGetter#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractGetter
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Super.extendedConcreteMixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Super.extendedConcreteMixedInAbstractGetter]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractGetter]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractGetter,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractGetter,
+ _ClassMixin&Super&Mixin.mixedInAbstractGetter],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.mixedInConcreteGetter#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteGetter
+ */
+ /*member: ClassMixin.mixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteGetter
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInConcreteGetter#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteGetter
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteGetter,
+ Super.extendedConcreteMixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteGetter
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteGetter#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteGetter
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteGetter,
+ Super.extendedAbstractMixedInConcreteGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteGetter
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractGetter#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractGetter],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractGetter
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Super.extendedConcreteMixedInAbstractGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractGetter
+ */
+
+ /*member: ClassMixin.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.mixedInAbstractGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractGetter
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractGetter#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractGetter
+ */
+
+ /*member: ClassMixin.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractGetter,
+ NamedMixin.mixedInAbstractGetter,
+ Super.extendedAbstractGetter],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: NamedMixin.mixedInConcreteGetter#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteGetter],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInConcreteGetter],
+ stubTarget=Mixin.mixedInConcreteGetter
+*/
+/*member: NamedMixin.mixedInConcreteGetter#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteGetter
+*/
+/*member: NamedMixin.mixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractGetter]
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInConcreteGetter#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteGetter,
+ Super.extendedConcreteMixedInConcreteGetter],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteGetter
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteGetter#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteGetter,
+ Super.extendedConcreteMixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteGetter
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInConcreteGetter#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteGetter,
+ Super.extendedAbstractMixedInConcreteGetter],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteGetter
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteGetter#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteGetter,
+ Super.extendedAbstractMixedInConcreteGetter],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteGetter
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInAbstractGetter#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractGetter],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractGetter
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Super.extendedConcreteMixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractGetter,
+ Super.extendedConcreteMixedInAbstractGetter]
+*/
+
+/*member: NamedMixin.extendedConcreteGetter#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInAbstractGetter#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractGetter,
+ Super.extendedAbstractMixedInAbstractGetter]
+*/
+
+/*member: NamedMixin.extendedAbstractGetter#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_method.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_method.dart
new file mode 100644
index 0000000..9e80172
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_method.dart
@@ -0,0 +1,403 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod() {}
+
+ /*member: Super.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod();
+
+ /*member: Super.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInConcreteMethod() {}
+
+ /*member: Super.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInConcreteMethod();
+
+ /*member: Super.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInAbstractMethod() {}
+
+ /*member: Super.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInAbstractMethod();
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Mixin.mixedInAbstractMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void mixedInConcreteMethod() {}
+
+ /*member: Mixin.mixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void mixedInAbstractMethod();
+
+ /*member: Mixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInConcreteMethod() {}
+
+ /*member: Mixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInConcreteMethod() {}
+
+ /*member: Mixin.extendedConcreteMixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInAbstractMethod();
+
+ /*member: Mixin.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInAbstractMethod();
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractMethod,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod,
+ _ClassMixin&Super&Mixin.mixedInAbstractMethod],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+/*member: ClassMixin.mixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteMethod
+*/
+/*member: ClassMixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: ClassMixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.mixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.mixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractMethod,
+ NamedMixin.mixedInAbstractMethod,
+ Super.extendedAbstractMethod],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: NamedMixin.mixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractMethod]
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod]
+*/
+/*member: NamedMixin.extendedAbstractMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod]
+*/
+/*member: NamedMixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+*/
+/*member: NamedMixin.mixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInConcreteMethod],
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+/*member: NamedMixin.mixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+class NamedMixin = Super with Mixin;
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_override.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_override.dart
new file mode 100644
index 0000000..2f8edef
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_override.dart
@@ -0,0 +1,411 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMethod() {}
+
+ /*member: Super.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMethod();
+
+ /*member: Super.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInConcreteMethod() {}
+
+ /*member: Super.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInConcreteMethod();
+
+ /*member: Super.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInAbstractMethod() {}
+
+ /*member: Super.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInAbstractMethod();
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Mixin.mixedInAbstractMethod],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void mixedInConcreteMethod(int i) {}
+
+ /*member: Mixin.mixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void mixedInAbstractMethod(int i);
+
+ /*member: Mixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInConcreteMethod(int i) {}
+
+ /*member: Mixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInConcreteMethod(int i) {}
+
+ /*member: Mixin.extendedConcreteMixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedConcreteMixedInAbstractMethod(int i);
+
+ /*member: Mixin.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void extendedAbstractMixedInAbstractMethod(int i);
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractMethod,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod,
+ _ClassMixin&Super&Mixin.mixedInAbstractMethod],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+/*member: ClassMixin.mixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteMethod
+*/
+/*member: ClassMixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: ClassMixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.mixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractMethod#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: _ClassMixin&Super&Mixin.mixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+ */
+
+ /*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.mixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteMethod
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteMethod
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractMethod,
+ NamedMixin.mixedInAbstractMethod,
+ Super.extendedAbstractMethod],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInAbstractMethod#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractMethod
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractMethod,
+ Super.extendedConcreteMixedInAbstractMethod]
+*/
+
+/*member: NamedMixin.extendedConcreteMethod#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.mixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractMethod]
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInAbstractMethod#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractMethod,
+ Super.extendedAbstractMixedInAbstractMethod]
+*/
+
+/*member: NamedMixin.extendedAbstractMethod#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.mixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInConcreteMethod],
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInConcreteMethod#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+/*member: NamedMixin.mixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteMethod,
+ Super.extendedConcreteMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteMethod
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteMethod#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteMethod,
+ Super.extendedAbstractMixedInConcreteMethod],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteMethod
+*/
+class NamedMixin = Super with Mixin;
diff --git a/pkg/front_end/test/class_hierarchy/data/mix_in_setter.dart b/pkg/front_end/test/class_hierarchy/data/mix_in_setter.dart
new file mode 100644
index 0000000..758f3dd
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/mix_in_setter.dart
@@ -0,0 +1,413 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ abstractMembers=[
+ Super.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInConcreteSetter=,
+ Super.extendedAbstractSetter=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteSetter(int i) {}
+
+ /*member: Super.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractSetter(int i);
+
+ /*member: Super.extendedConcreteMixedInConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteMixedInConcreteSetter(int i) {}
+
+ /*member: Super.extendedAbstractMixedInConcreteSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractMixedInConcreteSetter(int i);
+
+ /*member: Super.extendedConcreteMixedInAbstractSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedConcreteMixedInAbstractSetter(int i) {}
+
+ /*member: Super.extendedAbstractMixedInAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+/*class: Mixin:
+ abstractMembers=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Mixin.mixedInAbstractSetter=],
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Mixin {
+ /*member: Mixin.mixedInConcreteSetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInConcreteSetter(int i) {}
+
+ /*member: Mixin.mixedInAbstractSetter=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set mixedInAbstractSetter(int i);
+
+ /*member: Mixin.extendedConcreteMixedInConcreteSetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedConcreteMixedInConcreteSetter(int i) {}
+
+ /*member: Mixin.extendedAbstractMixedInConcreteSetter=#cls:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedAbstractMixedInConcreteSetter(int i) {}
+
+ /*member: Mixin.extendedConcreteMixedInAbstractSetter=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedConcreteMixedInAbstractSetter(int i);
+
+ /*member: Mixin.extendedAbstractMixedInAbstractSetter=#int:
+ classBuilder=Mixin,
+ isSourceDeclaration
+ */
+ void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+/*class: _ClassMixin&Super&Mixin:
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteSetter=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteSetter=
+*/
+/*member: _ClassMixin&Super&Mixin.mixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteSetter=
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteSetter=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteSetter=
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteSetter=,
+ Super.extendedConcreteMixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteSetter=
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteSetter=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteSetter=
+*/
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteSetter=,
+ Super.extendedAbstractMixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteSetter=
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractSetter=#cls:
+ classBuilder=_ClassMixin&Super&Mixin,
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractSetter=
+*/
+/*member: _ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Super.extendedConcreteMixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Super.extendedConcreteMixedInAbstractSetter=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: _ClassMixin&Super&Mixin.mixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractSetter=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInAbstractSetter=]
+*/
+
+/*member: _ClassMixin&Super&Mixin.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*class: ClassMixin:
+ abstractMembers=[
+ Super.extendedAbstractSetter=,
+ _ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractSetter=,
+ _ClassMixin&Super&Mixin.mixedInAbstractSetter=],
+ interfaces=[Mixin],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ Super,
+ _ClassMixin&Super&Mixin]
+*/
+class ClassMixin extends Super with Mixin {
+ /*member: ClassMixin.mixedInConcreteSetter=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.mixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteSetter=
+ */
+ /*member: ClassMixin.mixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInConcreteSetter=
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInConcreteSetter=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteSetter=
+ */
+ /*member: ClassMixin.extendedConcreteMixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteSetter=,
+ Super.extendedConcreteMixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInConcreteSetter=
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInConcreteSetter=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteSetter=
+ */
+ /*member: ClassMixin.extendedAbstractMixedInConcreteSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteSetter=,
+ Super.extendedAbstractMixedInConcreteSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInConcreteSetter=
+ */
+
+ /*member: ClassMixin.extendedConcreteMixedInAbstractSetter=#cls:
+ classBuilder=ClassMixin,
+ inherited-implements=[_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractSetter=
+ */
+ /*member: ClassMixin.extendedConcreteMixedInAbstractSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Super.extendedConcreteMixedInAbstractSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedConcreteMixedInAbstractSetter=
+ */
+
+ /*member: ClassMixin.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+
+ /*member: ClassMixin.mixedInAbstractSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[Mixin.mixedInAbstractSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.mixedInAbstractSetter=
+ */
+
+ /*member: ClassMixin.extendedAbstractMixedInAbstractSetter=#int:
+ classBuilder=_ClassMixin&Super&Mixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInAbstractSetter=],
+ isSynthesized,
+ member=_ClassMixin&Super&Mixin.extendedAbstractMixedInAbstractSetter=
+ */
+
+ /*member: ClassMixin.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+}
+
+/*class: NamedMixin:
+ abstractMembers=[
+ NamedMixin.extendedAbstractMixedInAbstractSetter=,
+ NamedMixin.mixedInAbstractSetter=,
+ Super.extendedAbstractSetter=],
+ interfaces=[Mixin],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+
+/*member: NamedMixin.mixedInConcreteSetter=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.mixedInConcreteSetter=],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInConcreteSetter=],
+ stubTarget=Mixin.mixedInConcreteSetter=
+*/
+/*member: NamedMixin.mixedInConcreteSetter=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[Mixin.mixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.mixedInConcreteSetter=
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInConcreteSetter=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInConcreteSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInConcreteSetter=,
+ Super.extendedConcreteMixedInConcreteSetter=],
+ stubTarget=Mixin.extendedConcreteMixedInConcreteSetter=
+*/
+/*member: NamedMixin.extendedConcreteMixedInConcreteSetter=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedConcreteMixedInConcreteSetter=,
+ Super.extendedConcreteMixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedConcreteMixedInConcreteSetter=
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInConcreteSetter=#cls:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ inherited-implements=[NamedMixin.extendedAbstractMixedInConcreteSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInConcreteSetter=,
+ Super.extendedAbstractMixedInConcreteSetter=],
+ stubTarget=Mixin.extendedAbstractMixedInConcreteSetter=
+*/
+/*member: NamedMixin.extendedAbstractMixedInConcreteSetter=#int:
+ classBuilder=NamedMixin,
+ concreteMixinStub,
+ declarations=[
+ Mixin.extendedAbstractMixedInConcreteSetter=,
+ Super.extendedAbstractMixedInConcreteSetter=],
+ isSynthesized,
+ stubTarget=Mixin.extendedAbstractMixedInConcreteSetter=
+*/
+
+/*member: NamedMixin.extendedConcreteMixedInAbstractSetter=#cls:
+ classBuilder=NamedMixin,
+ inherited-implements=[NamedMixin.extendedConcreteMixedInAbstractSetter=],
+ isSynthesized,
+ member=Super.extendedConcreteMixedInAbstractSetter=
+*/
+/*member: NamedMixin.extendedConcreteMixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Super.extendedConcreteMixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedConcreteMixedInAbstractSetter=,
+ Super.extendedConcreteMixedInAbstractSetter=]
+*/
+
+/*member: NamedMixin.extendedConcreteSetter=#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+
+/*member: NamedMixin.mixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[Mixin.mixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[Mixin.mixedInAbstractSetter=]
+*/
+
+/*member: NamedMixin.extendedAbstractMixedInAbstractSetter=#int:
+ abstractMixinStub,
+ classBuilder=NamedMixin,
+ declarations=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInAbstractSetter=],
+ isSynthesized,
+ mixin-overrides=[
+ Mixin.extendedAbstractMixedInAbstractSetter=,
+ Super.extendedAbstractMixedInAbstractSetter=]
+*/
+
+/*member: NamedMixin.extendedAbstractSetter=#int:
+ classBuilder=Super,
+ isSourceDeclaration
+*/
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/no_such_method.dart b/pkg/front_end/test/class_hierarchy/data/no_such_method.dart
new file mode 100644
index 0000000..c29b312
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/no_such_method.dart
@@ -0,0 +1,780 @@
+// Copyright (c) 2021, 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.
+
+/*class: Interface:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+abstract class Interface {
+ /*member: Interface.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void method();
+
+ /*member: Interface.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int get getter;
+
+ /*member: Interface.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ void set setter(int value);
+
+ /*member: Interface.field#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: Interface.field=#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ int field;
+
+ /*member: Interface.finalField#cls:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ final int finalField;
+}
+
+/*class: SuperAbstract:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class SuperAbstract {
+ /*member: SuperAbstract.noSuchMethod#int:
+ classBuilder=SuperAbstract,
+ declarations=[
+ Object.noSuchMethod,
+ SuperAbstract.noSuchMethod],
+ declared-overrides=[Object.noSuchMethod],
+ isSynthesized
+ */
+ noSuchMethod(Invocation invocation);
+}
+
+/*class: FromSuperAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ SuperAbstract]
+*/
+class FromSuperAbstract extends SuperAbstract implements Interface {
+ /*member: FromSuperAbstract.noSuchMethod#int:
+ classBuilder=FromSuperAbstract,
+ declarations=[
+ Object.noSuchMethod,
+ SuperAbstract.noSuchMethod],
+ isSynthesized,
+ member=SuperAbstract.noSuchMethod
+ */
+
+ /*member: FromSuperAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromSuperAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: SuperConcrete:
+ hasNoSuchMethod,
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class SuperConcrete {
+ /*member: SuperConcrete.noSuchMethod#cls:
+ classBuilder=SuperConcrete,
+ declared-overrides=[Object.noSuchMethod],
+ isSourceDeclaration
+ */
+ @override
+ noSuchMethod(Invocation invocation) {
+ return null;
+ }
+}
+
+/*class: FromSuperConcrete:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ hasNoSuchMethod,
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ SuperConcrete]
+*/
+class FromSuperConcrete extends SuperConcrete implements Interface {
+ /*member: FromSuperConcrete.noSuchMethod#cls:
+ classBuilder=FromSuperConcrete,
+ inherited-implements=[FromSuperConcrete.noSuchMethod],
+ isSynthesized,
+ member=SuperConcrete.noSuchMethod
+ */
+ /*member: FromSuperConcrete.noSuchMethod#int:
+ classBuilder=FromSuperConcrete,
+ declarations=[
+ Object.noSuchMethod,
+ SuperConcrete.noSuchMethod],
+ isSynthesized,
+ member=SuperConcrete.noSuchMethod
+ */
+
+ /*member: FromSuperConcrete.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromSuperConcrete.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcrete.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcrete.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcrete.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcrete.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: FromSuperConcreteAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ hasNoSuchMethod,
+ interfaces=[
+ Interface,
+ SuperAbstract],
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ SuperConcrete]
+*/
+class FromSuperConcreteAbstract extends SuperConcrete
+ implements SuperAbstract, Interface {
+ /*member: FromSuperConcreteAbstract.noSuchMethod#cls:
+ classBuilder=FromSuperConcreteAbstract,
+ inherited-implements=[FromSuperConcreteAbstract.noSuchMethod],
+ isSynthesized,
+ member=SuperConcrete.noSuchMethod
+ */
+ /*member: FromSuperConcreteAbstract.noSuchMethod#int:
+ classBuilder=FromSuperConcreteAbstract,
+ declarations=[
+ Object.noSuchMethod,
+ SuperAbstract.noSuchMethod,
+ SuperConcrete.noSuchMethod],
+ isSynthesized,
+ member=SuperConcrete.noSuchMethod
+ */
+
+ /*member: FromSuperConcreteAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromSuperConcreteAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcreteAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcreteAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcreteAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromSuperConcreteAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: MixinAbstract:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class MixinAbstract {
+ /*member: MixinAbstract.noSuchMethod#int:
+ classBuilder=MixinAbstract,
+ declarations=[
+ MixinAbstract.noSuchMethod,
+ Object.noSuchMethod],
+ declared-overrides=[Object.noSuchMethod],
+ isSynthesized
+ */
+ noSuchMethod(Invocation invocation);
+}
+
+/*class: FromMixinAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[
+ MixinAbstract,
+ Object]
+*/
+class FromMixinAbstract extends MixinAbstract implements Interface {
+ /*member: FromMixinAbstract.noSuchMethod#int:
+ classBuilder=FromMixinAbstract,
+ declarations=[
+ MixinAbstract.noSuchMethod,
+ Object.noSuchMethod],
+ isSynthesized,
+ member=MixinAbstract.noSuchMethod
+ */
+
+ /*member: FromMixinAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromMixinAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: MixinConcrete:
+ hasNoSuchMethod,
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class MixinConcrete {
+ /*member: MixinConcrete.noSuchMethod#cls:
+ classBuilder=MixinConcrete,
+ declared-overrides=[Object.noSuchMethod],
+ isSourceDeclaration
+ */
+ @override
+ noSuchMethod(Invocation invocation) {
+ return null;
+ }
+}
+
+/*class: _FromMixinConcrete&Object&MixinConcrete:
+ hasNoSuchMethod,
+ interfaces=[MixinConcrete],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+
+/*member: _FromMixinConcrete&Object&MixinConcrete.noSuchMethod#cls:
+ classBuilder=_FromMixinConcrete&Object&MixinConcrete,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=MixinConcrete.noSuchMethod
+*/
+/*member: _FromMixinConcrete&Object&MixinConcrete.noSuchMethod#int:
+ classBuilder=_FromMixinConcrete&Object&MixinConcrete,
+ concreteMixinStub,
+ declarations=[
+ MixinConcrete.noSuchMethod,
+ Object.noSuchMethod],
+ isSynthesized,
+ stubTarget=MixinConcrete.noSuchMethod
+*/
+
+/*class: FromMixinConcrete:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ hasNoSuchMethod,
+ interfaces=[
+ Interface,
+ MixinConcrete],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ _FromMixinConcrete&Object&MixinConcrete]
+*/
+class FromMixinConcrete with MixinConcrete implements Interface {
+ /*member: FromMixinConcrete.noSuchMethod#cls:
+ classBuilder=FromMixinConcrete,
+ inherited-implements=[FromMixinConcrete.noSuchMethod],
+ isSynthesized,
+ member=_FromMixinConcrete&Object&MixinConcrete.noSuchMethod
+ */
+ /*member: FromMixinConcrete.noSuchMethod#int:
+ classBuilder=FromMixinConcrete,
+ declarations=[
+ Object.noSuchMethod,
+ _FromMixinConcrete&Object&MixinConcrete.noSuchMethod],
+ isSynthesized,
+ member=_FromMixinConcrete&Object&MixinConcrete.noSuchMethod
+ */
+
+ /*member: FromMixinConcrete.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromMixinConcrete.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcrete.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcrete.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcrete.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcrete.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: _FromMixinConcreteAbstract&Object&MixinConcrete:
+ hasNoSuchMethod,
+ interfaces=[MixinConcrete],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+
+/*member: _FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod#cls:
+ classBuilder=_FromMixinConcreteAbstract&Object&MixinConcrete,
+ concreteMixinStub,
+ isSynthesized,
+ stubTarget=MixinConcrete.noSuchMethod
+*/
+/*member: _FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod#int:
+ classBuilder=_FromMixinConcreteAbstract&Object&MixinConcrete,
+ concreteMixinStub,
+ declarations=[
+ MixinConcrete.noSuchMethod,
+ Object.noSuchMethod],
+ isSynthesized,
+ stubTarget=MixinConcrete.noSuchMethod
+*/
+
+/*class: _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract:
+ hasNoSuchMethod,
+ interfaces=[
+ MixinAbstract,
+ MixinConcrete],
+ maxInheritancePath=3,
+ superclasses=[
+ Object,
+ _FromMixinConcreteAbstract&Object&MixinConcrete]
+*/
+
+/*member: _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract.noSuchMethod#cls:
+ classBuilder=_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract,
+ isSynthesized,
+ member=_FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod
+*/
+/*member: _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract.noSuchMethod#int:
+ abstractMixinStub,
+ classBuilder=_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract,
+ declarations=[
+ MixinAbstract.noSuchMethod,
+ MixinAbstract.noSuchMethod,
+ _FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod],
+ isSynthesized,
+ mixin-overrides=[
+ MixinAbstract.noSuchMethod,
+ _FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod]
+*/
+
+/*class: FromMixinConcreteAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ hasNoSuchMethod,
+ interfaces=[
+ Interface,
+ MixinAbstract,
+ MixinConcrete],
+ maxInheritancePath=4,
+ superclasses=[
+ Object,
+ _FromMixinConcreteAbstract&Object&MixinConcrete,
+ _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract]
+*/
+class FromMixinConcreteAbstract
+ with MixinConcrete, MixinAbstract
+ implements Interface {
+ /*member: FromMixinConcreteAbstract.noSuchMethod#cls:
+ classBuilder=FromMixinConcreteAbstract,
+ inherited-implements=[FromMixinConcreteAbstract.noSuchMethod],
+ isSynthesized,
+ member=_FromMixinConcreteAbstract&Object&MixinConcrete.noSuchMethod
+ */
+ /*member: FromMixinConcreteAbstract.noSuchMethod#int:
+ classBuilder=FromMixinConcreteAbstract,
+ declarations=[
+ Object.noSuchMethod,
+ _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract.noSuchMethod],
+ isSynthesized,
+ member=_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract.noSuchMethod
+ */
+
+ /*member: FromMixinConcreteAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromMixinConcreteAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcreteAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcreteAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcreteAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromMixinConcreteAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: InterfaceAbstract:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class InterfaceAbstract {
+ /*member: InterfaceAbstract.noSuchMethod#int:
+ classBuilder=InterfaceAbstract,
+ declarations=[
+ InterfaceAbstract.noSuchMethod,
+ Object.noSuchMethod],
+ declared-overrides=[Object.noSuchMethod],
+ isSynthesized
+ */
+ noSuchMethod(Invocation invocation);
+}
+
+/*class: FromInterfaceAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ interfaces=[
+ Interface,
+ InterfaceAbstract],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class FromInterfaceAbstract implements InterfaceAbstract, Interface {
+ /*member: FromInterfaceAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromInterfaceAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: InterfaceConcrete:
+ hasNoSuchMethod,
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class InterfaceConcrete {
+ /*member: InterfaceConcrete.noSuchMethod#cls:
+ classBuilder=InterfaceConcrete,
+ declared-overrides=[Object.noSuchMethod],
+ isSourceDeclaration
+ */
+ @override
+ noSuchMethod(Invocation invocation) {
+ return null;
+ }
+}
+
+/*class: FromInterfaceConcrete:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ interfaces=[
+ Interface,
+ InterfaceConcrete],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class FromInterfaceConcrete implements InterfaceConcrete, Interface {
+ /*member: FromInterfaceConcrete.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: FromInterfaceConcrete.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceConcrete.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceConcrete.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceConcrete.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: FromInterfaceConcrete.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+}
+
+/*class: DeclaredAbstract:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class DeclaredAbstract implements Interface {
+ /*member: DeclaredAbstract.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: DeclaredAbstract.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredAbstract.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredAbstract.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredAbstract.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredAbstract.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredAbstract.noSuchMethod#int:
+ classBuilder=DeclaredAbstract,
+ declarations=[
+ DeclaredAbstract.noSuchMethod,
+ Object.noSuchMethod],
+ declared-overrides=[Object.noSuchMethod],
+ isSynthesized
+ */
+ noSuchMethod(Invocation invocation);
+}
+
+/*class: DeclaredConcrete:
+ abstractMembers=[
+ Interface.field,
+ Interface.field=,
+ Interface.finalField,
+ Interface.getter,
+ Interface.method,
+ Interface.setter=],
+ hasNoSuchMethod,
+ interfaces=[Interface],
+ maxInheritancePath=2,
+ superclasses=[Object]
+*/
+class DeclaredConcrete implements Interface {
+ /*member: DeclaredConcrete.field#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+ /*member: DeclaredConcrete.field=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredConcrete.finalField#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredConcrete.method#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredConcrete.getter#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredConcrete.setter=#int:
+ classBuilder=Interface,
+ isSourceDeclaration
+ */
+
+ /*member: DeclaredConcrete.noSuchMethod#cls:
+ classBuilder=DeclaredConcrete,
+ declared-overrides=[Object.noSuchMethod],
+ isSourceDeclaration
+ */
+ @override
+ noSuchMethod(Invocation invocation) {
+ return null;
+ }
+}
+
+main() {}
diff --git a/pkg/front_end/test/class_hierarchy/data/override.dart b/pkg/front_end/test/class_hierarchy/data/override.dart
new file mode 100644
index 0000000..a3e687a
--- /dev/null
+++ b/pkg/front_end/test/class_hierarchy/data/override.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2021, 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.
+
+/*class: Super:
+ maxInheritancePath=1,
+ superclasses=[Object]
+*/
+class Super {
+ /*member: Super.extendedMethod1#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedMethod1(int i) {}
+
+ /*member: Super.extendedMethod2#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void extendedMethod2(num i) {}
+
+ /*member: Super.overriddenMethod1#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void overriddenMethod1(int i) {}
+
+ /*member: Super.overriddenMethod2#cls:
+ classBuilder=Super,
+ isSourceDeclaration
+ */
+ void overriddenMethod2(num n) {}
+}
+
+/*class: Class:
+ maxInheritancePath=2,
+ superclasses=[
+ Object,
+ Super]
+*/
+/*member: Class.extendedMethod1#cls:
+ classBuilder=Class,
+ inherited-implements=[Class.extendedMethod1],
+ isSynthesized,
+ member=Super.extendedMethod1
+*/
+/*member: Class.extendedMethod2#cls:
+ classBuilder=Class,
+ inherited-implements=[Class.extendedMethod2],
+ isSynthesized,
+ member=Super.extendedMethod2
+*/
+class Class extends Super {
+ /*member: Class.extendedMethod1#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedMethod1,
+ Super.extendedMethod1],
+ declared-overrides=[Super.extendedMethod1],
+ isSynthesized
+ */
+ void extendedMethod1(num n);
+
+ /*member: Class.extendedMethod2#int:
+ classBuilder=Class,
+ declarations=[
+ Class.extendedMethod2,
+ Super.extendedMethod2],
+ declared-overrides=[Super.extendedMethod2],
+ isSynthesized
+ */
+ void extendedMethod2(int i);
+
+ /*member: Class.overriddenMethod1#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.overriddenMethod1],
+ isSourceDeclaration
+ */
+ void overriddenMethod1(num n) {}
+
+ /*member: Class.overriddenMethod2#cls:
+ classBuilder=Class,
+ declared-overrides=[Super.overriddenMethod2],
+ isSourceDeclaration
+ */
+ void overriddenMethod2(int n) {}
+}
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 1324c7e..572493d 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -21,6 +21,7 @@
acov
across
activated
+adequate
adi
affecting
afterwards
@@ -377,6 +378,7 @@
eof
eq
equation
+erased
erasure
es
establish
@@ -464,6 +466,8 @@
gardening
gen
generation
+getable
+getables
gets
getter1a
getter1b
@@ -1004,6 +1008,7 @@
rs
runnable
s
+sanitizing
saw
say
sb
@@ -1027,6 +1032,8 @@
server
service
session
+setable
+setables
setaf
sh
sha1hash
@@ -1208,6 +1215,7 @@
trees
tricky
trips
+trivially
ts
tty
tuple
@@ -1246,7 +1254,9 @@
unequal
unescape
unexact
+unexpectedly
unfinalized
+unfold
unfolds
unfuture
unfutured
@@ -1293,6 +1303,7 @@
util
utils
v
+validly
variable's
variances
variant
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
index c556119..d4b2ca4 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.outline.expect
@@ -12,6 +12,26 @@
// var interfaceMethod1;
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
+// abstract class B extends A {
+// ^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
+// class MyClass extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
@@ -50,6 +70,36 @@
// void interfaceMethod3() {}
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
+// class MyMock1 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
+// class MyMock2 extends MyMock1 {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
+// class MyMock3 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
diff --git a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
index 9a2d8e1..a798711 100644
--- a/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_members.dart.strong.expect
@@ -12,6 +12,26 @@
// var interfaceMethod1;
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general/abstract_members.dart:27:16: Error: Can't inherit members that conflict with each other.
+// abstract class B extends A {
+// ^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: Can't inherit members that conflict with each other.
+// class MyClass extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general/abstract_members.dart:33:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
@@ -50,6 +70,36 @@
// void interfaceMethod3() {}
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general/abstract_members.dart:42:7: Error: Can't inherit members that conflict with each other.
+// class MyMock1 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:48:7: Error: Can't inherit members that conflict with each other.
+// class MyMock2 extends MyMock1 {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: Can't inherit members that conflict with each other.
+// class MyMock3 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:6:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/abstract_members.dart:12:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general/abstract_members.dart:54:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
index 2f6b693..d789cb9 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.outline.expect
@@ -25,12 +25,12 @@
// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:23:7: Error: The implementation of 'foo' in the non-abstract class 'F' does not conform to its interface.
// class F extends E {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'E.foo'.
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'I.foo'.
// void foo() {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:21:16: Context: This is the overridden method ('foo').
-// abstract class E extends A implements I {}
-// ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:10:8: Context: This is the overridden method ('foo').
+// void foo([a]);
+// ^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
index 0529482..90c7a87 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.expect
@@ -25,12 +25,12 @@
// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:23:7: Error: The implementation of 'foo' in the non-abstract class 'F' does not conform to its interface.
// class F extends E {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'E.foo'.
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'I.foo'.
// void foo() {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:21:16: Context: This is the overridden method ('foo').
-// abstract class E extends A implements I {}
-// ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:10:8: Context: This is the overridden method ('foo').
+// void foo([a]);
+// ^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
index 0529482..90c7a87 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete.dart.strong.transformed.expect
@@ -25,12 +25,12 @@
// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:23:7: Error: The implementation of 'foo' in the non-abstract class 'F' does not conform to its interface.
// class F extends E {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'E.foo'.
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:6:8: Context: The method 'A.foo' has fewer positional arguments than those of overridden method 'I.foo'.
// void foo() {}
// ^
-// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:21:16: Context: This is the overridden method ('foo').
-// abstract class E extends A implements I {}
-// ^
+// pkg/front_end/testcases/general/abstract_overrides_concrete.dart:10:8: Context: This is the overridden method ('foo').
+// void foo([a]);
+// ^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
index 54ce84a..c9348b9 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.outline.expect
@@ -7,6 +7,7 @@
;
method foo() → self::A*
;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -15,7 +16,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class B extends self::A {
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
index 732160e..c52e1a4 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.expect
@@ -8,6 +8,7 @@
;
method foo() → self::A*
return null;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -16,7 +17,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class B extends self::A {
diff --git a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
index 732160e..c52e1a4 100644
--- a/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_overrides_concrete_with_no_such_method.dart.strong.transformed.expect
@@ -8,6 +8,7 @@
;
method foo() → self::A*
return null;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -16,7 +17,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class B extends self::A {
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.outline.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.outline.expect
index 43701f7..63c6cb2 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.outline.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.outline.expect
@@ -385,141 +385,169 @@
synthetic constructor •() → self::_Class&Super&M0*
: super self::Super::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M0::property
}
abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1*
: super self::_Class&Super&M0::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M1::property
}
abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2*
: super self::_Class&Super&M0&M1::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M2::property
}
abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
: super self::_Class&Super&M0&M1&M2::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M3::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
: super self::_Class&Super&M0&M1&M2&M3::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M4::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
: super self::_Class&Super&M0&M1&M2&M3&M4::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M5::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M6::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M7::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M8::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M9::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M10::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M11::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M12::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M13::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M14::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M15::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M16::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M17::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M18::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M19::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M20::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M21::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M22::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M23::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M24::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M25::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M26::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M27::property
}
class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
synthetic constructor •() → self::Class*
diff --git a/pkg/front_end/testcases/general/build_issue_2688.dart.strong.expect b/pkg/front_end/testcases/general/build_issue_2688.dart.strong.expect
index eee4f5a..226f3df 100644
--- a/pkg/front_end/testcases/general/build_issue_2688.dart.strong.expect
+++ b/pkg/front_end/testcases/general/build_issue_2688.dart.strong.expect
@@ -386,141 +386,169 @@
synthetic constructor •() → self::_Class&Super&M0*
: super self::Super::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M0::property
}
abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1*
: super self::_Class&Super&M0::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M1::property
}
abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2*
: super self::_Class&Super&M0&M1::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M2::property
}
abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3*
: super self::_Class&Super&M0&M1&M2::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M3::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4*
: super self::_Class&Super&M0&M1&M2&M3::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M4::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5*
: super self::_Class&Super&M0&M1&M2&M3&M4::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M5::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M6::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M7::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M8::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M9::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M10::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M11::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M12::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M13::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M14::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M15::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M16::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M17::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M18::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M19::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M20::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M21::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M22::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M23::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M24::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M25::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M26::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27*
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
;
+ abstract mixin-stub get property() → core::int*; -> self::M27::property
}
class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
synthetic constructor •() → self::Class*
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
index 587242a..597b9c0 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.outline.expect
@@ -58,6 +58,20 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+// int get property5; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+// String property5;
+// ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+// String get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
// Change to a subtype of 'String'.
// int get property5; // error
@@ -66,13 +80,6 @@
// String property5;
// ^
//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
-// int get property5; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
-// String property5;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// String get property6; // error
@@ -81,13 +88,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
-// String get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
index 1515fe4..3a83a52 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.strong.expect
@@ -58,6 +58,20 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
+// int get property5; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
+// String property5;
+// ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
+// String get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The return type of the method 'C2.property5' is 'int', which does not match the return type, 'String', of the overridden method, 'C1.property5'.
// Change to a subtype of 'String'.
// int get property5; // error
@@ -66,13 +80,6 @@
// String property5;
// ^
//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:92:11: Error: The type 'int' of the getter 'C2.property5' is not assignable to the type 'String' of the inherited setter 'C1.property5'.
-// int get property5; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:76:10: Context: This is the declaration of the setter 'C1.property5'.
-// String property5;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The return type of the method 'C2.property6' is 'String', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// String get property6; // error
@@ -81,13 +88,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:96:14: Error: The type 'String' of the getter 'C2.property6' is not assignable to the type 'int' of the inherited setter 'C1.property6'.
-// String get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/general/getter_vs_setter_type.dart:78:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/general/getter_vs_setter_type.dart:115:16: Error: The type 'int' of the inherited getter 'D1.property2' is not assignable to the type 'String' of the inherited setter 'D2.property2'.
// abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/general/hierarchy.dart b/pkg/front_end/testcases/general/hierarchy.dart
new file mode 100644
index 0000000..8c4f658
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2020, 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 A1 {
+ void extendedClassMember() {}
+ void extendedInterfaceMember();
+}
+
+abstract class A2 {
+ void mixedInClassMember() {}
+ void mixedInInterfaceMember();
+}
+
+abstract class A3 extends A1 with A2 {
+ void declaredClassMember() {}
+ void declaredInterfaceMember();
+}
+
+abstract class A4 = A1 with A2;
+
+abstract class A5 implements A1 {}
+
+class A6 extends A1 implements A1 {}
+
+abstract class B1 {
+ void twiceInterfaceMember() {}
+ void extendedAndImplementedMember() {}
+}
+
+abstract class B2 {
+ void twiceInterfaceMember() {}
+}
+
+abstract class B3 {
+ void extendedAndImplementedMember() {}
+}
+
+abstract class B4 extends B3 implements B1, B2 {}
+
+class B5 extends B4 {}
+
+class B6 extends B3 implements B1, B2 {}
+
+abstract class C1 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember();
+}
+
+class C2 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember() {}
+}
+
+abstract class C3 with C1 implements C2 {}
+
+class C4 extends C3 {}
+
+class C5 with C1 implements C2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.outline.expect b/pkg/front_end/testcases/general/hierarchy.dart.outline.expect
new file mode 100644
index 0000000..66c5f61
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.outline.expect
@@ -0,0 +1,320 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
+// - A1.extendedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class A6 extends A1 implements A1 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:7:8: Context: 'A1.extendedInterfaceMember' is defined here.
+// void extendedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:41:7: Error: The non-abstract class 'B5' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B5 extends B4 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:43:7: Error: The non-abstract class 'B6' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B6 extends B3 implements B1, B2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:57:7: Error: The non-abstract class 'C4' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C4 extends C3 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:59:7: Error: The non-abstract class 'C5' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C5 with C1 implements C2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object {
+ synthetic constructor •() → self::A1*
+ ;
+ method extendedClassMember() → void
+ ;
+ abstract method extendedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A2 extends core::Object {
+ synthetic constructor •() → self::A2*
+ ;
+ method mixedInClassMember() → void
+ ;
+ abstract method mixedInInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_A3&A1&A2*
+ : super self::A1::•()
+ ;
+ mixin-super-stub method mixedInClassMember() → void
+ return super.{self::A2::mixedInClassMember}();
+ abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A3 extends self::_A3&A1&A2 {
+ synthetic constructor •() → self::A3*
+ ;
+ method declaredClassMember() → void
+ ;
+ abstract method declaredInterfaceMember() → void;
+}
+abstract class A4 = self::A1 with self::A2 {
+ synthetic constructor •() → self::A4*
+ : super self::A1::•()
+ ;
+ mixin-super-stub method mixedInClassMember() → void
+ return super.{self::A2::mixedInClassMember}();
+ abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A5 extends core::Object implements self::A1 {
+ synthetic constructor •() → self::A5*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A6 extends self::A1 implements self::A1 {
+ synthetic constructor •() → self::A6*
+ ;
+}
+abstract class B1 extends core::Object {
+ synthetic constructor •() → self::B1*
+ ;
+ method twiceInterfaceMember() → void
+ ;
+ method extendedAndImplementedMember() → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B2 extends core::Object {
+ synthetic constructor •() → self::B2*
+ ;
+ method twiceInterfaceMember() → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B3 extends core::Object {
+ synthetic constructor •() → self::B3*
+ ;
+ method extendedAndImplementedMember() → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B4 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B4*
+ ;
+}
+class B5 extends self::B4 {
+ synthetic constructor •() → self::B5*
+ ;
+}
+class B6 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B6*
+ ;
+}
+abstract class C1 extends core::Object {
+ synthetic constructor •() → self::C1*
+ ;
+ method mixedInAndImplementedClassMember() → void
+ ;
+ abstract method mixedInAndImplementedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+ synthetic constructor •() → self::C2*
+ ;
+ method mixedInAndImplementedClassMember() → void
+ ;
+ method mixedInAndImplementedInterfaceMember() → void
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C3&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C3&Object&C1*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method mixedInAndImplementedClassMember() → void
+ return super.{self::C1::mixedInAndImplementedClassMember}();
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C3*
+ ;
+}
+class C4 extends self::C3 {
+ synthetic constructor •() → self::C4*
+ ;
+}
+abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C5&Object&C1*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method mixedInAndImplementedClassMember() → void
+ return super.{self::C1::mixedInAndImplementedClassMember}();
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+class C5 extends self::_C5&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C5*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.strong.expect b/pkg/front_end/testcases/general/hierarchy.dart.strong.expect
new file mode 100644
index 0000000..3c3d062
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.strong.expect
@@ -0,0 +1,325 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
+// - A1.extendedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class A6 extends A1 implements A1 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:7:8: Context: 'A1.extendedInterfaceMember' is defined here.
+// void extendedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:41:7: Error: The non-abstract class 'B5' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B5 extends B4 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:43:7: Error: The non-abstract class 'B6' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B6 extends B3 implements B1, B2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:57:7: Error: The non-abstract class 'C4' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C4 extends C3 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:59:7: Error: The non-abstract class 'C5' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C5 with C1 implements C2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object {
+ synthetic constructor •() → self::A1*
+ : super core::Object::•()
+ ;
+ method extendedClassMember() → void {}
+ abstract method extendedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A2 extends core::Object {
+ synthetic constructor •() → self::A2*
+ : super core::Object::•()
+ ;
+ method mixedInClassMember() → void {}
+ abstract method mixedInInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/ {
+ synthetic constructor •() → self::_A3&A1&A2*
+ : super self::A1::•()
+ ;
+ mixin-super-stub method mixedInClassMember() → void
+ return super.{self::A2::mixedInClassMember}();
+ abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A3 extends self::_A3&A1&A2 {
+ synthetic constructor •() → self::A3*
+ : super self::_A3&A1&A2::•()
+ ;
+ method declaredClassMember() → void {}
+ abstract method declaredInterfaceMember() → void;
+}
+abstract class A4 = self::A1 with self::A2 {
+ synthetic constructor •() → self::A4*
+ : super self::A1::•()
+ ;
+ mixin-super-stub method mixedInClassMember() → void
+ return super.{self::A2::mixedInClassMember}();
+ abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
+}
+abstract class A5 extends core::Object implements self::A1 {
+ synthetic constructor •() → self::A5*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A6 extends self::A1 implements self::A1 {
+ synthetic constructor •() → self::A6*
+ : super self::A1::•()
+ ;
+}
+abstract class B1 extends core::Object {
+ synthetic constructor •() → self::B1*
+ : super core::Object::•()
+ ;
+ method twiceInterfaceMember() → void {}
+ method extendedAndImplementedMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B2 extends core::Object {
+ synthetic constructor •() → self::B2*
+ : super core::Object::•()
+ ;
+ method twiceInterfaceMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B3 extends core::Object {
+ synthetic constructor •() → self::B3*
+ : super core::Object::•()
+ ;
+ method extendedAndImplementedMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B4 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B4*
+ : super self::B3::•()
+ ;
+}
+class B5 extends self::B4 {
+ synthetic constructor •() → self::B5*
+ : super self::B4::•()
+ ;
+}
+class B6 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B6*
+ : super self::B3::•()
+ ;
+}
+abstract class C1 extends core::Object {
+ synthetic constructor •() → self::C1*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ abstract method mixedInAndImplementedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+ synthetic constructor •() → self::C2*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ method mixedInAndImplementedInterfaceMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C3&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C3&Object&C1*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method mixedInAndImplementedClassMember() → void
+ return super.{self::C1::mixedInAndImplementedClassMember}();
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C3*
+ : super self::_C3&Object&C1::•()
+ ;
+}
+class C4 extends self::C3 {
+ synthetic constructor •() → self::C4*
+ : super self::C3::•()
+ ;
+}
+abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C5&Object&C1*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method mixedInAndImplementedClassMember() → void
+ return super.{self::C1::mixedInAndImplementedClassMember}();
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
+}
+class C5 extends self::_C5&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C5*
+ : super self::_C5&Object&C1::•()
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.strong.transformed.expect b/pkg/front_end/testcases/general/hierarchy.dart.strong.transformed.expect
new file mode 100644
index 0000000..ec7dd97
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.strong.transformed.expect
@@ -0,0 +1,341 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
+// - A1.extendedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class A6 extends A1 implements A1 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:7:8: Context: 'A1.extendedInterfaceMember' is defined here.
+// void extendedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:41:7: Error: The non-abstract class 'B5' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B5 extends B4 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:43:7: Error: The non-abstract class 'B6' is missing implementations for these members:
+// - B1.twiceInterfaceMember
+// - B2.twiceInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class B6 extends B3 implements B1, B2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
+// void twiceInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:57:7: Error: The non-abstract class 'C4' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C4 extends C3 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:59:7: Error: The non-abstract class 'C5' is missing implementations for these members:
+// - C1.mixedInAndImplementedInterfaceMember
+// - C2.mixedInAndImplementedInterfaceMember
+// Try to either
+// - provide an implementation,
+// - inherit an implementation from a superclass or mixin,
+// - mark the class as abstract, or
+// - provide a 'noSuchMethod' implementation.
+//
+// class C5 with C1 implements C2 {}
+// ^^
+// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
+// void mixedInAndImplementedInterfaceMember() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
+// Try removing one of the occurrences.
+// class A6 extends A1 implements A1 {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class A1 extends core::Object {
+ synthetic constructor •() → self::A1*
+ : super core::Object::•()
+ ;
+ method extendedClassMember() → void {}
+ abstract method extendedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A2 extends core::Object {
+ synthetic constructor •() → self::A2*
+ : super core::Object::•()
+ ;
+ method mixedInClassMember() → void {}
+ abstract method mixedInInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _A3&A1&A2 extends self::A1 implements self::A2 /*isAnonymousMixin,isEliminatedMixin*/ {
+ synthetic constructor •() → self::_A3&A1&A2*
+ : super self::A1::•()
+ ;
+ method mixedInClassMember() → void {}
+ abstract method mixedInInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A3 extends self::_A3&A1&A2 {
+ synthetic constructor •() → self::A3*
+ : super self::_A3&A1&A2::•()
+ ;
+ method declaredClassMember() → void {}
+ abstract method declaredInterfaceMember() → void;
+}
+abstract class A4 extends self::A1 implements self::A2 /*isEliminatedMixin*/ {
+ synthetic constructor •() → self::A4*
+ : super self::A1::•()
+ ;
+ method mixedInClassMember() → void {}
+ abstract method mixedInInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class A5 extends core::Object implements self::A1 {
+ synthetic constructor •() → self::A5*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class A6 extends self::A1 implements self::A1 {
+ synthetic constructor •() → self::A6*
+ : super self::A1::•()
+ ;
+}
+abstract class B1 extends core::Object {
+ synthetic constructor •() → self::B1*
+ : super core::Object::•()
+ ;
+ method twiceInterfaceMember() → void {}
+ method extendedAndImplementedMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B2 extends core::Object {
+ synthetic constructor •() → self::B2*
+ : super core::Object::•()
+ ;
+ method twiceInterfaceMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B3 extends core::Object {
+ synthetic constructor •() → self::B3*
+ : super core::Object::•()
+ ;
+ method extendedAndImplementedMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class B4 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B4*
+ : super self::B3::•()
+ ;
+}
+class B5 extends self::B4 {
+ synthetic constructor •() → self::B5*
+ : super self::B4::•()
+ ;
+}
+class B6 extends self::B3 implements self::B1, self::B2 {
+ synthetic constructor •() → self::B6*
+ : super self::B3::•()
+ ;
+}
+abstract class C1 extends core::Object {
+ synthetic constructor •() → self::C1*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ abstract method mixedInAndImplementedInterfaceMember() → void;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class C2 extends core::Object {
+ synthetic constructor •() → self::C2*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ method mixedInAndImplementedInterfaceMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _C3&Object&C1 extends core::Object implements self::C1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C3&Object&C1*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract method mixedInAndImplementedInterfaceMember() → void;
+}
+abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C3*
+ : super self::_C3&Object&C1::•()
+ ;
+}
+class C4 extends self::C3 {
+ synthetic constructor •() → self::C4*
+ : super self::C3::•()
+ ;
+}
+abstract class _C5&Object&C1 extends core::Object implements self::C1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_C5&Object&C1*
+ : super core::Object::•()
+ ;
+ method mixedInAndImplementedClassMember() → void {}
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract method mixedInAndImplementedInterfaceMember() → void;
+}
+class C5 extends self::_C5&Object&C1 implements self::C2 {
+ synthetic constructor •() → self::C5*
+ : super self::_C5&Object&C1::•()
+ ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect
new file mode 100644
index 0000000..15a7cc5
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline.expect
@@ -0,0 +1,57 @@
+abstract class A1 {
+ void extendedClassMember() {}
+ void extendedInterfaceMember();
+}
+
+abstract class A2 {
+ void mixedInClassMember() {}
+ void mixedInInterfaceMember();
+}
+
+abstract class A3 extends A1 with A2 {
+ void declaredClassMember() {}
+ void declaredInterfaceMember();
+}
+
+abstract class A4 = A1 with A2;
+
+abstract class A5 implements A1 {}
+
+class A6 extends A1 implements A1 {}
+
+abstract class B1 {
+ void twiceInterfaceMember() {}
+ void extendedAndImplementedMember() {}
+}
+
+abstract class B2 {
+ void twiceInterfaceMember() {}
+}
+
+abstract class B3 {
+ void extendedAndImplementedMember() {}
+}
+
+abstract class B4 extends B3 implements B1, B2 {}
+
+class B5 extends B4 {}
+
+class B6 extends B3 implements B1, B2 {}
+
+abstract class C1 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember();
+}
+
+class C2 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember() {}
+}
+
+abstract class C3 with C1 implements C2 {}
+
+class C4 extends C3 {}
+
+class C5 with C1 implements C2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..916bcc2
--- /dev/null
+++ b/pkg/front_end/testcases/general/hierarchy.dart.textual_outline_modelled.expect
@@ -0,0 +1,57 @@
+abstract class A1 {
+ void extendedClassMember() {}
+ void extendedInterfaceMember();
+}
+
+abstract class A2 {
+ void mixedInClassMember() {}
+ void mixedInInterfaceMember();
+}
+
+abstract class A3 extends A1 with A2 {
+ void declaredClassMember() {}
+ void declaredInterfaceMember();
+}
+
+abstract class A4 = A1 with A2;
+
+abstract class A5 implements A1 {}
+
+abstract class B1 {
+ void extendedAndImplementedMember() {}
+ void twiceInterfaceMember() {}
+}
+
+abstract class B2 {
+ void twiceInterfaceMember() {}
+}
+
+abstract class B3 {
+ void extendedAndImplementedMember() {}
+}
+
+abstract class B4 extends B3 implements B1, B2 {}
+
+abstract class C1 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember();
+}
+
+abstract class C3 with C1 implements C2 {}
+
+class A6 extends A1 implements A1 {}
+
+class B5 extends B4 {}
+
+class B6 extends B3 implements B1, B2 {}
+
+class C2 {
+ void mixedInAndImplementedClassMember() {}
+ void mixedInAndImplementedInterfaceMember() {}
+}
+
+class C4 extends C3 {}
+
+class C5 with C1 implements C2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.outline.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.outline.expect
index f522e20..2bf067c 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.outline.expect
@@ -35,6 +35,7 @@
synthetic constructor •() → self::_Class&Base&MixinA*
: super self::Base::•()
;
+ abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
}
abstract class Class extends self::_Class&Base&MixinA {
synthetic constructor •() → self::Class*
@@ -104,6 +105,7 @@
synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
: super self::YamlNode::•()
;
+ abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
}
abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
diff --git a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.strong.expect b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.strong.expect
index 1f40ec1..bf294a6 100644
--- a/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.strong.expect
+++ b/pkg/front_end/testcases/general/infer_fixed_generic_return_type.dart.strong.expect
@@ -37,6 +37,7 @@
synthetic constructor •() → self::_Class&Base&MixinA*
: super self::Base::•()
;
+ abstract mixin-stub method method(core::Object* t) → dynamic; -> self::MixinA::method
}
abstract class Class extends self::_Class&Base&MixinA {
synthetic constructor •() → self::Class*
@@ -110,6 +111,7 @@
synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
: super self::YamlNode::•()
;
+ abstract mixin-stub operator [](core::Object* key) → dynamic; -> self::MapMixin::[]
}
abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/ {
synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
diff --git a/pkg/front_end/testcases/general/issue41210a.dart b/pkg/front_end/testcases/general/issue41210a.dart
index 7f16a06..78cfc3c 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart
+++ b/pkg/front_end/testcases/general/issue41210a.dart
@@ -24,6 +24,10 @@
class E with A, D {} // ok
+abstract class F implements Interface {}
+
+class G with A, F {} // ok
+
main() {
print(C().method(0));
}
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
index 2c30295..20bf60b 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.outline.expect
@@ -95,16 +95,16 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
+ abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
;
- abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
}
abstract class D extends core::Object implements self::Interface, self::Interface2 {
synthetic constructor •() → self::D*
;
+ abstract forwarding-stub method method(covariant core::num* i) → core::String*;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -115,7 +115,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract forwarding-stub method method(covariant core::num* i) → core::String*;
}
abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
@@ -139,11 +138,51 @@
: super self::_E&Object&A::•()
;
forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
- return super.{self::A::method}(i, s: s);
+ return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
;
}
+abstract class F extends core::Object implements self::Interface {
+ synthetic constructor •() → self::F*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+ return super.{self::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ ;
+}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
index e33f9ba..2766232 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.strong.expect
@@ -98,18 +98,18 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+ abstract mixin-stub method method(core::num* i) → core::String*; -> self::B::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
}
abstract class D extends core::Object implements self::Interface, self::Interface2 {
synthetic constructor •() → self::D*
: super core::Object::•()
;
+ abstract forwarding-stub method method(covariant core::num* i) → core::String*;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -120,7 +120,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract forwarding-stub method method(covariant core::num* i) → core::String*;
}
abstract class _E&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
@@ -144,15 +143,57 @@
: super self::_E&Object&A::•()
;
forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
- return super.{self::A::method}(i, s: s);
+ return super.{self::_E&Object&A::method}(i, s: s);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
: super self::_E&Object&A&D::•()
;
}
+abstract class F extends core::Object implements self::Interface {
+ synthetic constructor •() → self::F*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A = core::Object with self::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{self::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+abstract class _G&Object&A&F = self::_G&Object&A with self::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ : super self::_G&Object&A&F::•()
+ ;
+}
static method main() → dynamic {
- core::print(new self::C::•().{self::C::method}(0));
+ core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
}
constants {
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
index 8fc1032..599fc0f 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline.expect
@@ -20,4 +20,8 @@
class E with A, D {}
+abstract class F implements Interface {}
+
+class G with A, F {}
+
main() {}
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
index 6ec25da..d6c9646 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.textual_outline_modelled.expect
@@ -4,6 +4,8 @@
abstract class D implements Interface, Interface2 {}
+abstract class F implements Interface {}
+
abstract class Interface {
String method(num i);
}
@@ -16,6 +18,8 @@
class E with A, D {}
+class G with A, F {}
+
main() {}
mixin A implements Interface {
String method(num i, {String s = "hello"}) => s;
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart b/pkg/front_end/testcases/general/issue41210b/issue41210.dart
index 01f7b3b..08bd4e4 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart
@@ -8,6 +8,8 @@
class E with A, D {} // ok
+class G with A, F {} // ok
+
main() {
print(C().method(0));
}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
index 8ea72fc..525ba41 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.outline.expect
@@ -24,22 +24,51 @@
;
mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
return super.{iss::A::method}(i, s: s);
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
+ abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::B::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
;
- abstract member-signature method method(core::num* i, {core::String* s}) → core::String*; -> self::_C&Object&A::method
}
abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
: super core::Object::•()
;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -47,12 +76,58 @@
const synthetic constructor •() → self::_E&Object&A&D*
: super self::_E&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::D::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::D::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::D::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::D::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::D::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::D::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::D::runtimeType
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E&Object&A::method}(i);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
;
- abstract member-signature method method(covariant core::num* i, {core::String* s}) → core::String*; -> self::_E&Object&A&D::method
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ mixin-super-stub method method(core::num* i, {core::String* s}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::F::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::F::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::F::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::F::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::F::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::F::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::F::runtimeType
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ ;
}
static method main() → dynamic
;
@@ -135,6 +210,20 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
abstract forwarding-stub method method(covariant core::num* i) → core::String*;
}
+abstract class F extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::F*
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
constants {
#C1 = "hello"
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
index 91814ab..eb41372 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.strong.expect
@@ -24,23 +24,52 @@
;
mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
return super.{iss::A::method}(i, s: s);
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with iss::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+ abstract mixin-stub method method(core::num* i) → core::String*; -> iss::B::method
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::B::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method method(core::num* i, {core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
}
abstract class _E&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E&Object&A*
: super core::Object::•()
;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
return super.{iss::A::method}(i, s: s);
}
@@ -48,16 +77,63 @@
const synthetic constructor •() → self::_E&Object&A&D*
: super self::_E&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::D::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::D::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::D::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::D::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::D::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::D::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::D::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::D::runtimeType
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E&Object&A::method}(i);
}
class E extends self::_E&Object&A&D {
synthetic constructor •() → self::E*
: super self::_E&Object&A&D::•()
;
- abstract member-signature method method(covariant core::num* i, {core::String* s = #C1}) → core::String*; -> self::_E&Object&A&D::method
+}
+abstract class _G&Object&A = core::Object with iss::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A*
+ : super core::Object::•()
+ ;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{iss::A::method}(i, s: s);
+}
+abstract class _G&Object&A&F = self::_G&Object&A with iss::F /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_G&Object&A&F*
+ : super self::_G&Object&A::•()
+ ;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::F::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::F::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::F::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::F::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::F::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::F::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::F::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::F::runtimeType
+}
+class G extends self::_G&Object&A&F {
+ synthetic constructor •() → self::G*
+ : super self::_G&Object&A&F::•()
+ ;
}
static method main() → dynamic {
- core::print(new self::C::•().{self::C::method}(0));
+ core::print(new self::C::•().{self::_C&Object&A&B::method}(0));
}
library;
@@ -142,6 +218,21 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
abstract forwarding-stub method method(covariant core::num* i) → core::String*;
}
+abstract class F extends core::Object implements iss::Interface {
+ synthetic constructor •() → iss::F*
+ : super core::Object::•()
+ ;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
constants {
#C1 = "hello"
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
index 7354b67..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline.expect
@@ -4,4 +4,6 @@
class E with A, D {}
+class G with A, F {}
+
main() {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
index 7354b67..8c473d0 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.textual_outline_modelled.expect
@@ -4,4 +4,6 @@
class E with A, D {}
+class G with A, F {}
+
main() {}
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart b/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
index 61a4823..a209b30 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_lib.dart
@@ -19,3 +19,5 @@
}
abstract class D implements Interface, Interface2 {}
+
+abstract class F implements Interface {}
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
index 3ede97f..db60ecb 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
@@ -203,8 +203,8 @@
synthetic constructor •() → self::A0*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A1&S&M1*
@@ -215,8 +215,8 @@
synthetic constructor •() → self::A1*
: super self::_A1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A2&S&M1*
@@ -232,15 +232,15 @@
synthetic constructor •() → self::A2*
: super self::_A2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X*
@@ -256,8 +256,8 @@
synthetic constructor •() → self::_A1X&S&M1&M*
: super self::_A1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A1X = self::_A1X&S&M1&M with self::MX {
synthetic constructor •() → self::A1X*
@@ -278,8 +278,8 @@
synthetic constructor •() → self::_A2X&S&M1&M2&M*
: super self::_A2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
synthetic constructor •() → self::A2X*
@@ -290,8 +290,8 @@
synthetic constructor •() → self::_B0&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0*
@@ -306,8 +306,8 @@
synthetic constructor •() → self::_B1&S&M1&M*
: super self::_B1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1*
@@ -327,8 +327,8 @@
synthetic constructor •() → self::_B2&S&M1&M2&M*
: super self::_B2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2*
@@ -338,8 +338,8 @@
synthetic constructor •() → self::_B0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B0X&S&M&MX*
@@ -359,8 +359,8 @@
synthetic constructor •() → self::_B1X&S&M1&M*
: super self::_B1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -385,8 +385,8 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M*
: super self::_B2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
index a0c20c5..56cdffa 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.strong.expect
@@ -206,8 +206,8 @@
synthetic constructor •() → self::A0*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A1&S&M1*
@@ -218,8 +218,8 @@
synthetic constructor •() → self::A1*
: super self::_A1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A2&S&M1*
@@ -235,15 +235,15 @@
synthetic constructor •() → self::A2*
: super self::_A2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X*
@@ -259,8 +259,8 @@
synthetic constructor •() → self::_A1X&S&M1&M*
: super self::_A1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A1X = self::_A1X&S&M1&M with self::MX {
synthetic constructor •() → self::A1X*
@@ -281,8 +281,8 @@
synthetic constructor •() → self::_A2X&S&M1&M2&M*
: super self::_A2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
synthetic constructor •() → self::A2X*
@@ -293,8 +293,8 @@
synthetic constructor •() → self::_B0&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0*
@@ -310,8 +310,8 @@
synthetic constructor •() → self::_B1&S&M1&M*
: super self::_B1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1*
@@ -332,8 +332,8 @@
synthetic constructor •() → self::_B2&S&M1&M2&M*
: super self::_B2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2*
@@ -344,8 +344,8 @@
synthetic constructor •() → self::_B0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B0X&S&M&MX*
@@ -366,8 +366,8 @@
synthetic constructor •() → self::_B1X&S&M1&M*
: super self::_B1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -393,8 +393,8 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M*
: super self::_B2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
index 5adab63..01e76d1 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.outline.expect
@@ -52,11 +52,11 @@
;
mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*
+ mixin-super-stub method method2(covariant core::int* argument1, core::num* argument2) → core::String*
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num* argument1, covariant core::num* argument2) → core::String*
+ forwarding-stub method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
index 716fe27..f6a8a4d 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
@@ -54,11 +54,11 @@
;
mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num* argument1, core::num* argument2) → core::String*
+ mixin-super-stub method method2(covariant core::int* argument1, core::num* argument2) → core::String*
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num* argument1, covariant core::num* argument2) → core::String*
+ forwarding-stub method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect
index a5302a7..8f9542d 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.outline.expect
@@ -72,10 +72,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::MixinClass::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
}
abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/ {
synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
@@ -83,10 +86,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::MixinClass::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
}
abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
synthetic constructor •() → self::ClassExtendsMixinClass*
@@ -98,10 +104,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::Mixin::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::Mixin::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::Mixin::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
}
abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/ {
synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
@@ -109,10 +118,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::Mixin::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::Mixin::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::Mixin::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
}
abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
synthetic constructor •() → self::ClassExtendsMixin*
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect
index 940088e..1a74047 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.expect
@@ -66,10 +66,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::MixinClass::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
}
abstract class _ClassExtendsMixinClass&Super&MixinClass = self::Super with self::MixinClass /*isAnonymousMixin*/ {
synthetic constructor •() → self::_ClassExtendsMixinClass&Super&MixinClass*
@@ -77,10 +80,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::MixinClass::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::MixinClass::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::MixinClass::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::MixinClass::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::MixinClass::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::MixinClass::abstractMixin
}
abstract class ClassExtendsMixinClass extends self::_ClassExtendsMixinClass&Super&MixinClass {
synthetic constructor •() → self::ClassExtendsMixinClass*
@@ -93,10 +99,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::Mixin::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::Mixin::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::Mixin::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
}
abstract class _ClassExtendsMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/ {
synthetic constructor •() → self::_ClassExtendsMixin&Super&Mixin*
@@ -104,10 +113,13 @@
;
mixin-super-stub method concreteExtendsConcreteMixin() → void
return super.{self::Mixin::concreteExtendsConcreteMixin}();
+ abstract mixin-stub method concreteExtendsAbstractMixin() → void; -> self::Mixin::concreteExtendsAbstractMixin
mixin-super-stub method concreteMixin() → void
return super.{self::Mixin::concreteMixin}();
mixin-super-stub method abstractExtendsConcreteMixin() → void
return super.{self::Mixin::abstractExtendsConcreteMixin}();
+ abstract mixin-stub method abstractExtendsAbstractMixin() → void; -> self::Mixin::abstractExtendsAbstractMixin
+ abstract mixin-stub method abstractMixin() → void; -> self::Mixin::abstractMixin
}
abstract class ClassExtendsMixin extends self::_ClassExtendsMixin&Super&Mixin {
synthetic constructor •() → self::ClassExtendsMixin*
@@ -120,11 +132,11 @@
;
method method() → dynamic {
this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
- this.{self::MixinClass::concreteExtendsAbstractMixin}();
+ this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}();
this.{self::ClassEqMixinClass::concreteMixin}();
this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
- this.{self::MixinClass::abstractExtendsAbstractMixin}();
- this.{self::MixinClass::abstractMixin}();
+ this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}();
+ this.{self::ClassEqMixinClass::abstractMixin}();
super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::ClassEqMixinClass::concreteMixin}();
@@ -138,10 +150,10 @@
method method() → dynamic {
this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
- this.{self::MixinClass::concreteExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}();
this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
- this.{self::MixinClass::abstractExtendsAbstractMixin}();
- this.{self::MixinClass::abstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}();
super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -154,11 +166,11 @@
;
method method() → dynamic {
this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
- this.{self::Mixin::concreteExtendsAbstractMixin}();
+ this.{self::ClassEqMixin::concreteExtendsAbstractMixin}();
this.{self::ClassEqMixin::concreteMixin}();
this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
- this.{self::Mixin::abstractExtendsAbstractMixin}();
- this.{self::Mixin::abstractMixin}();
+ this.{self::ClassEqMixin::abstractExtendsAbstractMixin}();
+ this.{self::ClassEqMixin::abstractMixin}();
super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::ClassEqMixin::concreteMixin}();
@@ -171,11 +183,11 @@
;
method method() → dynamic {
this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
- this.{self::Mixin::concreteExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}();
this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
- this.{self::Mixin::abstractExtendsAbstractMixin}();
- this.{self::Mixin::abstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}();
super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect
index 01a2d50..53cf7f1 100644
--- a/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_stubs.dart.strong.transformed.expect
@@ -65,9 +65,9 @@
: super self::Super::•()
;
method concreteExtendsConcreteMixin() → void {}
+ abstract method concreteExtendsAbstractMixin() → void;
method concreteMixin() → void {}
method abstractExtendsConcreteMixin() → void {}
- abstract method concreteExtendsAbstractMixin() → void;
abstract method abstractExtendsAbstractMixin() → void;
abstract method abstractMixin() → void;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -86,9 +86,9 @@
: super self::Super::•()
;
method concreteExtendsConcreteMixin() → void {}
+ abstract method concreteExtendsAbstractMixin() → void;
method concreteMixin() → void {}
method abstractExtendsConcreteMixin() → void {}
- abstract method concreteExtendsAbstractMixin() → void;
abstract method abstractExtendsAbstractMixin() → void;
abstract method abstractMixin() → void;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -112,9 +112,9 @@
: super self::Super::•()
;
method concreteExtendsConcreteMixin() → void {}
+ abstract method concreteExtendsAbstractMixin() → void;
method concreteMixin() → void {}
method abstractExtendsConcreteMixin() → void {}
- abstract method concreteExtendsAbstractMixin() → void;
abstract method abstractExtendsAbstractMixin() → void;
abstract method abstractMixin() → void;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -133,9 +133,9 @@
: super self::Super::•()
;
method concreteExtendsConcreteMixin() → void {}
+ abstract method concreteExtendsAbstractMixin() → void;
method concreteMixin() → void {}
method abstractExtendsConcreteMixin() → void {}
- abstract method concreteExtendsAbstractMixin() → void;
abstract method abstractExtendsAbstractMixin() → void;
abstract method abstractMixin() → void;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -160,11 +160,11 @@
;
method method() → dynamic {
this.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
- this.{self::MixinClass::concreteExtendsAbstractMixin}();
+ this.{self::ClassEqMixinClass::concreteExtendsAbstractMixin}();
this.{self::ClassEqMixinClass::concreteMixin}();
this.{self::ClassEqMixinClass::abstractExtendsConcreteMixin}();
- this.{self::MixinClass::abstractExtendsAbstractMixin}();
- this.{self::MixinClass::abstractMixin}();
+ this.{self::ClassEqMixinClass::abstractExtendsAbstractMixin}();
+ this.{self::ClassEqMixinClass::abstractMixin}();
super.{self::ClassEqMixinClass::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::ClassEqMixinClass::concreteMixin}();
@@ -178,10 +178,10 @@
method method() → dynamic {
this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
- this.{self::MixinClass::concreteExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsAbstractMixin}();
this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsConcreteMixin}();
- this.{self::MixinClass::abstractExtendsAbstractMixin}();
- this.{self::MixinClass::abstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixinClass&Super&MixinClass::abstractMixin}();
super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::_ClassExtendsMixinClass&Super&MixinClass::concreteMixin}();
@@ -194,11 +194,11 @@
;
method method() → dynamic {
this.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
- this.{self::Mixin::concreteExtendsAbstractMixin}();
+ this.{self::ClassEqMixin::concreteExtendsAbstractMixin}();
this.{self::ClassEqMixin::concreteMixin}();
this.{self::ClassEqMixin::abstractExtendsConcreteMixin}();
- this.{self::Mixin::abstractExtendsAbstractMixin}();
- this.{self::Mixin::abstractMixin}();
+ this.{self::ClassEqMixin::abstractExtendsAbstractMixin}();
+ this.{self::ClassEqMixin::abstractMixin}();
super.{self::ClassEqMixin::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::ClassEqMixin::concreteMixin}();
@@ -211,11 +211,11 @@
;
method method() → dynamic {
this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
- this.{self::Mixin::concreteExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsAbstractMixin}();
this.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsConcreteMixin}();
- this.{self::Mixin::abstractExtendsAbstractMixin}();
- this.{self::Mixin::abstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::abstractExtendsAbstractMixin}();
+ this.{self::_ClassExtendsMixin&Super&Mixin::abstractMixin}();
super.{self::_ClassExtendsMixin&Super&Mixin::concreteExtendsConcreteMixin}();
super.{self::Super::concreteExtendsAbstractMixin}();
super.{self::_ClassExtendsMixin&Super&Mixin::concreteMixin}();
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.outline.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.outline.expect
index 4c683ea..d815435 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.outline.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.outline.expect
@@ -22,7 +22,6 @@
class C extends core::Iterable<core::Object*> {
synthetic constructor •() → self::C*
;
- abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* f) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
@@ -59,6 +58,7 @@
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
}
static method test() → dynamic
;
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.expect
index ae6ded4..2418880 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.expect
@@ -30,7 +30,6 @@
synthetic constructor •() → self::C*
: super core::Iterable::•()
;
- abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* f) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
@@ -67,6 +66,7 @@
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
}
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.transformed.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.transformed.expect
index ae6ded4..2418880 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.strong.transformed.expect
@@ -30,7 +30,6 @@
synthetic constructor •() → self::C*
: super core::Iterable::•()
;
- abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* f) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
@@ -67,6 +66,7 @@
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
}
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/general/sdk_diagnostic.dart:12:8: Error: Too few positional arguments: 1 required, 0 given.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
index 3fb40fc..999fa79 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart.weak.expect
@@ -12,6 +12,26 @@
// var interfaceMethod1;
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:29:16: Error: Can't inherit members that conflict with each other.
+// abstract class B extends A {
+// ^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:8:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:14:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:35:7: Error: Can't inherit members that conflict with each other.
+// class MyClass extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:8:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:14:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:35:7: Error: The non-abstract class 'MyClass' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
@@ -50,6 +70,36 @@
// void interfaceMethod3() {}
// ^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:44:7: Error: Can't inherit members that conflict with each other.
+// class MyMock1 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:8:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:14:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:50:7: Error: Can't inherit members that conflict with each other.
+// class MyMock2 extends MyMock1 {
+// ^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:8:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:14:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:56:7: Error: Can't inherit members that conflict with each other.
+// class MyMock3 extends B {
+// ^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:8:8: Context: This is one inherited member.
+// void interfaceMethod1() {}
+// ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:14:7: Context: This is the other inherited member.
+// var interfaceMethod1;
+// ^^^^^^^^^^^^^^^^
+//
// pkg/front_end/testcases/general_nnbd_opt_out/abstract_members.dart:56:7: Error: The non-abstract class 'MyMock3' is missing implementations for these members:
// - A.abstractMethod
// - A.property1=
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
index 732160e..c52e1a4 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.expect
@@ -8,6 +8,7 @@
;
method foo() → self::A*
return null;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -16,7 +17,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class B extends self::A {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
index 732160e..c52e1a4 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/abstract_overrides_concrete_with_no_such_method.dart.weak.transformed.expect
@@ -8,6 +8,7 @@
;
method foo() → self::A*
return null;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -16,7 +17,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class B extends self::A {
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
index df77c0e..9bddb8c 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_application_override.dart.weak.expect
@@ -206,8 +206,8 @@
synthetic constructor •() → self::A0*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A1&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A1&S&M1*
@@ -218,8 +218,8 @@
synthetic constructor •() → self::A1*
: super self::_A1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A2&S&M1 = self::S with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A2&S&M1*
@@ -235,15 +235,15 @@
synthetic constructor •() → self::A2*
: super self::_A2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _A0X&S&M = self::S with self::M /*isAnonymousMixin*/ {
synthetic constructor •() → self::_A0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X*
@@ -259,8 +259,8 @@
synthetic constructor •() → self::_A1X&S&M1&M*
: super self::_A1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A1X = self::_A1X&S&M1&M with self::MX {
synthetic constructor •() → self::A1X*
@@ -281,8 +281,8 @@
synthetic constructor •() → self::_A2X&S&M1&M2&M*
: super self::_A2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class A2X = self::_A2X&S&M1&M2&M with self::MX {
synthetic constructor •() → self::A2X*
@@ -293,8 +293,8 @@
synthetic constructor •() → self::_B0&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0*
@@ -310,8 +310,8 @@
synthetic constructor •() → self::_B1&S&M1&M*
: super self::_B1&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1*
@@ -332,8 +332,8 @@
synthetic constructor •() → self::_B2&S&M1&M2&M*
: super self::_B2&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2*
@@ -344,8 +344,8 @@
synthetic constructor •() → self::_B0X&S&M*
: super self::S::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B0X&S&M&MX*
@@ -366,8 +366,8 @@
synthetic constructor •() → self::_B1X&S&M1&M*
: super self::_B1X&S&M1::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B1X&S&M1&M&MX = self::_B1X&S&M1&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B1X&S&M1&M&MX*
@@ -393,8 +393,8 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M*
: super self::_B2X&S&M1&M2::•()
;
- mixin-super-stub method foo([dynamic x = #C1]) → dynamic
- return super.{self::M::foo}(x);
+ mixin-super-stub method foo() → dynamic
+ return super.{self::M::foo}();
}
abstract class _B2X&S&M1&M2&M&MX = self::_B2X&S&M1&M2&M with self::MX /*isAnonymousMixin*/ {
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.expect
index e603673..50bca4d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.expect
@@ -30,7 +30,6 @@
synthetic constructor •() → self::C*
: super core::Iterable::•()
;
- abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* f) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
@@ -67,6 +66,7 @@
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
}
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart:14:8: Error: Too few positional arguments: 1 required, 0 given.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.transformed.expect
index e603673..50bca4d 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart.weak.transformed.expect
@@ -30,7 +30,6 @@
synthetic constructor •() → self::C*
: super core::Iterable::•()
;
- abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* f) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
@@ -67,6 +66,7 @@
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature get iterator() → core::Iterator<core::Object*>*; -> core::Iterable::iterator
}
static method test() → dynamic {
invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/sdk_diagnostic.dart:14:8: Error: Too few positional arguments: 1 required, 0 given.
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
index 136a4b6..cd92eb8 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/changing_modules_13.yaml.world.1.expect
@@ -7,6 +7,16 @@
synthetic constructor •() → main::ABC*
: super a::AB::•()
;
+ abstract mixin-stub get _identityHashCode() → dart.core::int*; -> a::C::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> a::C::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> a::C::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → dart.core::bool*; -> a::C::==
+ abstract mixin-stub get hashCode() → dart.core::int*; -> a::C::hashCode
+ abstract mixin-stub method toString() → dart.core::String*; -> a::C::toString
+ abstract mixin-stub method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> a::C::noSuchMethod
+ abstract mixin-stub get runtimeType() → dart.core::Type*; -> a::C::runtimeType
}
}
library from "package:module/a.dart" as a {
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
index 20bd0f2..83dfce6 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.1.expect
@@ -6,6 +6,7 @@
abstract class AfterLayoutMixin<T extends fra::StatefulWidget* = fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/ {
abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
abstract member-signature set _widget(generic-covariant-impl aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
+ abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
@@ -68,6 +69,7 @@
;
abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> fra::State::_widget
+ abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
index 89c1841..7e07afc 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_issue_66122.yaml.world.2.expect
@@ -6,6 +6,7 @@
abstract class AfterLayoutMixin<T extends fra::StatefulWidget* = fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/ {
abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
abstract member-signature set _widget(generic-covariant-impl aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
+ abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
@@ -66,6 +67,13 @@
synthetic constructor •() → main::__HotReloadIssueState&State&AfterLayoutMixin*
: super fra::State::•()
;
+ abstract mixin-stub get _widget() → main::HotReloadIssue*; -> aft::AfterLayoutMixin::_widget
+ abstract mixin-stub set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> aft::AfterLayoutMixin::_widget
+ abstract mixin-stub method toString() → dart.core::String*; -> aft::AfterLayoutMixin::toString
+ abstract mixin-stub operator ==(dynamic other) → dart.core::bool*; -> aft::AfterLayoutMixin::==
+ abstract mixin-stub get hashCode() → dart.core::int*; -> aft::AfterLayoutMixin::hashCode
+ abstract mixin-stub method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> aft::AfterLayoutMixin::noSuchMethod
+ abstract mixin-stub get runtimeType() → dart.core::Type*; -> aft::AfterLayoutMixin::runtimeType
}
class _HotReloadIssueState extends main::__HotReloadIssueState&State&AfterLayoutMixin {
synthetic constructor •() → main::_HotReloadIssueState*
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.1.expect
index 4ebbef1..3cb283a 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.1.expect
@@ -5,7 +5,6 @@
synthetic constructor •() → main::AIterator*
: super dart.core::Iterator::•()
;
- abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -16,6 +15,7 @@
abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+ abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
}
class Foo extends dart.core::Object {
final field dynamic a;
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.2.expect
index f8aea1f..e82a2d4 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_32366.yaml.world.2.expect
@@ -34,7 +34,6 @@
synthetic constructor •() → main::BIterator*
: super dart.core::Iterator::•()
;
- abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -45,6 +44,7 @@
abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+ abstract member-signature method moveNext() → dart.core::bool*; -> dart.core::Iterator::moveNext
}
class Foo extends dart.core::Object {
final field invalid-type kjsdf = null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
index daf5d03..9f2d3d5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
@@ -10,7 +10,6 @@
;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -55,6 +54,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method F<T extends core::Object* = dynamic>() → self::F::T*
;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
index 503c83f..0887aa4 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.expect
@@ -10,7 +10,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -55,6 +54,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method F<T extends core::Object* = dynamic>() → self::F::T*
return null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
index 21dd720..7754fb8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.strong.transformed.expect
@@ -11,7 +11,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -56,6 +55,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method F<T extends core::Object* = dynamic>() → self::F::T*
return null;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
index e2413d9..fa0d3a1 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
@@ -10,7 +10,6 @@
;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -55,6 +54,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method foo() → asy::Stream<core::List<core::int*>*>* async*
;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index 2420358..d6d38a5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -37,7 +37,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -82,6 +81,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method foo() → asy::Stream<core::List<core::int*>*>* async* {
yield<core::int*>[];
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
index 5557102..5421bab 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.transformed.expect
@@ -37,7 +37,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -82,6 +81,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method foo() → asy::Stream<core::List<core::int*>*>* /* originally async* */ {
asy::_AsyncStarStreamController<core::List<core::int*>*>* :controller;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
index 3ceab23e..98b90b7 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
@@ -57,7 +57,6 @@
;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -102,6 +101,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError, () →* void onDone, core::bool* cancelOnError}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method test() → dynamic async
;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 040669a..fc3c8e8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -100,7 +100,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -145,6 +144,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method test() → dynamic async {
self::MyStream<self::Foo*>* myStream = self::MyStream::•<self::Foo*>();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
index 4aa6578..e1ed3dc 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.transformed.expect
@@ -195,7 +195,6 @@
return null;
abstract member-signature get isBroadcast() → core::bool*; -> asy::Stream::isBroadcast
abstract member-signature method asBroadcastStream({(asy::StreamSubscription<self::MyStream::T*>*) →* void onListen = #C1, (asy::StreamSubscription<self::MyStream::T*>*) →* void onCancel = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::asBroadcastStream
- abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
abstract member-signature method where((self::MyStream::T*) →* core::bool* test) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::where
abstract member-signature method map<S extends core::Object* = dynamic>((self::MyStream::T*) →* self::MyStream::map::S* convert) → asy::Stream<self::MyStream::map::S*>*; -> asy::Stream::map
abstract member-signature method asyncMap<E extends core::Object* = dynamic>((self::MyStream::T*) →* FutureOr<self::MyStream::asyncMap::E*>* convert) → asy::Stream<self::MyStream::asyncMap::E*>*; -> asy::Stream::asyncMap
@@ -240,6 +239,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method listen((self::MyStream::T*) →* void onData, {core::Function* onError = #C1, () →* void onDone = #C1, core::bool* cancelOnError = #C1}) → asy::StreamSubscription<self::MyStream::T*>*; -> asy::Stream::listen
}
static method test() → dynamic /* originally async */ {
final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
index db93300..1575bda 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
@@ -23,6 +23,7 @@
class E extends core::StackTrace {
synthetic constructor •() → self::E*
;
+ abstract member-signature method toString() → core::String*; -> core::StackTrace::toString
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
index 17d888d..adbb087 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
@@ -26,6 +26,7 @@
synthetic constructor •() → self::E*
: super core::StackTrace::•()
;
+ abstract member-signature method toString() → core::String*; -> core::StackTrace::toString
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.transformed.expect
index 17d888d..adbb087 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.transformed.expect
@@ -26,6 +26,7 @@
synthetic constructor •() → self::E*
: super core::StackTrace::•()
;
+ abstract member-signature method toString() → core::String*; -> core::StackTrace::toString
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.outline.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.outline.expect
index 7c87b5f..08e7b3e 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.outline.expect
@@ -2,6 +2,13 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+// void set property6(int i); // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+// late final int? property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
// void set property6(int i); // error
@@ -10,12 +17,12 @@
// late final int? property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
-// void set property6(int i); // error
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
-// late final int? property6;
-// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
@@ -25,13 +32,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
index 1e3b9c1..f982c6a 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
@@ -2,6 +2,13 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+// void set property6(int i); // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+// late final int? property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
// void set property6(int i); // error
@@ -10,12 +17,12 @@
// late final int? property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
-// void set property6(int i); // error
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
-// late final int? property6;
-// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
@@ -25,13 +32,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
index 1e3b9c1..f982c6a 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
@@ -2,6 +2,13 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+// void set property6(int i); // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+// late final int? property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
// void set property6(int i); // error
@@ -10,12 +17,12 @@
// late final int? property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
-// void set property6(int i); // error
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
-// late final int? property6;
-// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
@@ -25,13 +32,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
index f3ffff6..8d9af18 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
@@ -2,6 +2,13 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+// void set property6(int i); // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+// late final int? property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
// void set property6(int i); // error
@@ -10,12 +17,12 @@
// late final int? property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
-// void set property6(int i); // error
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
-// late final int? property6;
-// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
@@ -25,13 +32,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
index f3ffff6..8d9af18 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
@@ -2,6 +2,13 @@
//
// Problems in library:
//
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
+// void set property6(int i); // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
+// late final int? property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
// void set property6(int i); // error
@@ -10,12 +17,12 @@
// late final int? property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
-// void set property6(int i); // error
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
-// late final int? property6;
-// ^^^^^^^^^
+// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
@@ -25,13 +32,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart b/pkg/front_end/testcases/late_lowering/late_override.dart
new file mode 100644
index 0000000..d2a3ddd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, 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.
+
+class Interface {
+ late int implementedLateFieldDeclaredGetterSetter;
+}
+
+class Class implements Interface {
+ int get implementedLateFieldDeclaredGetterSetter => 0;
+
+ void set implementedLateFieldDeclaredGetterSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.outline.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.outline.expect
new file mode 100644
index 0000000..4278a64
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+ field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter;
+ synthetic constructor •() → self::Interface
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int;
+ set implementedLateFieldDeclaredGetterSetter(core::int #t1) → void;
+}
+class Class extends core::Object implements self::Interface {
+ synthetic constructor •() → self::Class
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ ;
+ set implementedLateFieldDeclaredGetterSetter(core::int value) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect
new file mode 100644
index 0000000..0dffea5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Interface extends core::Object {
+ field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter = null;
+ synthetic constructor •() → self::Interface
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
+ set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
+}
+class Class extends core::Object implements self::Interface {
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return 0;
+ set implementedLateFieldDeclaredGetterSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect
new file mode 100644
index 0000000..0dffea5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.strong.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Interface extends core::Object {
+ field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter = null;
+ synthetic constructor •() → self::Interface
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1.==(null) ?{core::int} throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter") : #t1{core::int};
+ set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
+}
+class Class extends core::Object implements self::Interface {
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return 0;
+ set implementedLateFieldDeclaredGetterSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline.expect
new file mode 100644
index 0000000..24986e8
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class Interface {
+ late int implementedLateFieldDeclaredGetterSetter;
+}
+
+class Class implements Interface {
+ int get implementedLateFieldDeclaredGetterSetter => 0;
+ void set implementedLateFieldDeclaredGetterSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..61b08f4
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+class Class implements Interface {
+ int get implementedLateFieldDeclaredGetterSetter => 0;
+ void set implementedLateFieldDeclaredGetterSetter(int value) {}
+}
+class Interface {
+ ---- unknown chunk starts ----
+late
+---- unknown chunk ends ----
+ int implementedLateFieldDeclaredGetterSetter;
+}
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect
new file mode 100644
index 0000000..3f8b983
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Interface extends core::Object {
+ field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter = null;
+ field core::bool _#Interface#implementedLateFieldDeclaredGetterSetter#isSet = false;
+ synthetic constructor •() → self::Interface
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
+ set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void {
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} = true;
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
+ }
+}
+class Class extends core::Object implements self::Interface {
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return 0;
+ set implementedLateFieldDeclaredGetterSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect
new file mode 100644
index 0000000..3f8b983
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/late_override.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Interface extends core::Object {
+ field core::int? _#Interface#implementedLateFieldDeclaredGetterSetter = null;
+ field core::bool _#Interface#implementedLateFieldDeclaredGetterSetter#isSet = false;
+ synthetic constructor •() → self::Interface
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} ?{core::int} let final core::int? #t1 = this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} in #t1{core::int} : throw new _in::LateError::fieldNI("implementedLateFieldDeclaredGetterSetter");
+ set implementedLateFieldDeclaredGetterSetter(core::int #t2) → void {
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter#isSet} = true;
+ this.{self::Interface::_#Interface#implementedLateFieldDeclaredGetterSetter} = #t2;
+ }
+}
+class Class extends core::Object implements self::Interface {
+ synthetic constructor •() → self::Class
+ : super core::Object::•()
+ ;
+ get implementedLateFieldDeclaredGetterSetter() → core::int
+ return 0;
+ set implementedLateFieldDeclaredGetterSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.outline.expect b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.outline.expect
index 8b55238..f0666bf 100644
--- a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.outline.expect
@@ -95,141 +95,169 @@
synthetic constructor •() → self::_Class&Super&M0
: super self::Super::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M0::property
}
abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1
: super self::_Class&Super&M0::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M1::property
}
abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2
: super self::_Class&Super&M0&M1::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M2::property
}
abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
: super self::_Class&Super&M0&M1&M2::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M3::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
: super self::_Class&Super&M0&M1&M2&M3::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M4::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
: super self::_Class&Super&M0&M1&M2&M3&M4::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M5::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
: super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M6::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M7::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M8::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M9::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M10::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M11::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M12::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M13::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M14::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M15::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M16::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M17::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M18::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M19::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M20::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M21::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M22::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M23::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M24::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M25::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M26::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M27::property
}
class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.strong.expect b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.strong.expect
index 974275d..2ae4ce3 100644
--- a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.strong.expect
@@ -96,141 +96,169 @@
synthetic constructor •() → self::_Class&Super&M0
: super self::Super::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M0::property
}
abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1
: super self::_Class&Super&M0::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M1::property
}
abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2
: super self::_Class&Super&M0&M1::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M2::property
}
abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
: super self::_Class&Super&M0&M1&M2::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M3::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
: super self::_Class&Super&M0&M1&M2&M3::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M4::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
: super self::_Class&Super&M0&M1&M2&M3&M4::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M5::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
: super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M6::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M7::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M8::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M9::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M10::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M11::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M12::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M13::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M14::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M15::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M16::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M17::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M18::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M19::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M20::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M21::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M22::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M23::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M24::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M25::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M26::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M27::property
}
class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.expect b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.expect
index 974275d..2ae4ce3 100644
--- a/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/build_issue_2688.dart.weak.expect
@@ -96,141 +96,169 @@
synthetic constructor •() → self::_Class&Super&M0
: super self::Super::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M0::property
}
abstract class _Class&Super&M0&M1 = self::_Class&Super&M0 with self::M1 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1
: super self::_Class&Super&M0::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M1::property
}
abstract class _Class&Super&M0&M1&M2 = self::_Class&Super&M0&M1 with self::M2 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2
: super self::_Class&Super&M0&M1::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M2::property
}
abstract class _Class&Super&M0&M1&M2&M3 = self::_Class&Super&M0&M1&M2 with self::M3 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3
: super self::_Class&Super&M0&M1&M2::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M3::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4 = self::_Class&Super&M0&M1&M2&M3 with self::M4 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4
: super self::_Class&Super&M0&M1&M2&M3::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M4::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5 = self::_Class&Super&M0&M1&M2&M3&M4 with self::M5 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5
: super self::_Class&Super&M0&M1&M2&M3&M4::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M5::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6 = self::_Class&Super&M0&M1&M2&M3&M4&M5 with self::M6 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6
: super self::_Class&Super&M0&M1&M2&M3&M4&M5::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M6::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6 with self::M7 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M7::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7 with self::M8 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M8::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8 with self::M9 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M9::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9 with self::M10 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M10::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10 with self::M11 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M11::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11 with self::M12 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M12::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12 with self::M13 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M13::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13 with self::M14 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M14::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14 with self::M15 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M15::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15 with self::M16 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M16::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16 with self::M17 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M17::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17 with self::M18 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M18::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18 with self::M19 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M19::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19 with self::M20 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M20::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20 with self::M21 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M21::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21 with self::M22 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M22::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22 with self::M23 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M23::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23 with self::M24 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M24::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24 with self::M25 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M25::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25 with self::M26 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M26::property
}
abstract class _Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 = self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26 with self::M27 /*isAnonymousMixin*/ {
synthetic constructor •() → self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27
: super self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26::•()
;
+ abstract mixin-stub get property() → core::int; -> self::M27::property
}
class Class extends self::_Class&Super&M0&M1&M2&M3&M4&M5&M6&M7&M8&M9&M10&M11&M12&M13&M14&M15&M16&M17&M18&M19&M20&M21&M22&M23&M24&M25&M26&M27 {
synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
index da98632..a05e6c9 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.outline.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// num get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6 = 0;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The return type of the method 'C2.property6' is 'num', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// num get property6; // error
@@ -45,13 +52,6 @@
// int property6 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// num get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6 = 0;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:116:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
index f2f3537..c6058f6 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// num get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6 = 0;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The return type of the method 'C2.property6' is 'num', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// num get property6; // error
@@ -45,13 +52,6 @@
// int property6 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// num get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6 = 0;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:116:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
index f2f3537..c6058f6 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// num get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6 = 0;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The return type of the method 'C2.property6' is 'num', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// num get property6; // error
@@ -45,13 +52,6 @@
// int property6 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:97:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// num get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:81:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6 = 0;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:116:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.outline.expect
index 36042d2..40bce371 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.outline.expect
@@ -9,6 +9,13 @@
// late final int? property6;
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -17,13 +24,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
index e53ccba4..4d7c28b4 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
@@ -9,6 +9,13 @@
// late final int? property6;
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -17,13 +24,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
index e53ccba4..4d7c28b4 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
@@ -9,6 +9,13 @@
// late final int? property6;
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -17,13 +24,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
index e53ccba4..4d7c28b4 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
@@ -9,6 +9,13 @@
// late final int? property6;
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -17,13 +24,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
index e53ccba4..4d7c28b4 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
@@ -9,6 +9,13 @@
// late final int? property6;
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
+// late int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -17,13 +24,6 @@
// late int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:50:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart:38:12: Context: This is the declaration of the setter 'C1.property6'.
-// late int property6;
-// ^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
index ced9893..73e689a 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.outline.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -45,13 +52,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
index 93b128d..c6bf46a 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -45,13 +52,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
index 93b128d..c6bf46a 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -45,13 +52,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
index 93b128d..c6bf46a 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -45,13 +52,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
index 93b128d..c6bf46a 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
@@ -37,6 +37,13 @@
// void set property3(int i);
// ^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
+// int? get property6; // error
+// ^^^^^^^^^
+// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
+// int property6;
+// ^^^^^^^^^
+//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
// int? get property6; // error
@@ -45,13 +52,6 @@
// int property6;
// ^
//
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:101:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
-// int? get property6; // error
-// ^^^^^^^^^
-// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:83:7: Context: This is the declaration of the setter 'C1.property6'.
-// int property6;
-// ^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart:120:16: Error: The type 'int?' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
// ^
diff --git a/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.expect
index e08ec43..30674ab 100644
--- a/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.expect
@@ -173,6 +173,16 @@
synthetic constructor •() → gen::LegacyClass3*
: super self::Class1::•()
;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
abstract member-signature method method1a<T extends core::Object* = dynamic>() → void; -> self::Class1::method1a
abstract member-signature method method1b<T extends core::Object* = dynamic>() → void; -> self::Class1::method1b
abstract member-signature method method1c<T extends core::Object* = dynamic>() → void; -> self::Class1::method1c
@@ -185,15 +195,5 @@
abstract member-signature method method5a<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5a
abstract member-signature method method5b<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5b
abstract member-signature method method5c<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5c
- abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
- abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
- abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
- abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
- abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
- abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
- abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
- abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.transformed.expect
index e08ec43..30674ab 100644
--- a/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/generic_override.dart.weak.transformed.expect
@@ -173,6 +173,16 @@
synthetic constructor •() → gen::LegacyClass3*
: super self::Class1::•()
;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
abstract member-signature method method1a<T extends core::Object* = dynamic>() → void; -> self::Class1::method1a
abstract member-signature method method1b<T extends core::Object* = dynamic>() → void; -> self::Class1::method1b
abstract member-signature method method1c<T extends core::Object* = dynamic>() → void; -> self::Class1::method1c
@@ -185,15 +195,5 @@
abstract member-signature method method5a<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5a
abstract member-signature method method5b<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5b
abstract member-signature method method5c<T extends self::Class1* = self::Class1*>() → void; -> self::Class1::method5c
- abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
- abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
- abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
- abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
- abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
- abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
- abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
- abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
- abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
index e1f73da..0f16923 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
@@ -28,10 +28,12 @@
synthetic constructor •() → self::Class
: super self::Super::•()
;
+ abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
- abstract forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void;
- forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void
+ forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::int i) → void
+ return super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(i);
+ forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant core::int i) → void
return super.{self::Mixin::extendedConcreteMixedInConcreteImplementedMethod}(i);
}
class Sub extends self::Class {
@@ -39,15 +41,14 @@
: super self::Class::•()
;
method test() → void {
- this.{self::Mixin::extendedConcreteMixedInAbstractMethod}();
+ this.{self::Class::extendedConcreteMixedInAbstractMethod}();
super.{self::Super::extendedConcreteMixedInAbstractMethod}();
this.{self::Class::extendedConcreteMixedInConcreteMethod}();
super.{self::Class::extendedConcreteMixedInConcreteMethod}();
- this.{self::Sub::extendedConcreteMixedInAbstractImplementedMethod}(0);
- super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(0);
+ this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
+ super.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
super.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
}
- abstract forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
index 709b09a..8f44020 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
@@ -28,25 +28,24 @@
synthetic constructor •() → self::Class
: super self::Super::•()
;
+ abstract method extendedConcreteMixedInAbstractMethod() → void;
method extendedConcreteMixedInConcreteMethod() → void {}
abstract method extendedConcreteMixedInAbstractImplementedMethod(covariant core::int i) → void;
method extendedConcreteMixedInConcreteImplementedMethod(covariant core::int i) → void {}
- abstract method extendedConcreteMixedInAbstractMethod() → void;
}
class Sub extends self::Class {
synthetic constructor •() → self::Sub
: super self::Class::•()
;
method test() → void {
- this.{self::Mixin::extendedConcreteMixedInAbstractMethod}();
+ this.{self::Class::extendedConcreteMixedInAbstractMethod}();
super.{self::Super::extendedConcreteMixedInAbstractMethod}();
this.{self::Class::extendedConcreteMixedInConcreteMethod}();
super.{self::Class::extendedConcreteMixedInConcreteMethod}();
- this.{self::Sub::extendedConcreteMixedInAbstractImplementedMethod}(0);
- super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(0);
+ this.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
+ super.{self::Class::extendedConcreteMixedInAbstractImplementedMethod}(0);
this.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
super.{self::Class::extendedConcreteMixedInConcreteImplementedMethod}(0);
}
- abstract forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.expect
index 825a474..f1538ce 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.expect
@@ -12,13 +12,6 @@
// int get extendedMethodMixedInGetter => 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Error: Can't declare a member that conflicts with an inherited one.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:17:12: Context: This is the inherited member.
-// void set extendedSetterMixedInMethod(int value) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:93:11: Error: Can't declare a member that conflicts with an inherited one.
// int get extendedMethodDeclaredGetter => 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -57,51 +50,37 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:100:11: Error: Can't declare a member that conflicts with an inherited one.
// int get mixedInMethodDeclaredGetter => 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:29:8: Context: This is the inherited member.
+// void mixedInMethodDeclaredGetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:102:7: Error: Can't declare a member that conflicts with an inherited one.
// int mixedInMethodDeclaredField = 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:31:8: Context: This is the inherited member.
+// void mixedInMethodDeclaredField() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:103:8: Error: Can't declare a member that conflicts with an inherited one.
// void mixedInGetterDeclaredMethod() {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:32:11: Context: This is the inherited member.
+// int get mixedInGetterDeclaredMethod => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:104:8: Error: Can't declare a member that conflicts with an inherited one.
// void mixedInSetterDeclaredMethod() {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:104:8: Error: 'Mixin.mixedInSetterDeclaredMethod==' is already declared in this scope.
-// void mixedInSetterDeclaredMethod() {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: Previous declaration of 'Mixin.mixedInSetterDeclaredMethod=='.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:33:12: Context: This is the inherited member.
+// void set mixedInSetterDeclaredMethod(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:105:8: Error: Can't declare a member that conflicts with an inherited one.
// void mixedInFieldDeclaredMethod() {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:105:8: Error: 'Mixin.mixedInFieldDeclaredMethod=' is already declared in this scope.
-// void mixedInFieldDeclaredMethod() {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: Previous declaration of 'Mixin.mixedInFieldDeclaredMethod='.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:34:7: Context: This is the inherited member.
+// int mixedInFieldDeclaredMethod = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:107:11: Error: Can't declare a member that conflicts with an inherited one.
// int get implementedMethodDeclaredGetter => 0;
@@ -155,16 +134,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:101:12: Error: Can't declare a member that conflicts with an inherited one.
// void set mixedInMethodDeclaredSetter(int value) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: This is the inherited member.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:101:12: Error: 'Mixin.mixedInMethodDeclaredSetter' is already declared in this scope.
-// void set mixedInMethodDeclaredSetter(int value) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Context: Previous declaration of 'Mixin.mixedInMethodDeclaredSetter'.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:30:8: Context: This is the inherited member.
+// void mixedInMethodDeclaredSetter() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:108:12: Error: Can't declare a member that conflicts with an inherited one.
// void set implementedMethodDeclaredSetter(int value) {}
@@ -277,6 +249,8 @@
synthetic constructor •() → self::_Class&Super&Mixin
: super self::Super::•()
;
+ mixin-super-stub method mixedInMethodDeclaredSetter() → void
+ return super.{self::Mixin::mixedInMethodDeclaredSetter}();
mixin-super-stub get mixedInFieldDeclaredMethod() → core::int
return super.{self::Mixin::mixedInFieldDeclaredMethod};
mixin-super-stub set mixedInFieldDeclaredMethod(core::int value) → void
@@ -285,12 +259,12 @@
return super.{self::Mixin::mixedInFieldImplementedMethod};
mixin-super-stub set mixedInFieldImplementedMethod(core::int value) → void
return super.{self::Mixin::mixedInFieldImplementedMethod} = value;
+ mixin-super-stub get extendedMethodMixedInField() → core::int
+ return super.{self::Mixin::extendedMethodMixedInField};
mixin-super-stub set extendedMethodMixedInField(core::int value) → void
return super.{self::Mixin::extendedMethodMixedInField} = value;
mixin-super-stub method mixedInMethodDeclaredGetter() → void
return super.{self::Mixin::mixedInMethodDeclaredGetter}();
- mixin-super-stub method mixedInMethodDeclaredSetter() → void
- return super.{self::Mixin::mixedInMethodDeclaredSetter}();
mixin-super-stub method mixedInMethodDeclaredField() → void
return super.{self::Mixin::mixedInMethodDeclaredField}();
mixin-super-stub get mixedInGetterDeclaredMethod() → core::int
@@ -303,8 +277,14 @@
return super.{self::Mixin::mixedInMethodImplementedField}();
mixin-super-stub get mixedInGetterImplementedMethod() → core::int
return super.{self::Mixin::mixedInGetterImplementedMethod};
+ mixin-super-stub get extendedMethodMixedInGetter() → core::int
+ return super.{self::Mixin::extendedMethodMixedInGetter};
+ mixin-super-stub method extendedGetterMixedInMethod() → void
+ return super.{self::Mixin::extendedGetterMixedInMethod}();
mixin-super-stub method extendedSetterMixedInMethod() → void
return super.{self::Mixin::extendedSetterMixedInMethod}();
+ mixin-super-stub method extendedFieldMixedInMethod() → void
+ return super.{self::Mixin::extendedFieldMixedInMethod}();
mixin-super-stub set mixedInSetterDeclaredMethod(core::int value) → void
return super.{self::Mixin::mixedInSetterDeclaredMethod} = value;
mixin-super-stub set mixedInSetterImplementedMethod(core::int value) → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.expect
index fd7af41..becdaa6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.expect
@@ -3,12 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField
-// - AbstractClass.Super.extendedAbstractImplementedField=%Interface1.extendedAbstractImplementedField=
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField=%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField=
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractImplementedField
+// - Super.extendedAbstractImplementedField=
+// - Super.extendedAbstractImplementedMultipleField
+// - Super.extendedAbstractImplementedMultipleField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -17,26 +20,38 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField=%Interface1.extendedAbstractImplementedField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField=%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField' is defined here.
+// abstract int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField=' is defined here.
+// abstract int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+// abstract int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField=' is defined here.
+// abstract int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
// - Super.extendedAbstractImplementedField
@@ -51,6 +66,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.transformed.expect
index fd7af41..becdaa6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.transformed.expect
@@ -3,12 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField
-// - AbstractClass.Super.extendedAbstractImplementedField=%Interface1.extendedAbstractImplementedField=
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField=%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField=
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractImplementedField
+// - Super.extendedAbstractImplementedField=
+// - Super.extendedAbstractImplementedMultipleField
+// - Super.extendedAbstractImplementedMultipleField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -17,26 +20,38 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField=%Interface1.extendedAbstractImplementedField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField=%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField' is defined here.
+// abstract int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:12:16: Context: 'Super.extendedAbstractImplementedField=' is defined here.
+// abstract int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+// abstract int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:16:16: Context: 'Super.extendedAbstractImplementedMultipleField=' is defined here.
+// abstract int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
// - Super.extendedAbstractImplementedField
@@ -51,6 +66,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:22:7: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:26:7: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:32:7: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart:8:16: Context: 'Super.extendedAbstractField' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.expect
index 1fe2215..e65fe64 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.expect
@@ -3,9 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
+// - Super.extendedAbstractImplementedField
+// - Super.extendedAbstractImplementedMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// final int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:12:22: Context: 'Super.extendedAbstractImplementedField' is defined here.
+// abstract final int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:16:22: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+// abstract final int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractImplementedField
// - Super.extendedAbstractImplementedMultipleField
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// final int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.transformed.expect
index 1fe2215..e65fe64 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.transformed.expect
@@ -3,9 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField
-// - AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
+// - Super.extendedAbstractImplementedField
+// - Super.extendedAbstractImplementedMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedField%Interface1.extendedAbstractImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleField%Interface1.extendedAbstractImplementedMultipleField%Interface2.extendedAbstractImplementedMultipleField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// final int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:12:22: Context: 'Super.extendedAbstractImplementedField' is defined here.
+// abstract final int extendedAbstractImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:16:22: Context: 'Super.extendedAbstractImplementedMultipleField' is defined here.
+// abstract final int extendedAbstractImplementedMultipleField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedField
+// - Interface1.extendedAbstractImplementedMultipleField
+// - Interface2.extendedAbstractImplementedMultipleField
// - Super.extendedAbstractField
// - Super.extendedAbstractImplementedField
// - Super.extendedAbstractImplementedMultipleField
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:22:13: Context: 'Interface1.extendedAbstractImplementedField' is defined here.
+// final int extendedAbstractImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:26:13: Context: 'Interface1.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:32:13: Context: 'Interface2.extendedAbstractImplementedMultipleField' is defined here.
+// final int extendedAbstractImplementedMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.expect
index 68eae42..39f968f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.expect
@@ -3,9 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter
-// - AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter
+// - Interface1.extendedAbstractImplementedGetter
+// - Interface1.extendedAbstractImplementedMultipleGetter
+// - Interface2.extendedAbstractImplementedMultipleGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractImplementedGetter
+// - Super.extendedAbstractImplementedMultipleGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:12:11: Context: 'Super.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:16:11: Context: 'Super.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedGetter
+// - Interface1.extendedAbstractImplementedMultipleGetter
+// - Interface2.extendedAbstractImplementedMultipleGetter
// - Super.extendedAbstractGetter
// - Super.extendedAbstractImplementedGetter
// - Super.extendedAbstractImplementedMultipleGetter
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.transformed.expect
index 68eae42..39f968f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.transformed.expect
@@ -3,9 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter
-// - AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter
+// - Interface1.extendedAbstractImplementedGetter
+// - Interface1.extendedAbstractImplementedMultipleGetter
+// - Interface2.extendedAbstractImplementedMultipleGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractImplementedGetter
+// - Super.extendedAbstractImplementedMultipleGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:12:11: Context: 'Super.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:16:11: Context: 'Super.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedGetter
+// - Interface1.extendedAbstractImplementedMultipleGetter
+// - Interface2.extendedAbstractImplementedMultipleGetter
// - Super.extendedAbstractGetter
// - Super.extendedAbstractImplementedGetter
// - Super.extendedAbstractImplementedMultipleGetter
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:22:11: Context: 'Interface1.extendedAbstractImplementedGetter' is defined here.
+// int get extendedAbstractImplementedGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:26:11: Context: 'Interface1.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:32:11: Context: 'Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
+// int get extendedAbstractImplementedMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.expect
index 7d6110d..2bb4d30 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod
-// - AbstractClass.Super.extendedAbstractImplementedMultipleMethod%Interface1.extendedAbstractImplementedMultipleMethod%Interface2.extendedAbstractImplementedMultipleMethod
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.extendedAbstractImplementedMultipleMethod
+// - Interface2.extendedAbstractImplementedMultipleMethod
+// - Super.extendedAbstractImplementedMethod
+// - Super.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractMethod
// Try to either
// - provide an implementation,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleMethod%Interface1.extendedAbstractImplementedMultipleMethod%Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:16:8: Context: 'Super.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.extendedAbstractImplementedMultipleMethod
+// - Interface2.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractImplementedMethod
// - Super.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractMethod
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
// void extendedAbstractImplementedMethod();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.transformed.expect
index 7d6110d..2bb4d30 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.transformed.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod
-// - AbstractClass.Super.extendedAbstractImplementedMultipleMethod%Interface1.extendedAbstractImplementedMultipleMethod%Interface2.extendedAbstractImplementedMultipleMethod
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.extendedAbstractImplementedMultipleMethod
+// - Interface2.extendedAbstractImplementedMultipleMethod
+// - Super.extendedAbstractImplementedMethod
+// - Super.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractMethod
// Try to either
// - provide an implementation,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleMethod%Interface1.extendedAbstractImplementedMultipleMethod%Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:16:8: Context: 'Super.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.extendedAbstractImplementedMultipleMethod
+// - Interface2.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractImplementedMethod
// - Super.extendedAbstractImplementedMultipleMethod
// - Super.extendedAbstractMethod
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:22:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:32:8: Context: 'Interface2.extendedAbstractImplementedMultipleMethod' is defined here.
+// void extendedAbstractImplementedMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
// void extendedAbstractImplementedMethod();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.expect
index 9a3a3e9..e2cfcb3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedMultipleSetter=%Interface1.extendedAbstractImplementedMultipleSetter=%Interface2.extendedAbstractImplementedMultipleSetter==
-// - AbstractClass.Super.extendedAbstractImplementedSetter=%Interface1.extendedAbstractImplementedSetter==
+// - Interface1.extendedAbstractImplementedMultipleSetter=
+// - Interface1.extendedAbstractImplementedSetter=
+// - Interface2.extendedAbstractImplementedMultipleSetter=
+// - Super.extendedAbstractImplementedMultipleSetter=
+// - Super.extendedAbstractImplementedSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleSetter=%Interface1.extendedAbstractImplementedMultipleSetter=%Interface2.extendedAbstractImplementedMultipleSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedSetter=%Interface1.extendedAbstractImplementedSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:12:12: Context: 'Super.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int value);
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMultipleSetter=
+// - Interface1.extendedAbstractImplementedSetter=
+// - Interface2.extendedAbstractImplementedMultipleSetter=
// - Super.extendedAbstractImplementedMultipleSetter=
// - Super.extendedAbstractImplementedSetter=
// - Super.extendedAbstractSetter=
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
// void set extendedAbstractImplementedMultipleSetter(int value);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.transformed.expect
index 9a3a3e9..e2cfcb3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.transformed.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Super.extendedAbstractImplementedMultipleSetter=%Interface1.extendedAbstractImplementedMultipleSetter=%Interface2.extendedAbstractImplementedMultipleSetter==
-// - AbstractClass.Super.extendedAbstractImplementedSetter=%Interface1.extendedAbstractImplementedSetter==
+// - Interface1.extendedAbstractImplementedMultipleSetter=
+// - Interface1.extendedAbstractImplementedSetter=
+// - Interface2.extendedAbstractImplementedMultipleSetter=
+// - Super.extendedAbstractImplementedMultipleSetter=
+// - Super.extendedAbstractImplementedSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -14,17 +17,29 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleSetter=%Interface1.extendedAbstractImplementedMultipleSetter=%Interface2.extendedAbstractImplementedMultipleSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedSetter=%Interface1.extendedAbstractImplementedSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:12:12: Context: 'Super.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int value);
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMultipleSetter=
+// - Interface1.extendedAbstractImplementedSetter=
+// - Interface2.extendedAbstractImplementedMultipleSetter=
// - Super.extendedAbstractImplementedMultipleSetter=
// - Super.extendedAbstractImplementedSetter=
// - Super.extendedAbstractSetter=
@@ -36,6 +51,15 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:22:12: Context: 'Interface1.extendedAbstractImplementedSetter=' is defined here.
+// void set extendedAbstractImplementedSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:32:12: Context: 'Interface2.extendedAbstractImplementedMultipleSetter=' is defined here.
+// void set extendedAbstractImplementedMultipleSetter(int value) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedMultipleSetter=' is defined here.
// void set extendedAbstractImplementedMultipleSetter(int value);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
index d886bdb..fe7b938 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
@@ -2,17 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field1' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:6:7: Context: The return type of the method 'Super.field1' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field1'.
-// Change to a subtype of 'int'.
-// num field1 = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:23:16: Context: This is the overridden method ('field1').
-// abstract int field1;
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The return type of the method 'Class.field2' is 'String', which does not match the return type, 'num', of the overridden method, 'Super.field2'.
// Change to a subtype of 'num'.
// abstract String field2;
@@ -21,17 +10,6 @@
// num field2 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field2' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: The return type of the method 'Super.field2' is 'num', which does not match the return type, 'String', of the overridden method, 'Class.field2'.
-// Change to a subtype of 'String'.
-// num field2 = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Context: This is the overridden method ('field2').
-// abstract String field2;
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The return type of the method 'Class.field2' is 'String', which does not match the return type, 'int', of the overridden method, 'Interface.field2'.
// Change to a subtype of 'int'.
// abstract String field2;
@@ -56,17 +34,6 @@
// covariant int field2 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field3' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:8:7: Context: The return type of the method 'Super.field3' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field3'.
-// Change to a subtype of 'int'.
-// num field3 = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:25:16: Context: This is the overridden method ('field3').
-// abstract int field3;
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:25:16: Error: The parameter '#externalFieldValue' of the method 'Class.field3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.field3'.
// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
// abstract int field3;
@@ -75,17 +42,6 @@
// num field3 = 0;
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field4' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:10:17: Context: The return type of the method 'Super.field4' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field4'.
-// Change to a subtype of 'int'.
-// covariant num field4 = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:27:16: Context: This is the overridden method ('field4').
-// abstract int field4;
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:28:16: Error: The return type of the method 'Class.field5' is 'num', which does not match the return type, 'int', of the overridden method, 'Super.field5'.
// Change to a subtype of 'int'.
// abstract num field5;
@@ -102,6 +58,50 @@
// int field5 = 0;
// ^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field1' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:6:7: Context: The return type of the method 'Super.field1' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field1'.
+// Change to a subtype of 'int'.
+// num field1 = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:23:16: Context: This is the overridden method ('field1').
+// abstract int field1;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: The return type of the method 'Super.field2' is 'num', which does not match the return type, 'String', of the overridden method, 'Class.field2'.
+// Change to a subtype of 'String'.
+// num field2 = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Context: This is the overridden method ('field2').
+// abstract String field2;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field3' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:8:7: Context: The return type of the method 'Super.field3' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field3'.
+// Change to a subtype of 'int'.
+// num field3 = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:25:16: Context: This is the overridden method ('field3').
+// abstract int field3;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:22:7: Error: The implementation of 'field4' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:10:17: Context: The return type of the method 'Super.field4' is 'num', which does not match the return type, 'int', of the overridden method, 'Class.field4'.
+// Change to a subtype of 'int'.
+// covariant num field4 = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:27:16: Context: This is the overridden method ('field4').
+// abstract int field4;
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
index 9e0138f..e46c242 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
@@ -10,17 +10,6 @@
// void method2(num n) {}
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:22:7: Error: The implementation of 'method2' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:20: Context: The parameter 'n' of the method 'Super.method2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.method2'.
-// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
-// void method2(num n) {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:8: Context: This is the overridden method ('method2').
-// void method2(String i);
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:23: Error: The parameter 'i' of the method 'Class.method2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.method2'.
// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
// void method2(String i);
@@ -37,6 +26,17 @@
// void method3(num n) {}
// ^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:22:7: Error: The implementation of 'method2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:20: Context: The parameter 'n' of the method 'Super.method2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.method2'.
+// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
+// void method2(num n) {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:24:8: Context: This is the overridden method ('method2').
+// void method2(String i);
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
index a58eb8f..a95406c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
@@ -10,17 +10,6 @@
// void set setter2(num n) {}
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:22:7: Error: The implementation of 'setter2' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super implements Interface {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:7:24: Context: The parameter 'n' of the method 'Super.setter2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.setter2'.
-// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
-// void set setter2(num n) {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:12: Context: This is the overridden method ('setter2').
-// void set setter2(String i);
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:27: Error: The parameter 'i' of the method 'Class.setter2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.setter2'.
// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
// void set setter2(String i);
@@ -37,6 +26,17 @@
// void set setter3(num n) {}
// ^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:22:7: Error: The implementation of 'setter2' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super implements Interface {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:7:24: Context: The parameter 'n' of the method 'Super.setter2' has type 'num', which does not match the corresponding type, 'String', in the overridden method, 'Class.setter2'.
+// Change to a supertype of 'String', or, for a covariant parameter, a subtype.
+// void set setter2(num n) {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:24:12: Context: This is the overridden method ('setter2').
+// void set setter2(String i);
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
index 638bf6e..e9fa156 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
@@ -3,16 +3,18 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1
-// - AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1=
-// - AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2
-// - AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2=
-// - AbstractClass.Super.extendedAbstractCovariantImplementedField%Interface1.extendedAbstractCovariantImplementedField
-// - AbstractClass.Super.extendedAbstractCovariantImplementedField=%Interface1.extendedAbstractCovariantImplementedField=
-// - AbstractClass.Super.extendedAbstractImplementedCovariantField%Interface1.extendedAbstractImplementedCovariantField
-// - AbstractClass.Super.extendedAbstractImplementedCovariantField=%Interface1.extendedAbstractImplementedCovariantField=
+// - Interface1.extendedAbstractCovariantImplementedField
+// - Interface1.extendedAbstractImplementedCovariantField
+// - Interface1.implementsMultipleCovariantField1
+// - Interface1.implementsMultipleCovariantField2
+// - Interface2.implementsMultipleCovariantField1
+// - Interface2.implementsMultipleCovariantField2
// - Super.extendedAbstractCovariantField
// - Super.extendedAbstractCovariantField=
+// - Super.extendedAbstractCovariantImplementedField
+// - Super.extendedAbstractCovariantImplementedField=
+// - Super.extendedAbstractImplementedCovariantField
+// - Super.extendedAbstractImplementedCovariantField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -21,38 +23,46 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedField%Interface1.extendedAbstractCovariantImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedField=%Interface1.extendedAbstractCovariantImplementedField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantField%Interface1.extendedAbstractImplementedCovariantField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantField=%Interface1.extendedAbstractImplementedCovariantField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+// int extendedAbstractCovariantImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+// covariant int extendedAbstractImplementedCovariantField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
+// covariant int implementsMultipleCovariantField1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:30:7: Context: 'Interface1.implementsMultipleCovariantField2' is defined here.
+// int implementsMultipleCovariantField2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:34:7: Context: 'Interface2.implementsMultipleCovariantField1' is defined here.
+// int implementsMultipleCovariantField1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:36:17: Context: 'Interface2.implementsMultipleCovariantField2' is defined here.
+// covariant int implementsMultipleCovariantField2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField' is defined here.
// abstract covariant int extendedAbstractCovariantField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField=' is defined here.
// abstract covariant int extendedAbstractCovariantField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField' is defined here.
+// abstract covariant int extendedAbstractCovariantImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField=' is defined here.
+// abstract covariant int extendedAbstractCovariantImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField' is defined here.
+// abstract int extendedAbstractImplementedCovariantField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField=' is defined here.
+// abstract int extendedAbstractImplementedCovariantField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedField
+// - Interface1.extendedAbstractImplementedCovariantField
// - Interface1.implementsMultipleCovariantField1
// - Interface1.implementsMultipleCovariantField2
// - Interface2.implementsMultipleCovariantField1
@@ -71,6 +81,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+// int extendedAbstractCovariantImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+// covariant int extendedAbstractImplementedCovariantField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
// covariant int implementsMultipleCovariantField1 = 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
index 638bf6e..e9fa156 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
@@ -3,16 +3,18 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1
-// - AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1=
-// - AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2
-// - AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2=
-// - AbstractClass.Super.extendedAbstractCovariantImplementedField%Interface1.extendedAbstractCovariantImplementedField
-// - AbstractClass.Super.extendedAbstractCovariantImplementedField=%Interface1.extendedAbstractCovariantImplementedField=
-// - AbstractClass.Super.extendedAbstractImplementedCovariantField%Interface1.extendedAbstractImplementedCovariantField
-// - AbstractClass.Super.extendedAbstractImplementedCovariantField=%Interface1.extendedAbstractImplementedCovariantField=
+// - Interface1.extendedAbstractCovariantImplementedField
+// - Interface1.extendedAbstractImplementedCovariantField
+// - Interface1.implementsMultipleCovariantField1
+// - Interface1.implementsMultipleCovariantField2
+// - Interface2.implementsMultipleCovariantField1
+// - Interface2.implementsMultipleCovariantField2
// - Super.extendedAbstractCovariantField
// - Super.extendedAbstractCovariantField=
+// - Super.extendedAbstractCovariantImplementedField
+// - Super.extendedAbstractCovariantImplementedField=
+// - Super.extendedAbstractImplementedCovariantField
+// - Super.extendedAbstractImplementedCovariantField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -21,38 +23,46 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField1%Interface2.implementsMultipleCovariantField1=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantField2%Interface2.implementsMultipleCovariantField2=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedField%Interface1.extendedAbstractCovariantImplementedField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedField=%Interface1.extendedAbstractCovariantImplementedField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantField%Interface1.extendedAbstractImplementedCovariantField' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantField=%Interface1.extendedAbstractImplementedCovariantField=' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+// int extendedAbstractCovariantImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+// covariant int extendedAbstractImplementedCovariantField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
+// covariant int implementsMultipleCovariantField1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:30:7: Context: 'Interface1.implementsMultipleCovariantField2' is defined here.
+// int implementsMultipleCovariantField2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:34:7: Context: 'Interface2.implementsMultipleCovariantField1' is defined here.
+// int implementsMultipleCovariantField1 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:36:17: Context: 'Interface2.implementsMultipleCovariantField2' is defined here.
+// covariant int implementsMultipleCovariantField2 = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField' is defined here.
// abstract covariant int extendedAbstractCovariantField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:8:26: Context: 'Super.extendedAbstractCovariantField=' is defined here.
// abstract covariant int extendedAbstractCovariantField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField' is defined here.
+// abstract covariant int extendedAbstractCovariantImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:12:26: Context: 'Super.extendedAbstractCovariantImplementedField=' is defined here.
+// abstract covariant int extendedAbstractCovariantImplementedField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField' is defined here.
+// abstract int extendedAbstractImplementedCovariantField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:16:16: Context: 'Super.extendedAbstractImplementedCovariantField=' is defined here.
+// abstract int extendedAbstractImplementedCovariantField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedField
+// - Interface1.extendedAbstractImplementedCovariantField
// - Interface1.implementsMultipleCovariantField1
// - Interface1.implementsMultipleCovariantField2
// - Interface2.implementsMultipleCovariantField1
@@ -71,6 +81,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:22:7: Context: 'Interface1.extendedAbstractCovariantImplementedField' is defined here.
+// int extendedAbstractCovariantImplementedField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:26:17: Context: 'Interface1.extendedAbstractImplementedCovariantField' is defined here.
+// covariant int extendedAbstractImplementedCovariantField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart:28:17: Context: 'Interface1.implementsMultipleCovariantField1' is defined here.
// covariant int implementsMultipleCovariantField1 = 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
index a4f6917..e15c8ba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
@@ -3,11 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantMethod1%Interface2.implementsMultipleCovariantMethod1
-// - AbstractClass.Interface1.implementsMultipleCovariantMethod2%Interface2.implementsMultipleCovariantMethod2
-// - AbstractClass.Super.extendedAbstractCovariantImplementedMethod%Interface1.extendedAbstractCovariantImplementedMethod
-// - AbstractClass.Super.extendedAbstractImplementedCovariantMethod%Interface1.extendedAbstractImplementedCovariantMethod
+// - Interface1.extendedAbstractCovariantImplementedMethod
+// - Interface1.extendedAbstractImplementedCovariantMethod
+// - Interface1.implementsMultipleCovariantMethod1
+// - Interface1.implementsMultipleCovariantMethod2
+// - Interface2.implementsMultipleCovariantMethod1
+// - Interface2.implementsMultipleCovariantMethod2
+// - Super.extendedAbstractCovariantImplementedMethod
// - Super.extendedAbstractCovariantMethod
+// - Super.extendedAbstractImplementedCovariantMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -16,23 +20,37 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantMethod1%Interface2.implementsMultipleCovariantMethod1' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantMethod2%Interface2.implementsMultipleCovariantMethod2' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedMethod%Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantMethod%Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
+// void implementsMultipleCovariantMethod1(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:30:8: Context: 'Interface1.implementsMultipleCovariantMethod2' is defined here.
+// void implementsMultipleCovariantMethod2(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:34:8: Context: 'Interface2.implementsMultipleCovariantMethod1' is defined here.
+// void implementsMultipleCovariantMethod1(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:36:8: Context: 'Interface2.implementsMultipleCovariantMethod2' is defined here.
+// void implementsMultipleCovariantMethod2(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:12:8: Context: 'Super.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(covariant int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
// void extendedAbstractCovariantMethod(covariant int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:16:8: Context: 'Super.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedMethod
+// - Interface1.extendedAbstractImplementedCovariantMethod
// - Interface1.implementsMultipleCovariantMethod1
// - Interface1.implementsMultipleCovariantMethod2
// - Interface2.implementsMultipleCovariantMethod1
@@ -48,6 +66,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
// void implementsMultipleCovariantMethod1(covariant int i) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
index a4f6917..e15c8ba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
@@ -3,11 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantMethod1%Interface2.implementsMultipleCovariantMethod1
-// - AbstractClass.Interface1.implementsMultipleCovariantMethod2%Interface2.implementsMultipleCovariantMethod2
-// - AbstractClass.Super.extendedAbstractCovariantImplementedMethod%Interface1.extendedAbstractCovariantImplementedMethod
-// - AbstractClass.Super.extendedAbstractImplementedCovariantMethod%Interface1.extendedAbstractImplementedCovariantMethod
+// - Interface1.extendedAbstractCovariantImplementedMethod
+// - Interface1.extendedAbstractImplementedCovariantMethod
+// - Interface1.implementsMultipleCovariantMethod1
+// - Interface1.implementsMultipleCovariantMethod2
+// - Interface2.implementsMultipleCovariantMethod1
+// - Interface2.implementsMultipleCovariantMethod2
+// - Super.extendedAbstractCovariantImplementedMethod
// - Super.extendedAbstractCovariantMethod
+// - Super.extendedAbstractImplementedCovariantMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -16,23 +20,37 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantMethod1%Interface2.implementsMultipleCovariantMethod1' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantMethod2%Interface2.implementsMultipleCovariantMethod2' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedMethod%Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantMethod%Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
+// void implementsMultipleCovariantMethod1(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:30:8: Context: 'Interface1.implementsMultipleCovariantMethod2' is defined here.
+// void implementsMultipleCovariantMethod2(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:34:8: Context: 'Interface2.implementsMultipleCovariantMethod1' is defined here.
+// void implementsMultipleCovariantMethod1(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:36:8: Context: 'Interface2.implementsMultipleCovariantMethod2' is defined here.
+// void implementsMultipleCovariantMethod2(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:12:8: Context: 'Super.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(covariant int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
// void extendedAbstractCovariantMethod(covariant int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:16:8: Context: 'Super.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedMethod
+// - Interface1.extendedAbstractImplementedCovariantMethod
// - Interface1.implementsMultipleCovariantMethod1
// - Interface1.implementsMultipleCovariantMethod2
// - Interface2.implementsMultipleCovariantMethod1
@@ -48,6 +66,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:22:8: Context: 'Interface1.extendedAbstractCovariantImplementedMethod' is defined here.
+// void extendedAbstractCovariantImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:26:8: Context: 'Interface1.extendedAbstractImplementedCovariantMethod' is defined here.
+// void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart:28:8: Context: 'Interface1.implementsMultipleCovariantMethod1' is defined here.
// void implementsMultipleCovariantMethod1(covariant int i) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
index 5aca172..bb95986 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
@@ -3,11 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantSetter1=%Interface2.implementsMultipleCovariantSetter1==
-// - AbstractClass.Interface1.implementsMultipleCovariantSetter2=%Interface2.implementsMultipleCovariantSetter2==
-// - AbstractClass.Super.extendedAbstractCovariantImplementedSetter=%Interface1.extendedAbstractCovariantImplementedSetter==
-// - AbstractClass.Super.extendedAbstractImplementedCovariantSetter=%Interface1.extendedAbstractImplementedCovariantSetter==
+// - Interface1.extendedAbstractCovariantImplementedSetter=
+// - Interface1.extendedAbstractImplementedCovariantSetter=
+// - Interface1.implementsMultipleCovariantSetter1=
+// - Interface1.implementsMultipleCovariantSetter2=
+// - Interface2.implementsMultipleCovariantSetter1=
+// - Interface2.implementsMultipleCovariantSetter2=
+// - Super.extendedAbstractCovariantImplementedSetter=
// - Super.extendedAbstractCovariantSetter=
+// - Super.extendedAbstractImplementedCovariantSetter=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -16,23 +20,37 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantSetter1=%Interface2.implementsMultipleCovariantSetter1==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantSetter2=%Interface2.implementsMultipleCovariantSetter2==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedSetter=%Interface1.extendedAbstractCovariantImplementedSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantSetter=%Interface1.extendedAbstractImplementedCovariantSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
+// void set implementsMultipleCovariantSetter1(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:30:12: Context: 'Interface1.implementsMultipleCovariantSetter2=' is defined here.
+// void set implementsMultipleCovariantSetter2(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:34:12: Context: 'Interface2.implementsMultipleCovariantSetter1=' is defined here.
+// void set implementsMultipleCovariantSetter1(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:36:12: Context: 'Interface2.implementsMultipleCovariantSetter2=' is defined here.
+// void set implementsMultipleCovariantSetter2(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:12:12: Context: 'Super.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(covariant int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:8:12: Context: 'Super.extendedAbstractCovariantSetter=' is defined here.
// void set extendedAbstractCovariantSetter(covariant int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedSetter=
+// - Interface1.extendedAbstractImplementedCovariantSetter=
// - Interface1.implementsMultipleCovariantSetter1=
// - Interface1.implementsMultipleCovariantSetter2=
// - Interface2.implementsMultipleCovariantSetter1=
@@ -48,6 +66,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
// void set implementsMultipleCovariantSetter1(covariant int i) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
index 5aca172..bb95986 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
@@ -3,11 +3,15 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:41:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementsMultipleCovariantSetter1=%Interface2.implementsMultipleCovariantSetter1==
-// - AbstractClass.Interface1.implementsMultipleCovariantSetter2=%Interface2.implementsMultipleCovariantSetter2==
-// - AbstractClass.Super.extendedAbstractCovariantImplementedSetter=%Interface1.extendedAbstractCovariantImplementedSetter==
-// - AbstractClass.Super.extendedAbstractImplementedCovariantSetter=%Interface1.extendedAbstractImplementedCovariantSetter==
+// - Interface1.extendedAbstractCovariantImplementedSetter=
+// - Interface1.extendedAbstractImplementedCovariantSetter=
+// - Interface1.implementsMultipleCovariantSetter1=
+// - Interface1.implementsMultipleCovariantSetter2=
+// - Interface2.implementsMultipleCovariantSetter1=
+// - Interface2.implementsMultipleCovariantSetter2=
+// - Super.extendedAbstractCovariantImplementedSetter=
// - Super.extendedAbstractCovariantSetter=
+// - Super.extendedAbstractImplementedCovariantSetter=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -16,23 +20,37 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantSetter1=%Interface2.implementsMultipleCovariantSetter1==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Interface1.implementsMultipleCovariantSetter2=%Interface2.implementsMultipleCovariantSetter2==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractCovariantImplementedSetter=%Interface1.extendedAbstractCovariantImplementedSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:39:16: Context: 'AbstractClass.Super.extendedAbstractImplementedCovariantSetter=%Interface1.extendedAbstractImplementedCovariantSetter==' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
+// void set implementsMultipleCovariantSetter1(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:30:12: Context: 'Interface1.implementsMultipleCovariantSetter2=' is defined here.
+// void set implementsMultipleCovariantSetter2(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:34:12: Context: 'Interface2.implementsMultipleCovariantSetter1=' is defined here.
+// void set implementsMultipleCovariantSetter1(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:36:12: Context: 'Interface2.implementsMultipleCovariantSetter2=' is defined here.
+// void set implementsMultipleCovariantSetter2(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:12:12: Context: 'Super.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(covariant int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:8:12: Context: 'Super.extendedAbstractCovariantSetter=' is defined here.
// void set extendedAbstractCovariantSetter(covariant int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:16:12: Context: 'Super.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractCovariantImplementedSetter=
+// - Interface1.extendedAbstractImplementedCovariantSetter=
// - Interface1.implementsMultipleCovariantSetter1=
// - Interface1.implementsMultipleCovariantSetter2=
// - Interface2.implementsMultipleCovariantSetter1=
@@ -48,6 +66,12 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:22:12: Context: 'Interface1.extendedAbstractCovariantImplementedSetter=' is defined here.
+// void set extendedAbstractCovariantImplementedSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:26:12: Context: 'Interface1.extendedAbstractImplementedCovariantSetter=' is defined here.
+// void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart:28:12: Context: 'Interface1.implementsMultipleCovariantSetter1=' is defined here.
// void set implementsMultipleCovariantSetter1(covariant int i) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.expect
index 613c55c..894fe23 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.expect
@@ -2,28 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedGetterMixedInField'.
-// abstract class Class extends Super
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: The return type of the method 'Mixin.extendedGetterMixedInField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterMixedInField'.
-// Change to a subtype of 'String'.
-// int extendedGetterMixedInField = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is the overridden method ('extendedGetterMixedInField').
-// String get extendedGetterMixedInField => '';
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Super with Mixin' inherits multiple members named 'extendedGetterMixedInField' with incompatible signatures.
-// Try adding a declaration of 'extendedGetterMixedInField' to 'Super with Mixin'.
-// abstract class Class extends Super
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: This is one of the overridden members.
-// int extendedGetterMixedInField = 0;
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is one of the overridden members.
-// String get extendedGetterMixedInField => '';
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
// abstract class Class extends Super
// ^^^^^^^^^^^^^^^^^^^^...
@@ -52,12 +30,15 @@
// final String extendedFieldMixedInSetter = '';
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:90:7: Error: The return type of the method 'Class.extendedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterDeclaredField'.
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedGetterMixedInField'.
+// abstract class Class extends Super
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:28:7: Context: The return type of the method 'Mixin.extendedGetterMixedInField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterMixedInField'.
// Change to a subtype of 'String'.
-// int extendedGetterDeclaredField = 0;
+// int extendedGetterMixedInField = 0;
// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:6:14: Context: This is the overridden method ('extendedGetterDeclaredField').
-// String get extendedGetterDeclaredField => '';
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:7:14: Context: This is the overridden method ('extendedGetterMixedInField').
+// String get extendedGetterMixedInField => '';
// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:93:16: Error: The type 'String' of the field 'Class.extendedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredField'.
@@ -74,14 +55,6 @@
// void set extendedSetterDeclaredGetter(int value) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:96:7: Error: The return type of the method 'Class.mixedInGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super with Mixin.mixedInGetterDeclaredField'.
-// Change to a subtype of 'String'.
-// int mixedInGetterDeclaredField = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the overridden method ('mixedInGetterDeclaredField').
-// abstract class Class extends Super
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:99:16: Error: The type 'String' of the field 'Class.mixedInSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredField'.
// final String mixedInSetterDeclaredField = '';
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -96,14 +69,6 @@
// abstract class Class extends Super
// ^^^^^^^^^^^^^^^^^^^^...
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:102:7: Error: The return type of the method 'Class.implementedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Interface1.implementedGetterDeclaredField'.
-// Change to a subtype of 'String'.
-// int implementedGetterDeclaredField = 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:63:14: Context: This is the overridden method ('implementedGetterDeclaredField').
-// String get implementedGetterDeclaredField => '';
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:105:16: Error: The type 'String' of the field 'Class.implementedSetterDeclaredField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredField'.
// final String implementedSetterDeclaredField = '';
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -198,9 +163,9 @@
// Try adding a declaration of 'Mixin.mixedInGetterImplementedField' to 'Class'.
// abstract class Class extends Super
// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is one of the overridden members.
-// abstract class Class extends Super
-// ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:35:14: Context: This is one of the overridden members.
+// String get mixedInGetterImplementedField => '';
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is one of the overridden members.
// int mixedInGetterImplementedField = 0;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -397,6 +362,30 @@
// void set implementedSetterImplementedGetter(int value) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:90:7: Error: The return type of the method 'Class.extendedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super.extendedGetterDeclaredField'.
+// Change to a subtype of 'String'.
+// int extendedGetterDeclaredField = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:6:14: Context: This is the overridden method ('extendedGetterDeclaredField').
+// String get extendedGetterDeclaredField => '';
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:96:7: Error: The return type of the method 'Class.mixedInGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Super with Mixin.mixedInGetterDeclaredField'.
+// Change to a subtype of 'String'.
+// int mixedInGetterDeclaredField = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the overridden method ('mixedInGetterDeclaredField').
+// abstract class Class extends Super
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:102:7: Error: The return type of the method 'Class.implementedGetterDeclaredField' is 'int', which does not match the return type, 'String', of the overridden method, 'Interface1.implementedGetterDeclaredField'.
+// Change to a subtype of 'String'.
+// int implementedGetterDeclaredField = 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:63:14: Context: This is the overridden method ('implementedGetterDeclaredField').
+// String get implementedGetterDeclaredField => '';
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -505,6 +494,8 @@
return super.{self::Mixin::mixedInGetterDeclaredSetter};
mixin-super-stub get mixedInFieldDeclaredSetter() → core::String
return super.{self::Mixin::mixedInFieldDeclaredSetter};
+ mixin-super-stub get extendedGetterMixedInField() → core::int
+ return super.{self::Mixin::extendedGetterMixedInField};
mixin-super-stub set extendedGetterMixedInField(core::int value) → void
return super.{self::Mixin::extendedGetterMixedInField} = value;
mixin-super-stub get extendedSetterMixedInField() → core::String
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.expect
index 46a2aa3..4701040 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.expect
@@ -29,10 +29,12 @@
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField=
// - AbstractClass.declareAbstractImplementMultipleField
// - AbstractClass.declareAbstractImplementMultipleField=
+// - Interface1.declareAbstractImplementMultipleField
+// - Interface1.implementMultipleField
+// - Interface2.declareAbstractImplementMultipleField
+// - Interface2.implementMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -41,18 +43,24 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField=' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
// abstract int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField=' is defined here.
// abstract int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:10:7: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+// int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:6:7: Context: 'Interface1.implementMultipleField' is defined here.
+// int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:18:7: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+// int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+// int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.transformed.expect
index 46a2aa3..4701040 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.transformed.expect
@@ -29,10 +29,12 @@
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField=
// - AbstractClass.declareAbstractImplementMultipleField
// - AbstractClass.declareAbstractImplementMultipleField=
+// - Interface1.declareAbstractImplementMultipleField
+// - Interface1.implementMultipleField
+// - Interface2.declareAbstractImplementMultipleField
+// - Interface2.implementMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -41,18 +43,24 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField=' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
// abstract int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:30:16: Context: 'AbstractClass.declareAbstractImplementMultipleField=' is defined here.
// abstract int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:10:7: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+// int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:6:7: Context: 'Interface1.implementMultipleField' is defined here.
+// int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:18:7: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+// int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+// int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.expect
index eef1c6c..5ebd497f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField
// - AbstractClass.declareAbstractImplementMultipleField
+// - Interface1.declareAbstractImplementMultipleField
+// - Interface1.implementMultipleField
+// - Interface2.declareAbstractImplementMultipleField
+// - Interface2.implementMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:30:22: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
// abstract final int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:10:13: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+// final int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:6:13: Context: 'Interface1.implementMultipleField' is defined here.
+// final int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:18:13: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+// final int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+// final int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.transformed.expect
index eef1c6c..5ebd497f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.transformed.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField
// - AbstractClass.declareAbstractImplementMultipleField
+// - Interface1.declareAbstractImplementMultipleField
+// - Interface1.implementMultipleField
+// - Interface2.declareAbstractImplementMultipleField
+// - Interface2.implementMultipleField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleField%Interface2.implementMultipleField' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:30:22: Context: 'AbstractClass.declareAbstractImplementMultipleField' is defined here.
// abstract final int declareAbstractImplementMultipleField;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:10:13: Context: 'Interface1.declareAbstractImplementMultipleField' is defined here.
+// final int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:6:13: Context: 'Interface1.implementMultipleField' is defined here.
+// final int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:18:13: Context: 'Interface2.declareAbstractImplementMultipleField' is defined here.
+// final int declareAbstractImplementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+// final int implementMultipleField = 0;
+// ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.expect
index 0083177..538cee7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleGetter%Interface2.implementMultipleGetter
// - AbstractClass.declareAbstractImplementMultipleGetter
+// - Interface1.declareAbstractImplementMultipleGetter
+// - Interface1.implementMultipleGetter
+// - Interface2.declareAbstractImplementMultipleGetter
+// - Interface2.implementMultipleGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleGetter%Interface2.implementMultipleGetter' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:30:11: Context: 'AbstractClass.declareAbstractImplementMultipleGetter' is defined here.
// int get declareAbstractImplementMultipleGetter;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:10:11: Context: 'Interface1.declareAbstractImplementMultipleGetter' is defined here.
+// int get declareAbstractImplementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:6:11: Context: 'Interface1.implementMultipleGetter' is defined here.
+// int get implementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:18:11: Context: 'Interface2.declareAbstractImplementMultipleGetter' is defined here.
+// int get declareAbstractImplementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+// int get implementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.transformed.expect
index 0083177..538cee7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.transformed.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleGetter%Interface2.implementMultipleGetter
// - AbstractClass.declareAbstractImplementMultipleGetter
+// - Interface1.declareAbstractImplementMultipleGetter
+// - Interface1.implementMultipleGetter
+// - Interface2.declareAbstractImplementMultipleGetter
+// - Interface2.implementMultipleGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleGetter%Interface2.implementMultipleGetter' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:30:11: Context: 'AbstractClass.declareAbstractImplementMultipleGetter' is defined here.
// int get declareAbstractImplementMultipleGetter;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:10:11: Context: 'Interface1.declareAbstractImplementMultipleGetter' is defined here.
+// int get declareAbstractImplementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:6:11: Context: 'Interface1.implementMultipleGetter' is defined here.
+// int get implementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:18:11: Context: 'Interface2.declareAbstractImplementMultipleGetter' is defined here.
+// int get declareAbstractImplementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+// int get implementMultipleGetter => 0;
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.expect
index 3bbc542..66a5d5e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleMethod%Interface2.implementMultipleMethod
// - AbstractClass.declareAbstractImplementMultipleMethod
+// - Interface1.declareAbstractImplementMultipleMethod
+// - Interface1.implementMultipleMethod
+// - Interface2.declareAbstractImplementMultipleMethod
+// - Interface2.implementMultipleMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleMethod%Interface2.implementMultipleMethod' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:30:8: Context: 'AbstractClass.declareAbstractImplementMultipleMethod' is defined here.
// void declareAbstractImplementMultipleMethod();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:10:8: Context: 'Interface1.declareAbstractImplementMultipleMethod' is defined here.
+// void declareAbstractImplementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:6:8: Context: 'Interface1.implementMultipleMethod' is defined here.
+// void implementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:18:8: Context: 'Interface2.declareAbstractImplementMultipleMethod' is defined here.
+// void declareAbstractImplementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+// void implementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.transformed.expect
index 3bbc542..66a5d5e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.transformed.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleMethod%Interface2.implementMultipleMethod
// - AbstractClass.declareAbstractImplementMultipleMethod
+// - Interface1.declareAbstractImplementMultipleMethod
+// - Interface1.implementMultipleMethod
+// - Interface2.declareAbstractImplementMultipleMethod
+// - Interface2.implementMultipleMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleMethod%Interface2.implementMultipleMethod' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:30:8: Context: 'AbstractClass.declareAbstractImplementMultipleMethod' is defined here.
// void declareAbstractImplementMultipleMethod();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:10:8: Context: 'Interface1.declareAbstractImplementMultipleMethod' is defined here.
+// void declareAbstractImplementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:6:8: Context: 'Interface1.implementMultipleMethod' is defined here.
+// void implementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:18:8: Context: 'Interface2.declareAbstractImplementMultipleMethod' is defined here.
+// void declareAbstractImplementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+// void implementMultipleMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.expect
index 773632f..c960de6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==
// - AbstractClass.declareAbstractImplementMultipleSetter=
+// - Interface1.declareAbstractImplementMultipleSetter=
+// - Interface1.implementMultipleSetter=
+// - Interface2.declareAbstractImplementMultipleSetter=
+// - Interface2.implementMultipleSetter=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:30:12: Context: 'AbstractClass.declareAbstractImplementMultipleSetter=' is defined here.
// void set declareAbstractImplementMultipleSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:10:12: Context: 'Interface1.declareAbstractImplementMultipleSetter=' is defined here.
+// void set declareAbstractImplementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:6:12: Context: 'Interface1.implementMultipleSetter=' is defined here.
+// void set implementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:18:12: Context: 'Interface2.declareAbstractImplementMultipleSetter=' is defined here.
+// void set declareAbstractImplementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+// void set implementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.transformed.expect
index 773632f..c960de6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.transformed.expect
@@ -25,8 +25,11 @@
// ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==
// - AbstractClass.declareAbstractImplementMultipleSetter=
+// - Interface1.declareAbstractImplementMultipleSetter=
+// - Interface1.implementMultipleSetter=
+// - Interface2.declareAbstractImplementMultipleSetter=
+// - Interface2.implementMultipleSetter=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -35,12 +38,21 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==' is defined here.
-// abstract class AbstractClass implements Interface1, Interface2 {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:30:12: Context: 'AbstractClass.declareAbstractImplementMultipleSetter=' is defined here.
// void set declareAbstractImplementMultipleSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:10:12: Context: 'Interface1.declareAbstractImplementMultipleSetter=' is defined here.
+// void set declareAbstractImplementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:6:12: Context: 'Interface1.implementMultipleSetter=' is defined here.
+// void set implementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:18:12: Context: 'Interface2.declareAbstractImplementMultipleSetter=' is defined here.
+// void set declareAbstractImplementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+// void set implementMultipleSetter(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
index 995b5ba..350fd3f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
@@ -5,43 +5,32 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
// class Class /* error */ extends LegacyClass implements SuperQ {
// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'LegacyClass.optionalArgumentsMethod'.
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
// int optionalArgumentsMethod(int i) => i;
// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart:9:16: Context: This is the overridden method ('optionalArgumentsMethod').
-// abstract class LegacyClass extends Super implements SuperExtra {}
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
// class ClassQ /* error */ extends LegacyClassQ implements Super {
// ^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'LegacyClassQ.optionalArgumentsMethod'.
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
// int? optionalArgumentsMethod(int? i) => i;
// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart:11:16: Context: This is the overridden method ('optionalArgumentsMethod').
-// abstract class LegacyClassQ extends SuperQ implements SuperExtra {}
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
// ^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'LegacyMixedIn.optionalArgumentsMethod'.
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:9:7: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
// int optionalArgumentsMethod(int i) => i;
// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart:13:16: Context: This is the overridden method ('optionalArgumentsMethod').
-// abstract class LegacyMixedIn with Super implements SuperExtra {}
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: The implementation of 'nullabilityMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
-// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
-// ^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:29: Context: The parameter 'i' of the method 'Object with Super.nullabilityMethod' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'SuperQ.nullabilityMethod'.
-// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
-// int nullabilityMethod(int i, {required int j}) => i;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: This is the overridden method ('nullabilityMethod').
-// int? nullabilityMethod(int? i, {int? j}) => i;
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: Class 'ClassMixedIn' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedIn'.
@@ -54,36 +43,14 @@
// int? nullabilityMethod(int? i, {int? j}) => i;
// ^^^^^^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:59:7: Error: The implementation of 'nullabilitySetter' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
-// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
-// ^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:8:34: Context: The parameter 'value' of the method 'Object with Super.nullabilitySetter' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'SuperQ.nullabilitySetter'.
-// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
-// void set nullabilitySetter(int value) {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:19:12: Context: This is the overridden method ('nullabilitySetter').
-// void set nullabilitySetter(int? value) {}
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
// ^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'LegacyMixedInQ.optionalArgumentsMethod'.
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:20:8: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
// int? optionalArgumentsMethod(int? i) => i;
// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart:15:16: Context: This is the overridden method ('optionalArgumentsMethod').
-// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: The implementation of 'nullabilityMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
-// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
-// ^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:17:8: Context: The return type of the method 'Object with SuperQ.nullabilityMethod' is 'int?', which does not match the return type, 'int', of the overridden method, 'Super.nullabilityMethod'.
-// Change to a subtype of 'int'.
-// int? nullabilityMethod(int? i, {int? j}) => i;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is the overridden method ('nullabilityMethod').
-// int nullabilityMethod(int i, {required int j}) => i;
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: Class 'ClassMixedInQ' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
@@ -97,51 +64,16 @@
// int nullabilityMethod(int i, {required int j}) => i;
// ^^^^^^^^^^^^^^^^^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:84:7: Error: The implementation of 'nullabilityGetter' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
-// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
-// ^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:18:12: Context: The return type of the method 'Object with SuperQ.nullabilityGetter' is 'int?', which does not match the return type, 'int', of the overridden method, 'Super.nullabilityGetter'.
-// Change to a subtype of 'int'.
-// int? get nullabilityGetter => null;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:7:11: Context: This is the overridden method ('nullabilityGetter').
-// int get nullabilityGetter => 0;
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:15:32: Error: Required named parameter 'j' must be provided.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
-// super.nullabilitySetter = null; // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityGetter; // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
// nullabilitySetter = null; // error
// ^
@@ -150,40 +82,16 @@
// var v1 = nullabilityMethod(null); // ok
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:65:32: Error: Required named parameter 'j' must be provided.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:69:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:79:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
-// super.nullabilitySetter = null; // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:90:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:94:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:100:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityGetter; // ok
-// ^
-//
import self as self;
import "in_out_in_lib2.dart" as in_;
import "in_out_in_lib1.dart" as in_2;
@@ -199,23 +107,17 @@
method test() → dynamic {
core::int i;
core::int? v1 = this.{self::Class::nullabilityMethod}(null);
- i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:15:32: Error: Required named parameter 'j' must be provided.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_2::Super::nullabilityMethod}(null);
+ i = super.{in_2::Super::nullabilityMethod}(null);
i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
- i = super.{in_2::Super::optionalArgumentsMethod}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int);
- let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::Super::optionalArgumentsMethod}(null);
+ let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
core::int? v2 = this.{self::Class::nullabilityGetter};
i = super.{in_2::Super::nullabilityGetter};
this.{self::Class::nullabilitySetter} = null;
- super.{in_2::Super::nullabilitySetter} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
- super.nullabilitySetter = null; // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+ super.{in_2::Super::nullabilitySetter} = null;
}
abstract member-signature method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?; -> in_2::Super::nullabilityMethod
abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
@@ -237,22 +139,16 @@
method test() → dynamic {
core::int i;
this.{in_::LegacyClassQ::nullabilityMethod}(null);
- i = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_2::SuperQ::nullabilityMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
+ i = super.{in_2::SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
- i = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
- let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+ let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassQ::nullabilityGetter};
- i = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityGetter; // ok
- ^" in super.{in_2::SuperQ::nullabilityGetter} as{TypeError,ForNonNullableByDefault} core::int;
- this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+ i = super.{in_2::SuperQ::nullabilityGetter};
+ this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
nullabilitySetter = null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::int;
super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -275,26 +171,20 @@
;
method test() → dynamic {
core::int i;
- invalid-type v1 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
+ invalid-type v1 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:63:31: Error: Required named parameter 'j' must be provided.
var v1 = nullabilityMethod(null); // ok
^" in this.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
- i = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:65:32: Error: Required named parameter 'j' must be provided.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
+ i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
- i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:69:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int);
- let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
+ let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
core::int v2 = this.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
this.{self::ClassMixedIn::nullabilitySetter} = null;
- super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:79:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
- super.nullabilitySetter = null; // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+ super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
}
abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
@@ -314,21 +204,15 @@
method test() → dynamic {
core::int i;
this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
- i = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:90:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
+ i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
- i = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:94:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
- let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
+ let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassMixedInQ::nullabilityGetter};
- i = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart:100:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityGetter; // ok
- ^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter} as{TypeError,ForNonNullableByDefault} core::int;
+ i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
index d8b7132..8700bf7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
@@ -2,40 +2,56 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:15:32: Error: Required named parameter 'j' must be provided.
-// i = super.nullabilityMethod(null); // ok
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// int optionalArgumentsMethod(int i) => i;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+// ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// int? optionalArgumentsMethod(int? i) => i;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
-// super.nullabilitySetter = null; // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityGetter; // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
// nullabilitySetter = null; // error
// ^
@@ -69,23 +85,17 @@
method test() → dynamic {
core::int i;
core::int? v1 = this.{self::Class::nullabilityMethod}(null);
- i = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:15:32: Error: Required named parameter 'j' must be provided.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_2::Super::nullabilityMethod}(null);
+ i = super.{in_2::Super::nullabilityMethod}(null);
i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
- i = super.{in_2::Super::optionalArgumentsMethod}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int);
- let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::Super::optionalArgumentsMethod}(null);
+ let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
core::int? v2 = this.{self::Class::nullabilityGetter};
i = super.{in_2::Super::nullabilityGetter};
this.{self::Class::nullabilitySetter} = null;
- super.{in_2::Super::nullabilitySetter} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
- super.nullabilitySetter = null; // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+ super.{in_2::Super::nullabilitySetter} = null;
}
abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_2::Super::nullabilityMethod
abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
@@ -107,22 +117,16 @@
method test() → dynamic {
core::int i;
this.{in_::LegacyClassQ::nullabilityMethod}(null);
- i = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_2::SuperQ::nullabilityMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
+ i = super.{in_2::SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
- i = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
- let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+ let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassQ::nullabilityGetter};
- i = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityGetter; // ok
- ^" in super.{in_2::SuperQ::nullabilityGetter} as{TypeError,ForNonNullableByDefault} core::int;
- this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+ i = super.{in_2::SuperQ::nullabilityGetter};
+ this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
nullabilitySetter = null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::int;
super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -149,7 +153,7 @@
i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
- let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
@@ -181,13 +185,13 @@
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
- let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassMixedInQ::nullabilityGetter};
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
- this.{self::ClassMixedInQ::nullabilitySetter} = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+ this.{self::ClassMixedInQ::nullabilitySetter} = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
nullabilitySetter = null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::int;
super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
@@ -261,8 +265,6 @@
return super.{in_2::Super::nullabilityGetter};
mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
return super.{in_2::Super::optionalArgumentsMethod}(i);
- mixin-super-stub set nullabilitySetter(core::int* value) → void
- return super.{in_2::Super::nullabilitySetter} = value;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -273,6 +275,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ mixin-super-stub set nullabilitySetter(core::int* value) → void
+ return super.{in_2::Super::nullabilitySetter} = value;
}
abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
synthetic constructor •() → in_::LegacyMixedIn*
@@ -290,8 +294,6 @@
return super.{in_2::SuperQ::nullabilityGetter};
mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
return super.{in_2::SuperQ::optionalArgumentsMethod}(i);
- mixin-super-stub set nullabilitySetter(core::int* value) → void
- return super.{in_2::SuperQ::nullabilitySetter} = value;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -302,6 +304,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ mixin-super-stub set nullabilitySetter(core::int* value) → void
+ return super.{in_2::SuperQ::nullabilitySetter} = value;
}
abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
synthetic constructor •() → in_::LegacyMixedInQ*
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
index fac4e38..68209cb 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
@@ -2,44 +2,60 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:15:33: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
-// i = super.nullabilityMethod(null); // ok
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:9:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'Class' does not conform to its interface.
+// class Class /* error */ extends LegacyClass implements SuperQ {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:9:7: Context: The method 'Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// int optionalArgumentsMethod(int i) => i;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:34:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassQ' does not conform to its interface.
+// class ClassQ /* error */ extends LegacyClassQ implements Super {
+// ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:20:8: Context: The method 'SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// int? optionalArgumentsMethod(int? i) => i;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:59:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedIn' does not conform to its interface.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:13:16: Context: The method 'Object with Super.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedIn with Super implements SuperExtra {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:84:7: Error: The implementation of 'optionalArgumentsMethod' in the non-abstract class 'ClassMixedInQ' does not conform to its interface.
+// class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart:15:16: Context: The method 'Object with SuperQ.optionalArgumentsMethod' has fewer positional arguments than those of overridden method 'SuperExtra.optionalArgumentsMethod'.
+// abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart:13:7: Context: This is the overridden method ('optionalArgumentsMethod').
+// int optionalArgumentsMethod(int i, [int? j]) => i;
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
-// super.nullabilitySetter = null; // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
// nullabilityMethod(null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityMethod(null); // ok
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.optionalArgumentsMethod(null); // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
// Try removing the extra positional arguments.
// super.optionalArgumentsMethod(null, null); // error
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
-// i = super.nullabilityGetter; // ok
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
// nullabilitySetter = null; // error
// ^
@@ -77,23 +93,17 @@
method test() → dynamic {
core::int i;
core::int? v1 = this.{self::Class::nullabilityMethod}(null);
- i = super.{in_2::Super::nullabilityMethod}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:15:33: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
- i = super.nullabilityMethod(null); // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int);
+ i = super.{in_2::Super::nullabilityMethod}(null);
i = this.{in_::LegacyClass::optionalArgumentsMethod}(null, null);
- i = super.{in_2::Super::optionalArgumentsMethod}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:19:39: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int);
- let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::Super::optionalArgumentsMethod}(null);
+ let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:21:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::Super::optionalArgumentsMethod}(null, null);
core::int? v2 = this.{self::Class::nullabilityGetter};
i = super.{in_2::Super::nullabilityGetter};
this.{self::Class::nullabilitySetter} = null;
- super.{in_2::Super::nullabilitySetter} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:29:31: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
- super.nullabilitySetter = null; // ok
- ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+ super.{in_2::Super::nullabilitySetter} = null;
}
abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_2::Super::nullabilityMethod
abstract member-signature get nullabilityGetter() → core::int?; -> in_2::Super::nullabilityGetter
@@ -114,25 +124,19 @@
;
method test() → dynamic {
core::int i;
- this.{self::ClassQ::nullabilityMethod}(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+ this.{self::ClassQ::nullabilityMethod}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:38:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
nullabilityMethod(null); // error
^" in null as{TypeError,ForNonNullableByDefault} core::int);
- i = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:40:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityMethod(null); // ok
- ^" in super.{in_2::SuperQ::nullabilityMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
+ i = super.{in_2::SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyClassQ::optionalArgumentsMethod}(null, null);
- i = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:44:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.optionalArgumentsMethod(null); // ok
- ^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null) as{TypeError,ForNonNullableByDefault} core::int;
- let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ i = super.{in_2::SuperQ::optionalArgumentsMethod}(null);
+ let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:46:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_2::SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassQ::nullabilityGetter};
- i = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:50:15: Error: A value of type 'int?' can't be assigned to a variable of type 'int' because 'int?' is nullable and 'int' isn't.
- i = super.nullabilityGetter; // ok
- ^" in super.{in_2::SuperQ::nullabilityGetter} as{TypeError,ForNonNullableByDefault} core::int;
- this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+ i = super.{in_2::SuperQ::nullabilityGetter};
+ this.{self::ClassQ::nullabilitySetter} = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:52:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
nullabilitySetter = null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::int;
super.{in_2::SuperQ::nullabilitySetter} = null;
@@ -160,7 +164,7 @@
i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityMethod}(null);
i = this.{in_::LegacyMixedIn::optionalArgumentsMethod}(null, null);
i = super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null);
- let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:71:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
@@ -188,19 +192,19 @@
;
method test() → dynamic {
core::int i;
- this.{self::ClassMixedInQ::nullabilityMethod}(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
+ this.{self::ClassMixedInQ::nullabilityMethod}(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:88:23: Error: The value 'null' can't be assigned to the parameter type 'int' because 'int' is not nullable.
nullabilityMethod(null); // error
^" in null as{TypeError,ForNonNullableByDefault} core::int);
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
i = this.{in_::LegacyMixedInQ::optionalArgumentsMethod}(null, null);
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null);
- let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
+ let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:96:34: Error: Too many positional arguments: 1 allowed, but 2 found.
Try removing the extra positional arguments.
super.optionalArgumentsMethod(null, null); // error
^" in super.{in_::_LegacyMixedInQ&Object&SuperQ::optionalArgumentsMethod}(null, null);
i = this.{self::ClassMixedInQ::nullabilityGetter};
i = super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter};
- this.{self::ClassMixedInQ::nullabilitySetter} = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
+ this.{self::ClassMixedInQ::nullabilitySetter} = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart:102:25: Error: The value 'null' can't be assigned to a variable of type 'int' because 'int' is not nullable.
nullabilitySetter = null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::int;
super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
@@ -311,8 +315,6 @@
return super.{in_2::Super::nullabilityGetter};
mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
return super.{in_2::Super::optionalArgumentsMethod}(i);
- mixin-super-stub set nullabilitySetter(core::int* value) → void
- return super.{in_2::Super::nullabilitySetter} = value;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -323,6 +325,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ mixin-super-stub set nullabilitySetter(core::int* value) → void
+ return super.{in_2::Super::nullabilitySetter} = value;
}
abstract class LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
synthetic constructor •() → in_::LegacyMixedIn*
@@ -340,8 +344,6 @@
return super.{in_2::SuperQ::nullabilityGetter};
mixin-super-stub method optionalArgumentsMethod(core::int* i) → core::int*
return super.{in_2::SuperQ::optionalArgumentsMethod}(i);
- mixin-super-stub set nullabilitySetter(core::int* value) → void
- return super.{in_2::SuperQ::nullabilitySetter} = value;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -352,6 +354,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ mixin-super-stub set nullabilitySetter(core::int* value) → void
+ return super.{in_2::SuperQ::nullabilitySetter} = value;
}
abstract class LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
synthetic constructor •() → in_::LegacyMixedInQ*
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
index d5e1037..4124088 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
-// - Interface2.Mixin.mixedInMethod%Interface2.mixedInMethod
-// - Interface2.Super.extendedMethod%Interface2.extendedMethod
+// - Interface2.extendedMethod
+// - Interface2.mixedInMethod
+// - Mixin.mixedInMethod
+// - Super with Mixin.mixedInMethod
+// - Super.extendedMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -13,12 +16,65 @@
//
// class ClassImplements implements Interface2 {}
// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: 'Interface2.Mixin.mixedInMethod%Interface2.mixedInMethod' is defined here.
-// abstract class Interface2 extends Super with Mixin {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: 'Interface2.Super.extendedMethod%Interface2.extendedMethod' is defined here.
-// abstract class Interface2 extends Super with Mixin {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:19:7: Context: 'Interface2.extendedMethod' is defined here.
+// int extendedMethod();
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:20:7: Context: 'Interface2.mixedInMethod' is defined here.
+// int mixedInMethod();
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Mixin.mixedInMethod' is defined here.
+// num mixedInMethod() => 0;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Super with Mixin.mixedInMethod' is defined here.
+// num mixedInMethod() => 0;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: 'Super.extendedMethod' is defined here.
+// num extendedMethod() => 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+// int mixedInMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+// num extendedMethod() => 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+// int extendedMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+// int mixedInMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+// num extendedMethod() => 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+// int extendedMethod();
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
// class ClassDeclaresExtends extends Super with Mixin {
@@ -64,50 +120,6 @@
// int mixedInMethod();
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
-// class ClassExtends extends Super with Mixin implements Interface1 {}
-// ^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
-// class ClassExtendsWithNoSuchMethod extends Super
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassImplements' does not conform to its interface.
-// class ClassImplements implements Interface2 {}
-// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface2.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:19:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassImplements' does not conform to its interface.
-// class ClassImplements implements Interface2 {}
-// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface2.mixedInMethod'.
-// Change to a subtype of 'int'.
-// abstract class Interface2 extends Super with Mixin {
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:20:7: Context: This is the overridden method ('mixedInMethod').
-// int mixedInMethod();
-// ^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
index 92e7e34..b0ede7c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
@@ -3,8 +3,11 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The non-abstract class 'ClassImplements' is missing implementations for these members:
-// - Interface2.Mixin.mixedInMethod%Interface2.mixedInMethod
-// - Interface2.Super.extendedMethod%Interface2.extendedMethod
+// - Interface2.extendedMethod
+// - Interface2.mixedInMethod
+// - Mixin.mixedInMethod
+// - Super with Mixin.mixedInMethod
+// - Super.extendedMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -13,12 +16,65 @@
//
// class ClassImplements implements Interface2 {}
// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: 'Interface2.Mixin.mixedInMethod%Interface2.mixedInMethod' is defined here.
-// abstract class Interface2 extends Super with Mixin {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: 'Interface2.Super.extendedMethod%Interface2.extendedMethod' is defined here.
-// abstract class Interface2 extends Super with Mixin {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:19:7: Context: 'Interface2.extendedMethod' is defined here.
+// int extendedMethod();
+// ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:20:7: Context: 'Interface2.mixedInMethod' is defined here.
+// int mixedInMethod();
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Mixin.mixedInMethod' is defined here.
+// num mixedInMethod() => 0;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:10:7: Context: 'Super with Mixin.mixedInMethod' is defined here.
+// num mixedInMethod() => 0;
+// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: 'Super.extendedMethod' is defined here.
+// num extendedMethod() => 0;
+// ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+// int mixedInMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
+// class ClassExtends extends Super with Mixin implements Interface1 {}
+// ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+// num extendedMethod() => 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+// int extendedMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:15:7: Context: This is the overridden method ('mixedInMethod').
+// int mixedInMethod();
+// ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassExtendsWithNoSuchMethod extends Super
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
+// Change to a subtype of 'int'.
+// num extendedMethod() => 0;
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
+// int extendedMethod();
+// ^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
// class ClassDeclaresExtends extends Super with Mixin {
@@ -64,50 +120,6 @@
// int mixedInMethod();
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:23:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtends' does not conform to its interface.
-// class ClassExtends extends Super with Mixin implements Interface1 {}
-// ^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:25:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassExtendsWithNoSuchMethod' does not conform to its interface.
-// class ClassExtendsWithNoSuchMethod extends Super
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface1.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:14:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassImplements' does not conform to its interface.
-// class ClassImplements implements Interface2 {}
-// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:6:7: Context: The return type of the method 'Super.extendedMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface2.extendedMethod'.
-// Change to a subtype of 'int'.
-// num extendedMethod() => 0;
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:19:7: Context: This is the overridden method ('extendedMethod').
-// int extendedMethod();
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:34:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassImplements' does not conform to its interface.
-// class ClassImplements implements Interface2 {}
-// ^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:18:16: Context: The return type of the method 'Super with Mixin.mixedInMethod' is 'num', which does not match the return type, 'int', of the overridden method, 'Interface2.mixedInMethod'.
-// Change to a subtype of 'int'.
-// abstract class Interface2 extends Super with Mixin {
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:20:7: Context: This is the overridden method ('mixedInMethod').
-// int mixedInMethod();
-// ^
-//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.expect
index b334412..f789cb9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.expect
@@ -3,10 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:11:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementedMethod
-// - AbstractClass.Interface1.implementedMultipleMethod%Interface2.implementedMultipleMethod
-// - AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod
-// - AbstractClass.Super.extendedAbstractMethod
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.implementedMethod
+// - Interface1.implementedMultipleMethod
+// - Interface2.implementedMultipleMethod
+// - Super.extendedAbstractImplementedMethod
+// - Super.extendedAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -15,20 +17,27 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Interface1.implementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Interface1.implementedMultipleMethod%Interface2.implementedMultipleMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Super.extendedAbstractMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
+// void implementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:22:8: Context: 'Interface1.implementedMultipleMethod' is defined here.
+// void implementedMultipleMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:26:8: Context: 'Interface2.implementedMultipleMethod' is defined here.
+// void implementedMultipleMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+// void extendedAbstractMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:13:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMethod
// - Interface1.implementedMethod
// - Interface1.implementedMultipleMethod
// - Interface2.implementedMultipleMethod
@@ -42,6 +51,9 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
// void implementedMethod(int i) {}
// ^^^^^^^^^^^^^^^^^
@@ -69,9 +81,7 @@
: super mem::Super::•()
;
abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
- abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
- abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -82,6 +92,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+ abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
}
@@ -95,9 +107,7 @@
: super mem::Super::•()
;
abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
- abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
- abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -108,6 +118,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+ abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.transformed.expect
index b334412..f789cb9 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.transformed.expect
@@ -3,10 +3,12 @@
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:11:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
-// - AbstractClass.Interface1.implementedMethod
-// - AbstractClass.Interface1.implementedMultipleMethod%Interface2.implementedMultipleMethod
-// - AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod
-// - AbstractClass.Super.extendedAbstractMethod
+// - Interface1.extendedAbstractImplementedMethod
+// - Interface1.implementedMethod
+// - Interface1.implementedMultipleMethod
+// - Interface2.implementedMultipleMethod
+// - Super.extendedAbstractImplementedMethod
+// - Super.extendedAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -15,20 +17,27 @@
//
// class ConcreteSub extends AbstractClass {}
// ^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Interface1.implementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Interface1.implementedMultipleMethod%Interface2.implementedMultipleMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMethod%Interface1.extendedAbstractImplementedMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:9:16: Context: 'AbstractClass.Super.extendedAbstractMethod' is defined here.
-// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
+// void implementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:22:8: Context: 'Interface1.implementedMultipleMethod' is defined here.
+// void implementedMultipleMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:26:8: Context: 'Interface2.implementedMultipleMethod' is defined here.
+// void implementedMultipleMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:12:8: Context: 'Super.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+// void extendedAbstractMethod(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart:13:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+// - Interface1.extendedAbstractImplementedMethod
// - Interface1.implementedMethod
// - Interface1.implementedMultipleMethod
// - Interface2.implementedMultipleMethod
@@ -42,6 +51,9 @@
//
// class ConcreteClass extends Super implements Interface1, Interface2 {}
// ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:18:8: Context: 'Interface1.extendedAbstractImplementedMethod' is defined here.
+// void extendedAbstractImplementedMethod(int i) {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart:20:8: Context: 'Interface1.implementedMethod' is defined here.
// void implementedMethod(int i) {}
// ^^^^^^^^^^^^^^^^^
@@ -69,9 +81,7 @@
: super mem::Super::•()
;
abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
- abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
- abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -82,6 +92,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+ abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
}
@@ -95,9 +107,7 @@
: super mem::Super::•()
;
abstract member-signature method extendedConcreteMethod(core::int* i) → void; -> mem::Super::extendedConcreteMethod
- abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
abstract member-signature method extendedConcreteImplementedMethod(core::int* i) → void; -> mem::Super::extendedConcreteImplementedMethod
- abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -108,6 +118,8 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract member-signature method extendedAbstractMethod(core::int* i) → void; -> mem::Super::extendedAbstractMethod
+ abstract member-signature method extendedAbstractImplementedMethod(core::int* i) → void; -> mem::Super::extendedAbstractImplementedMethod
abstract member-signature method implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.expect
index 31f91b2..185fc0d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.expect
@@ -77,6 +77,8 @@
// - Mixin.mixedInAbstractField=
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractMixedInAbstractField
+// - Super.extendedAbstractMixedInAbstractField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -103,6 +105,12 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractField
@@ -111,6 +119,8 @@
// - Mixin.mixedInAbstractField=
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractMixedInAbstractField
+// - Super.extendedAbstractMixedInAbstractField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -137,6 +147,12 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -177,6 +193,8 @@
return super.{self::Mixin::mixedInConcreteField};
mixin-super-stub set mixedInConcreteField(core::int value) → void
return super.{self::Mixin::mixedInConcreteField} = value;
+ abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+ abstract mixin-stub set mixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::mixedInAbstractField
mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
return super.{self::Mixin::extendedConcreteMixedInConcreteField};
mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
@@ -185,6 +203,10 @@
return super.{self::Mixin::extendedAbstractMixedInConcreteField};
mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+ abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+ abstract mixin-stub set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedAbstractMixedInAbstractField
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -199,6 +221,8 @@
return super.{self::Mixin::mixedInConcreteField};
mixin-super-stub set mixedInConcreteField(core::int value) → void
return super.{self::Mixin::mixedInConcreteField} = value;
+ abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+ abstract mixin-stub set mixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::mixedInAbstractField
mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
return super.{self::Mixin::extendedConcreteMixedInConcreteField};
mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
@@ -207,5 +231,9 @@
return super.{self::Mixin::extendedAbstractMixedInConcreteField};
mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+ abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
+ abstract mixin-stub set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void; -> self::Mixin::extendedAbstractMixedInAbstractField
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.transformed.expect
index 54bbe20..3e41841 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.transformed.expect
@@ -77,6 +77,8 @@
// - Mixin.mixedInAbstractField=
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractMixedInAbstractField
+// - Super.extendedAbstractMixedInAbstractField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -103,6 +105,12 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractField
@@ -111,6 +119,8 @@
// - Mixin.mixedInAbstractField=
// - Super.extendedAbstractField
// - Super.extendedAbstractField=
+// - Super.extendedAbstractMixedInAbstractField
+// - Super.extendedAbstractMixedInAbstractField=
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -137,6 +147,12 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:8:16: Context: 'Super.extendedAbstractField=' is defined here.
// abstract int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:16:16: Context: 'Super.extendedAbstractMixedInAbstractField=' is defined here.
+// abstract int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -177,10 +193,10 @@
: super self::Super::•()
;
abstract get mixedInAbstractField() → core::int;
- abstract set mixedInAbstractField(core::int #externalFieldValue) → void;
abstract get extendedConcreteMixedInAbstractField() → core::int;
- abstract set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void;
abstract get extendedAbstractMixedInAbstractField() → core::int;
+ abstract set mixedInAbstractField(core::int #externalFieldValue) → void;
+ abstract set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void;
abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
@@ -196,10 +212,10 @@
: super self::Super::•()
;
abstract get mixedInAbstractField() → core::int;
- abstract set mixedInAbstractField(core::int #externalFieldValue) → void;
abstract get extendedConcreteMixedInAbstractField() → core::int;
- abstract set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void;
abstract get extendedAbstractMixedInAbstractField() → core::int;
+ abstract set mixedInAbstractField(core::int #externalFieldValue) → void;
+ abstract set extendedConcreteMixedInAbstractField(core::int #externalFieldValue) → void;
abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.expect
index b40e865..aa5c0aa6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractField
// - Mixin.mixedInAbstractField
// - Super.extendedAbstractField
+// - Super.extendedAbstractMixedInAbstractField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract final int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractField
// - Mixin.mixedInAbstractField
// - Super.extendedAbstractField
+// - Super.extendedAbstractMixedInAbstractField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract final int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -125,6 +133,9 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteField};
mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+ abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+ abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -141,5 +152,8 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteField};
mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+ abstract mixin-stub get extendedConcreteMixedInAbstractField() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractField
+ abstract mixin-stub get mixedInAbstractField() → core::int; -> self::Mixin::mixedInAbstractField
+ abstract mixin-stub get extendedAbstractMixedInAbstractField() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractField
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.transformed.expect
index 4b2a25d..4a7ba31 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.transformed.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractField
// - Mixin.mixedInAbstractField
// - Super.extendedAbstractField
+// - Super.extendedAbstractMixedInAbstractField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract final int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractField
// - Mixin.mixedInAbstractField
// - Super.extendedAbstractField
+// - Super.extendedAbstractMixedInAbstractField
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
// abstract final int extendedAbstractField;
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:16:22: Context: 'Super.extendedAbstractMixedInAbstractField' is defined here.
+// abstract final int extendedAbstractMixedInAbstractField;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -122,8 +130,8 @@
synthetic constructor •() → self::_ClassMixin&Super&Mixin
: super self::Super::•()
;
- abstract get mixedInAbstractField() → core::int;
abstract get extendedConcreteMixedInAbstractField() → core::int;
+ abstract get mixedInAbstractField() → core::int;
abstract get extendedAbstractMixedInAbstractField() → core::int;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
@@ -138,8 +146,8 @@
synthetic constructor •() → self::NamedMixin
: super self::Super::•()
;
- abstract get mixedInAbstractField() → core::int;
abstract get extendedConcreteMixedInAbstractField() → core::int;
+ abstract get mixedInAbstractField() → core::int;
abstract get extendedAbstractMixedInAbstractField() → core::int;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.expect
index 36afe4a..09d72f2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractGetter
// - Mixin.mixedInAbstractGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractMixedInAbstractGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+// int get extendedAbstractMixedInAbstractGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractGetter
// - Mixin.mixedInAbstractGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractMixedInAbstractGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+// int get extendedAbstractMixedInAbstractGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -131,6 +139,9 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+ abstract mixin-stub get extendedConcreteMixedInAbstractGetter() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractGetter
+ abstract mixin-stub get mixedInAbstractGetter() → core::int; -> self::Mixin::mixedInAbstractGetter
+ abstract mixin-stub get extendedAbstractMixedInAbstractGetter() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractGetter
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -147,5 +158,8 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+ abstract mixin-stub get extendedConcreteMixedInAbstractGetter() → core::int; -> self::Mixin::extendedConcreteMixedInAbstractGetter
+ abstract mixin-stub get mixedInAbstractGetter() → core::int; -> self::Mixin::mixedInAbstractGetter
+ abstract mixin-stub get extendedAbstractMixedInAbstractGetter() → core::int; -> self::Mixin::extendedAbstractMixedInAbstractGetter
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.transformed.expect
index 78a254e..f307297 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.transformed.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractGetter
// - Mixin.mixedInAbstractGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractMixedInAbstractGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+// int get extendedAbstractMixedInAbstractGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractGetter
// - Mixin.mixedInAbstractGetter
// - Super.extendedAbstractGetter
+// - Super.extendedAbstractMixedInAbstractGetter
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
// int get extendedAbstractGetter;
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
+// int get extendedAbstractMixedInAbstractGetter;
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -131,8 +139,8 @@
return 0;
get extendedAbstractMixedInConcreteGetter() → core::int
return 0;
- abstract get mixedInAbstractGetter() → core::int;
abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+ abstract get mixedInAbstractGetter() → core::int;
abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
@@ -150,8 +158,8 @@
return 0;
get extendedAbstractMixedInConcreteGetter() → core::int
return 0;
- abstract get mixedInAbstractGetter() → core::int;
abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+ abstract get mixedInAbstractGetter() → core::int;
abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.expect
index 0c88f5c..2c5b765 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -125,6 +133,9 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+ abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+ abstract mixin-stub method mixedInAbstractMethod() → void; -> self::Mixin::mixedInAbstractMethod
+ abstract mixin-stub method extendedAbstractMixedInAbstractMethod() → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -141,5 +152,8 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+ abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+ abstract mixin-stub method mixedInAbstractMethod() → void; -> self::Mixin::mixedInAbstractMethod
+ abstract mixin-stub method extendedAbstractMixedInAbstractMethod() → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.transformed.expect
index 2d2295c..ab66dec 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.transformed.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;
@@ -122,8 +130,8 @@
method mixedInConcreteMethod() → void {}
method extendedConcreteMixedInConcreteMethod() → void {}
method extendedAbstractMixedInConcreteMethod() → void {}
- abstract method mixedInAbstractMethod() → void;
abstract method extendedConcreteMixedInAbstractMethod() → void;
+ abstract method mixedInAbstractMethod() → void;
abstract method extendedAbstractMixedInAbstractMethod() → void;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
@@ -138,8 +146,8 @@
method mixedInConcreteMethod() → void {}
method extendedConcreteMixedInConcreteMethod() → void {}
method extendedAbstractMixedInConcreteMethod() → void {}
- abstract method mixedInAbstractMethod() → void;
abstract method extendedConcreteMixedInAbstractMethod() → void;
+ abstract method mixedInAbstractMethod() → void;
abstract method extendedAbstractMixedInAbstractMethod() → void;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.expect
index 57d2af3..77883ed 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.expect
@@ -50,6 +50,7 @@
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -67,11 +68,15 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractMethod
// - Mixin.mixedInAbstractMethod
// - Super.extendedAbstractMethod
+// - Super.extendedAbstractMixedInAbstractMethod
// Try to either
// - provide an implementation,
// - inherit an implementation from a superclass or mixin,
@@ -89,6 +94,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
// void extendedAbstractMethod();
// ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: 'Super.extendedAbstractMixedInAbstractMethod' is defined here.
+// void extendedAbstractMixedInAbstractMethod();
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedConcreteMixedInConcreteMethod'.
// class ClassMixin extends Super with Mixin {}
@@ -130,6 +138,16 @@
// void extendedAbstractMixedInAbstractMethod();
// ^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: The implementation of 'extendedConcreteMixedInAbstractMethod' in the non-abstract class 'ClassMixin' does not conform to its interface.
+// class ClassMixin extends Super with Mixin {}
+// ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: The method 'Super.extendedConcreteMixedInAbstractMethod' has fewer positional arguments than those of overridden method 'Super with Mixin.extendedConcreteMixedInAbstractMethod'.
+// void extendedConcreteMixedInAbstractMethod() {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+// class ClassMixin extends Super with Mixin {}
+// ^
+//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedConcreteMixedInConcreteMethod'.
// class NamedMixin = Super with Mixin;
// ^^^^^^^^^^
@@ -170,60 +188,6 @@
// void extendedAbstractMixedInAbstractMethod();
// ^
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Class 'Super with Mixin' inherits multiple members named 'extendedConcreteMixedInConcreteMethod' with incompatible signatures.
-// Try adding a declaration of 'extendedConcreteMixedInConcreteMethod' to 'Super with Mixin'.
-// class ClassMixin extends Super with Mixin {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: This is one of the overridden members.
-// void extendedConcreteMixedInConcreteMethod(int i) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is one of the overridden members.
-// void extendedConcreteMixedInConcreteMethod() {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: Class 'Super with Mixin' inherits multiple members named 'extendedAbstractMixedInConcreteMethod' with incompatible signatures.
-// Try adding a declaration of 'extendedAbstractMixedInConcreteMethod' to 'Super with Mixin'.
-// class ClassMixin extends Super with Mixin {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: This is one of the overridden members.
-// void extendedAbstractMixedInConcreteMethod(int i) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is one of the overridden members.
-// void extendedAbstractMixedInConcreteMethod();
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: The implementation of 'extendedConcreteMixedInAbstractMethod' in the non-abstract class 'ClassMixin' does not conform to its interface.
-// class ClassMixin extends Super with Mixin {}
-// ^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: The method 'Super.extendedConcreteMixedInAbstractMethod' has fewer positional arguments than those of overridden method 'Mixin.extendedConcreteMixedInAbstractMethod'.
-// void extendedConcreteMixedInAbstractMethod() {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
-// void extendedConcreteMixedInAbstractMethod(int i);
-// ^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: Class 'NamedMixin' inherits multiple members named 'extendedConcreteMixedInConcreteMethod' with incompatible signatures.
-// Try adding a declaration of 'extendedConcreteMixedInConcreteMethod' to 'NamedMixin'.
-// class NamedMixin = Super with Mixin;
-// ^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: This is one of the overridden members.
-// void extendedConcreteMixedInConcreteMethod(int i) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is one of the overridden members.
-// void extendedConcreteMixedInConcreteMethod() {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: Class 'NamedMixin' inherits multiple members named 'extendedAbstractMixedInConcreteMethod' with incompatible signatures.
-// Try adding a declaration of 'extendedAbstractMixedInConcreteMethod' to 'NamedMixin'.
-// class NamedMixin = Super with Mixin;
-// ^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: This is one of the overridden members.
-// void extendedAbstractMixedInConcreteMethod(int i) {}
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is one of the overridden members.
-// void extendedAbstractMixedInConcreteMethod();
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-//
import self as self;
import "dart:core" as core;
@@ -255,6 +219,13 @@
;
mixin-super-stub method mixedInConcreteMethod(core::int i) → void
return super.{self::Mixin::mixedInConcreteMethod}(i);
+ mixin-super-stub method extendedConcreteMixedInConcreteMethod(core::int i) → void
+ return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}(i);
+ mixin-super-stub method extendedAbstractMixedInConcreteMethod(core::int i) → void
+ return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}(i);
+ abstract mixin-stub method extendedConcreteMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+ abstract mixin-stub method mixedInAbstractMethod(core::int i) → void; -> self::Mixin::mixedInAbstractMethod
+ abstract mixin-stub method extendedAbstractMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -267,5 +238,12 @@
;
mixin-super-stub method mixedInConcreteMethod(core::int i) → void
return super.{self::Mixin::mixedInConcreteMethod}(i);
+ mixin-super-stub method extendedConcreteMixedInConcreteMethod(core::int i) → void
+ return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}(i);
+ mixin-super-stub method extendedAbstractMixedInConcreteMethod(core::int i) → void
+ return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}(i);
+ abstract mixin-stub method extendedConcreteMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
+ abstract mixin-stub method mixedInAbstractMethod(core::int i) → void; -> self::Mixin::mixedInAbstractMethod
+ abstract mixin-stub method extendedAbstractMixedInAbstractMethod(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractMethod
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.expect
index a61aba7..c9a2f79 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.expect
@@ -49,6 +49,7 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractSetter=
// - Mixin.mixedInAbstractSetter=
+// - Super.extendedAbstractMixedInAbstractSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -64,6 +65,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
// void set mixedInAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+// void set extendedAbstractMixedInAbstractSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^
@@ -71,6 +75,7 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractSetter=
// - Mixin.mixedInAbstractSetter=
+// - Super.extendedAbstractMixedInAbstractSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -86,6 +91,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
// void set mixedInAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+// void set extendedAbstractMixedInAbstractSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^
@@ -125,6 +133,9 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+ abstract mixin-stub set extendedConcreteMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractSetter
+ abstract mixin-stub set mixedInAbstractSetter(core::int i) → void; -> self::Mixin::mixedInAbstractSetter
+ abstract mixin-stub set extendedAbstractMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractSetter
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
synthetic constructor •() → self::ClassMixin
@@ -141,5 +152,8 @@
return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+ abstract mixin-stub set extendedConcreteMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedConcreteMixedInAbstractSetter
+ abstract mixin-stub set mixedInAbstractSetter(core::int i) → void; -> self::Mixin::mixedInAbstractSetter
+ abstract mixin-stub set extendedAbstractMixedInAbstractSetter(core::int i) → void; -> self::Mixin::extendedAbstractMixedInAbstractSetter
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.transformed.expect
index d17ef57..7bdf664 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.transformed.expect
@@ -49,6 +49,7 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractSetter=
// - Mixin.mixedInAbstractSetter=
+// - Super.extendedAbstractMixedInAbstractSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -64,6 +65,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
// void set mixedInAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+// void set extendedAbstractMixedInAbstractSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^
@@ -71,6 +75,7 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
// - Mixin.extendedAbstractMixedInAbstractSetter=
// - Mixin.mixedInAbstractSetter=
+// - Super.extendedAbstractMixedInAbstractSetter=
// - Super.extendedAbstractSetter=
// Try to either
// - provide an implementation,
@@ -86,6 +91,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:22:12: Context: 'Mixin.mixedInAbstractSetter=' is defined here.
// void set mixedInAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:16:12: Context: 'Super.extendedAbstractMixedInAbstractSetter=' is defined here.
+// void set extendedAbstractMixedInAbstractSetter(int i);
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
// void set extendedAbstractSetter(int i);
// ^^^^^^^^^^^^^^^^^^^^^^
@@ -122,8 +130,8 @@
set mixedInConcreteSetter(core::int i) → void {}
set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
set extendedAbstractMixedInConcreteSetter(core::int i) → void {}
- abstract set mixedInAbstractSetter(core::int i) → void;
abstract set extendedConcreteMixedInAbstractSetter(core::int i) → void;
+ abstract set mixedInAbstractSetter(core::int i) → void;
abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
@@ -138,8 +146,8 @@
set mixedInConcreteSetter(core::int i) → void {}
set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
set extendedAbstractMixedInConcreteSetter(core::int i) → void {}
- abstract set mixedInAbstractSetter(core::int i) → void;
abstract set extendedConcreteMixedInAbstractSetter(core::int i) → void;
+ abstract set mixedInAbstractSetter(core::int i) → void;
abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
index 197d429..0f94026 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
@@ -283,23 +283,24 @@
const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract
: super self::_FromMixinConcreteAbstract&Object&MixinConcrete::•()
;
+ abstract mixin-stub method noSuchMethod(core::Invocation invocation) → dynamic; -> self::MixinAbstract::noSuchMethod
}
class FromMixinConcreteAbstract extends self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract implements self::Interface {
synthetic constructor •() → self::FromMixinConcreteAbstract
: super self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::•()
;
no-such-method-forwarder get getter() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder get field() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder method method() → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
no-such-method-forwarder get finalField() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder set setter(core::int value) → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
no-such-method-forwarder set field(core::int value) → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
}
class InterfaceAbstract extends core::Object {
synthetic constructor •() → self::InterfaceAbstract
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
index e524f56..730cbf4 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
@@ -294,17 +294,17 @@
: super self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::•()
;
no-such-method-forwarder get getter() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder get field() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder method method() → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
no-such-method-forwarder get finalField() → core::int
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 1, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
no-such-method-forwarder set setter(core::int value) → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
no-such-method-forwarder set field(core::int value) → void
- return this.{self::MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+ return this.{self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
}
class InterfaceAbstract extends core::Object {
synthetic constructor •() → self::InterfaceAbstract
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.expect
index eda0257..773c139 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.expect
@@ -2,17 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:16:7: Error: The implementation of 'extendedMethod1' in the non-abstract class 'Class' does not conform to its interface.
-// class Class extends Super {
-// ^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:7:28: Context: The parameter 'i' of the method 'Super.extendedMethod1' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Class.extendedMethod1'.
-// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
-// void extendedMethod1(int i) {}
-// ^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:18:8: Context: This is the overridden method ('extendedMethod1').
-// void extendedMethod1(num n);
-// ^
-//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:21:28: Error: The parameter 'i' of the method 'Class.extendedMethod2' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.extendedMethod2'.
// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
// void extendedMethod2(int i);
@@ -29,6 +18,17 @@
// void overriddenMethod2(num n) {}
// ^
//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:16:7: Error: The implementation of 'extendedMethod1' in the non-abstract class 'Class' does not conform to its interface.
+// class Class extends Super {
+// ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:7:28: Context: The parameter 'i' of the method 'Super.extendedMethod1' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Class.extendedMethod1'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+// void extendedMethod1(int i) {}
+// ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:18:8: Context: This is the overridden method ('extendedMethod1').
+// void extendedMethod1(num n);
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.expect
index d73e778..91d4ae2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.expect
@@ -19,9 +19,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:70:15: Error: Can't declare a member that conflicts with an inherited one.
// static void mixedInInstanceDeclaredStaticMethod() {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:56:16: Context: This is the inherited member.
-// abstract class Class extends Super with Mixin implements Interface {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:27:8: Context: This is the inherited member.
+// void mixedInInstanceDeclaredStaticMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:73:15: Error: Can't declare a member that conflicts with an inherited one.
// static void implementedInstanceDeclaredStaticMethod() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.transformed.expect
index e5cd1f8..4477dde 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.transformed.expect
@@ -19,9 +19,9 @@
// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:70:15: Error: Can't declare a member that conflicts with an inherited one.
// static void mixedInInstanceDeclaredStaticMethod() {}
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:56:16: Context: This is the inherited member.
-// abstract class Class extends Super with Mixin implements Interface {
-// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:27:8: Context: This is the inherited member.
+// void mixedInInstanceDeclaredStaticMethod() {}
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:73:15: Error: Can't declare a member that conflicts with an inherited one.
// static void implementedInstanceDeclaredStaticMethod() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
index a1df551..a878892 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue40512/issue40512.dart.weak.expect
@@ -9,20 +9,37 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> baz2::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> baz2::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> baz2::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> baz2::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> baz2::A::hashCode
mixin-super-stub method toString({core::String* s = #C1}) → core::String*
return super.{baz2::A::toString}(s: s);
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> baz2::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> baz2::A::runtimeType
}
abstract class _C&Object&A&B = self::_C&Object&A with baz2::B /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
+ abstract mixin-stub get _identityHashCode() → core::int*; -> baz2::B::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> baz2::B::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> baz2::B::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> baz2::B::==
+ abstract mixin-stub get hashCode() → core::int*; -> baz2::B::hashCode
+ abstract mixin-stub method toString() → core::String*; -> baz2::B::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> baz2::B::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> baz2::B::runtimeType
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method toString({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::toString
}
static method main() → void {
core::print(new baz2::B::•());
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
index dac9776..2ba727b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210a/issue41210.dart.weak.expect
@@ -9,6 +9,16 @@
const synthetic constructor •() → self::_C&Object&A*
: super core::Object::•()
;
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::A::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::A::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::A::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::A::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::A::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::A::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::A::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::A::runtimeType
mixin-super-stub method method({core::String* s = #C1}) → core::String*
return super.{iss::A::method}(s: s);
}
@@ -16,16 +26,25 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
- abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
+ abstract mixin-stub get _identityHashCode() → core::int*; -> iss::B::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> iss::B::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> iss::B::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> iss::B::==
+ abstract mixin-stub get hashCode() → core::int*; -> iss::B::hashCode
+ abstract mixin-stub method toString() → core::String*; -> iss::B::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> iss::B::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> iss::B::runtimeType
+ abstract mixin-stub method method() → core::String*; -> iss::B::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
: super self::_C&Object&A&B::•()
;
- abstract member-signature method method({core::String* s = #C1}) → core::String*; -> self::_C&Object&A::method
}
static method main() → dynamic {
- core::print(new self::C::•().{self::C::method}());
+ core::print(new self::C::•().{self::_C&Object&A&B::method}());
}
library;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
index b8246e1..ec08b47 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.expect
@@ -61,6 +61,7 @@
synthetic constructor •() → iss::B*
: super core::Object::•()
;
+ abstract member-signature method method() → core::String*; -> iss2::Interface::method
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -71,7 +72,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method() → core::String*; -> iss2::Interface::method
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
index ba3f39c..f7c6ef0 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41210b.dart.weak.transformed.expect
@@ -26,6 +26,7 @@
const synthetic constructor •() → self::_C&Object&A&B*
: super self::_C&Object&A::•()
;
+ abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ method() → core::String*; -> #lib1::Interface::method
abstract member-signature get /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +37,6 @@
abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///issue41210b_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method /* from org-dartlang-testcase:///issue41210b_lib1.dart */ method() → core::String*; -> #lib1::Interface::method
}
class C extends self::_C&Object&A&B {
synthetic constructor •() → self::C*
@@ -72,6 +72,7 @@
synthetic constructor •() → iss::B*
: super core::Object::•()
;
+ abstract member-signature method method() → core::String*; -> iss2::Interface::method
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -82,7 +83,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method() → core::String*; -> iss2::Interface::method
}
static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
index 3a9fde4..cf0c156 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue42387/scheduler_tester.dart.weak.expect
@@ -2,6 +2,8 @@
import self as self;
import "foundation_binding_lib.dart" as fou;
import "scheduler_binding_lib.dart" as sch;
+import "dart:core" as core;
+import "dart:async" as asy;
import "services_binding_lib.dart" as ser;
import "org-dartlang-testcase:///foundation_lib.dart";
@@ -12,6 +14,17 @@
synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding*
: super fou::BindingBase::•()
;
+ abstract mixin-stub method registerSignalServiceExtension({core::String* name = #C1, () →* asy::Future<Null>* callback = #C1}) → void; -> sch::SchedulerBinding::registerSignalServiceExtension
+ abstract mixin-stub get _identityHashCode() → core::int*; -> sch::SchedulerBinding::_identityHashCode
+ abstract mixin-stub method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> sch::SchedulerBinding::_instanceOf
+ abstract mixin-stub method _simpleInstanceOf(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOf
+ abstract mixin-stub method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOfTrue
+ abstract mixin-stub method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> sch::SchedulerBinding::_simpleInstanceOfFalse
+ abstract mixin-stub operator ==(dynamic other) → core::bool*; -> sch::SchedulerBinding::==
+ abstract mixin-stub get hashCode() → core::int*; -> sch::SchedulerBinding::hashCode
+ abstract mixin-stub method toString() → core::String*; -> sch::SchedulerBinding::toString
+ abstract mixin-stub method noSuchMethod(core::Invocation* invocation) → dynamic; -> sch::SchedulerBinding::noSuchMethod
+ abstract mixin-stub get runtimeType() → core::Type*; -> sch::SchedulerBinding::runtimeType
}
abstract class _TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding = self::_TestSchedulerBinding&BindingBase&SchedulerBinding with ser::ServicesBinding /*isAnonymousMixin*/ {
synthetic constructor •() → self::_TestSchedulerBinding&BindingBase&SchedulerBinding&ServicesBinding*
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart
index 7f60cbd..4ac860d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart
@@ -10,6 +10,8 @@
class E2 = Object with A, D;
+class E3 = Object with A, F;
+
abstract class C6 extends C3 implements C4 {}
abstract class C8 extends C5 implements C7 {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline.expect
index 1763bc0..212f813 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline.expect
@@ -4,6 +4,7 @@
class E1 with A, D {}
class E2 = Object with A, D;
+class E3 = Object with A, F;
abstract class C6 extends C3 implements C4 {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline_modelled.expect
index 9bd7263..ea6829e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.textual_outline_modelled.expect
@@ -8,4 +8,5 @@
class E1 with A, D {}
class E2 = Object with A, D;
+class E3 = Object with A, F;
main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
index 7b96874..11f8668 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
@@ -26,13 +26,13 @@
const synthetic constructor •() → self::_E1&Object&A&D*
: super self::_E1&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E1&Object&A::method}(i);
}
class E1 extends self::_E1&Object&A&D {
synthetic constructor •() → self::E1*
: super self::_E1&Object&A&D::•()
;
- abstract member-signature method method(covariant core::num* i, {core::String* s = #C1}) → core::String*; -> self::_E1&Object&A&D::method
}
abstract class _E2&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E2&Object&A*
@@ -55,13 +55,35 @@
const synthetic constructor •() → self::E2*
: super self::_E2&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E2&Object&A::method}(i);
+}
+abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E3&Object&A*
+ : super core::Object::•()
+ ;
+ mixin-super-stub method method(core::num* i, {core::String* s = #C1}) → core::String*
+ return super.{mai::A::method}(i, s: s);
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 = self::_E3&Object&A with mai::F /*hasConstConstructor*/ {
+ const synthetic constructor •() → self::E3*
+ : super self::_E3&Object&A::•()
+ ;
}
abstract class C6 extends mai::C3 implements mai::C4 {
synthetic constructor •() → self::C6*
: super mai::C3::•()
;
- abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -72,12 +94,12 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
}
abstract class C8 extends mai::C5 implements mai::C7 {
synthetic constructor •() → self::C8*
: super mai::C5::•()
;
- abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -88,6 +110,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
}
static method main() → dynamic {}
@@ -117,6 +140,11 @@
;
abstract forwarding-stub method method(covariant core::num i) → core::String;
}
+abstract class F extends core::Object implements mai::Interface {
+ synthetic constructor •() → mai::F
+ : super core::Object::•()
+ ;
+}
abstract class C1 extends core::Object {
synthetic constructor •() → mai::C1
: super core::Object::•()
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
index 26c7fd6..7b32bba 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
@@ -26,13 +26,13 @@
const synthetic constructor •() → self::_E1&Object&A&D*
: super self::_E1&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E1&Object&A::method}(i);
}
class E1 extends self::_E1&Object&A&D {
synthetic constructor •() → self::E1*
: super self::_E1&Object&A&D::•()
;
- abstract member-signature method method(covariant core::num* i, {core::String* s = #C1}) → core::String*; -> self::_E1&Object&A&D::method
}
abstract class _E2&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
const synthetic constructor •() → self::_E2&Object&A*
@@ -55,13 +55,35 @@
const synthetic constructor •() → self::E2*
: super self::_E2&Object&A::•()
;
- abstract forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*;
+ forwarding-stub method method(covariant core::num* i) → core::String*
+ return super.{self::_E2&Object&A::method}(i);
+}
+abstract class _E3&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::_E3&Object&A*
+ : super core::Object::•()
+ ;
+ method /*isNonNullableByDefault, from org-dartlang-testcase:///main_lib.dart */ method(core::num i, {core::String s = #C1}) → core::String
+ return s;
+ abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
+ abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
+ abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
+ abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
+ abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
+ abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
+ abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
+ abstract member-signature method toString() → core::String*; -> core::Object::toString
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
+ abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+}
+class E3 extends self::_E3&Object&A implements mai::F /*isEliminatedMixin,hasConstConstructor*/ {
+ const synthetic constructor •() → self::E3*
+ : super self::_E3&Object&A::•()
+ ;
}
abstract class C6 extends mai::C3 implements mai::C4 {
synthetic constructor •() → self::C6*
: super mai::C3::•()
;
- abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -72,12 +94,12 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
}
abstract class C8 extends mai::C5 implements mai::C7 {
synthetic constructor •() → self::C8*
: super mai::C5::•()
;
- abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -88,6 +110,7 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+ abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
}
static method main() → dynamic {}
@@ -117,6 +140,11 @@
;
abstract forwarding-stub method method(covariant core::num i) → core::String;
}
+abstract class F extends core::Object implements mai::Interface {
+ synthetic constructor •() → mai::F
+ : super core::Object::•()
+ ;
+}
abstract class C1 extends core::Object {
synthetic constructor •() → mai::C1
: super core::Object::•()
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main_lib.dart b/pkg/front_end/testcases/nnbd_mixed/issue43988/main_lib.dart
index 5291414..6bcc053 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main_lib.dart
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main_lib.dart
@@ -16,6 +16,8 @@
abstract class D implements Interface, Interface2 {}
+abstract class F implements Interface {}
+
abstract class C1 {
method2();
}
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
index e001ce8..d8ff996 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_opt_in_out_in.dart.weak.expect
@@ -45,11 +45,11 @@
synthetic constructor •() → self::_DwB0&C0&B
: super mix::C0::•()
;
- mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int) → core::int>
+ mixin-super-stub get a() → core::List<(core::int) → core::int>
return super.{mix2::B::a};
- mixin-super-stub set /*isLegacy*/ a(core::List<(core::int) → core::int> _) → void
+ mixin-super-stub set a(core::List<(core::int) → core::int> _) → void
return super.{mix2::B::a} = _;
- mixin-super-stub method /*isLegacy*/ m((core::int) → core::int x) → (core::int) → core::int
+ mixin-super-stub method m((core::int) → core::int x) → (core::int) → core::int
return super.{mix2::B::m}(x);
abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
@@ -70,11 +70,11 @@
synthetic constructor •() → self::_DwBq0&C0&Bq
: super mix::C0::•()
;
- mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int?) → core::int?>
+ mixin-super-stub get a() → core::List<(core::int?) → core::int?>
return super.{mix2::Bq::a};
- mixin-super-stub set /*isLegacy*/ a(core::List<(core::int?) → core::int?> _) → void
+ mixin-super-stub set a(core::List<(core::int?) → core::int?> _) → void
return super.{mix2::Bq::a} = _;
- mixin-super-stub method /*isLegacy*/ m((core::int?) → core::int? x) → (core::int?) → core::int?
+ mixin-super-stub method m((core::int?) → core::int? x) → (core::int?) → core::int?
return super.{mix2::Bq::m}(x);
abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
@@ -129,11 +129,11 @@
synthetic constructor •() → self::_DwB3&C3&B
: super mix::C3::•()
;
- mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int) → core::int>
+ mixin-super-stub get a() → core::List<(core::int) → core::int>
return super.{mix2::B::a};
- mixin-super-stub set /*isLegacy*/ a(core::List<(core::int) → core::int> _) → void
+ mixin-super-stub set a(core::List<(core::int) → core::int> _) → void
return super.{mix2::B::a} = _;
- mixin-super-stub method /*isLegacy*/ m((core::int) → core::int x) → (core::int) → core::int
+ mixin-super-stub method m((core::int) → core::int x) → (core::int) → core::int
return super.{mix2::B::m}(x);
abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
@@ -154,11 +154,11 @@
synthetic constructor •() → self::_DwBq3&C3&Bq
: super mix::C3::•()
;
- mixin-super-stub get /*isLegacy*/ a() → core::List<(core::int?) → core::int?>
+ mixin-super-stub get a() → core::List<(core::int?) → core::int?>
return super.{mix2::Bq::a};
- mixin-super-stub set /*isLegacy*/ a(core::List<(core::int?) → core::int?> _) → void
+ mixin-super-stub set a(core::List<(core::int?) → core::int?> _) → void
return super.{mix2::Bq::a} = _;
- mixin-super-stub method /*isLegacy*/ m((core::int?) → core::int? x) → (core::int?) → core::int?
+ mixin-super-stub method m((core::int?) → core::int? x) → (core::int?) → core::int?
return super.{mix2::Bq::m}(x);
abstract member-signature get _identityHashCode() → core::int; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
index a59d64d..ca14755 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.expect
@@ -26,10 +26,10 @@
synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
: super self::_Class&Object&Mixin1::•()
;
- mixin-super-stub set field((dynamic) →* core::Type* value) → void
- return super.{mai::Mixin2::field} = value;
mixin-super-stub get field() → (dynamic) →* core::Type*
return super.{mai::Mixin2::field};
+ mixin-super-stub set field((dynamic) →* core::Type* value) → void
+ return super.{mai::Mixin2::field} = value;
mixin-super-stub method method1() → (dynamic) →* core::Type*
return super.{mai::Mixin2::method1}();
mixin-super-stub method method2((dynamic) →* core::Type* t) → void
@@ -59,8 +59,10 @@
synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
: super core::Object::•()
;
- abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+ abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+ abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -71,8 +73,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
- abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
field (dynamic) →* core::Type* field = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
index 0d55698..a0b7a6c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.dart.weak.transformed.expect
@@ -21,8 +21,8 @@
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
@@ -69,8 +69,10 @@
synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
: super core::Object::•()
;
- abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+ abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+ abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -81,8 +83,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
- abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
field (dynamic) →* core::Type* field = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
index a59d64d..ca14755 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.expect
@@ -26,10 +26,10 @@
synthetic constructor •() → self::_Class&Object&Mixin1&Mixin2<self::_Class&Object&Mixin1&Mixin2::T*>*
: super self::_Class&Object&Mixin1::•()
;
- mixin-super-stub set field((dynamic) →* core::Type* value) → void
- return super.{mai::Mixin2::field} = value;
mixin-super-stub get field() → (dynamic) →* core::Type*
return super.{mai::Mixin2::field};
+ mixin-super-stub set field((dynamic) →* core::Type* value) → void
+ return super.{mai::Mixin2::field} = value;
mixin-super-stub method method1() → (dynamic) →* core::Type*
return super.{mai::Mixin2::method1}();
mixin-super-stub method method2((dynamic) →* core::Type* t) → void
@@ -59,8 +59,10 @@
synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
: super core::Object::•()
;
- abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+ abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+ abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -71,8 +73,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
- abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
field (dynamic) →* core::Type* field = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
index 0d55698..a0b7a6c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_access/main.no_link.dart.weak.transformed.expect
@@ -21,8 +21,8 @@
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ toString() → core::String*; -> core::Object::toString
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get /* from org-dartlang-testcase:///main_lib1.dart */ field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set /* from org-dartlang-testcase:///main_lib1.dart */ field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
abstract member-signature method /* from org-dartlang-testcase:///main_lib1.dart */ method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
@@ -69,8 +69,10 @@
synthetic constructor •() → mai::Mixin1<mai::Mixin1::T*>*
: super core::Object::•()
;
- abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
abstract member-signature get field() → (core::Object*) →* core::Type*; -> mai2::Interface::field
+ abstract member-signature set field((core::Object*) →* core::Type* value) → void; -> mai2::Interface::field
+ abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
+ abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -81,8 +83,6 @@
abstract member-signature method toString() → core::String*; -> core::Object::toString
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
- abstract member-signature method method1() → (core::Object*) →* core::Type*; -> mai2::Interface::method1
- abstract member-signature method method2((core::Object*) →* core::Type* t) → void; -> mai2::Interface::method2
}
abstract class Mixin2<T extends core::Object* = dynamic> extends core::Object implements mai2::Interface<mai2::Value<dynamic>*, core::Object*> {
field (dynamic) →* core::Type* field = null;
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect
index 25c58bb..c317528 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.expect
@@ -9,8 +9,8 @@
synthetic constructor •() → self::Class*
: super sup::SuperClass::•()
;
- abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
abstract member-signature get property() → core::Object*; -> sup::SuperClass::property
+ abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect
index 25c58bb..c317528 100644
--- a/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/super_set_from_opt_in.dart.weak.transformed.expect
@@ -9,8 +9,8 @@
synthetic constructor •() → self::Class*
: super sup::SuperClass::•()
;
- abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
abstract member-signature get property() → core::Object*; -> sup::SuperClass::property
+ abstract member-signature set property(core::Object* value) → void; -> sup::SuperClass::property
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.outline.expect
index 29f7048..ac147ed 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.outline.expect
@@ -21,6 +21,7 @@
synthetic constructor •() → self::I*
;
abstract method foo() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +30,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.expect
index cf46444..2182bea 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.expect
@@ -24,6 +24,7 @@
: super core::Object::•()
;
abstract method foo() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +33,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.transformed.expect
index cf46444..2182bea 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_interface_nsm_inherited.dart.strong.transformed.expect
@@ -24,6 +24,7 @@
: super core::Object::•()
;
abstract method foo() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +33,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.outline.expect
index fd257f0..5a2927f 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.outline.expect
@@ -56,6 +56,7 @@
synthetic constructor •() → self::HungryCat*
;
abstract method eatFood(core::String* food, {core::double* amount, core::double* yetAnother}) → core::bool*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,7 +65,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.expect
index 3979bfc..b32f8e5 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.expect
@@ -64,6 +64,7 @@
: super core::Object::•()
;
abstract method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -72,7 +73,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.transformed.expect
index 675ecfb..d5a49ee 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_with_different_signature.dart.strong.transformed.expect
@@ -64,6 +64,7 @@
: super core::Object::•()
;
abstract method eatFood(core::String* food, {core::double* amount = #C5, core::double* yetAnother = #C5}) → core::bool*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -72,7 +73,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.outline.expect
index 513d138..6986170 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.outline.expect
@@ -22,6 +22,7 @@
;
method foo() → void
;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -30,7 +31,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.expect
index 4351d37..acee4b7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.expect
@@ -24,6 +24,7 @@
: super core::Object::•()
;
method foo() → void {}
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +33,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.transformed.expect
index 4351d37..acee4b7 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/interface_with_concrete.dart.strong.transformed.expect
@@ -24,6 +24,7 @@
: super core::Object::•()
;
method foo() → void {}
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,7 +33,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class B extends self::A implements self::I {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect
index 6b1da0c..2d1038e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.outline.expect
@@ -45,6 +45,7 @@
synthetic constructor •() → pri::Fisk*
;
abstract method _hest() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +54,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect
index 6a52850..735122a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.expect
@@ -48,6 +48,7 @@
: super core::Object::•()
;
abstract method _hest() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -56,7 +57,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect
index 6a52850..735122a 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/private.dart.strong.transformed.expect
@@ -48,6 +48,7 @@
: super core::Object::•()
;
abstract method _hest() → void;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -56,7 +57,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
index 9fc1e31..80e949b 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.outline.expect
@@ -6,6 +6,7 @@
synthetic constructor •() → self::I<self::I::T*>*
;
abstract method foo() → self::I::T*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -14,7 +15,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class M extends core::Object {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
index 8920c01..3676843 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.expect
@@ -7,6 +7,7 @@
: super core::Object::•()
;
abstract method foo() → self::I::T*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -15,7 +16,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class M extends core::Object {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
index 4e46a55..84fdbfc 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/subst_on_forwarder.dart.strong.transformed.expect
@@ -7,6 +7,7 @@
: super core::Object::•()
;
abstract method foo() → self::I::T*;
+ abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -15,7 +16,6 @@
abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
abstract member-signature method toString() → core::String*; -> core::Object::toString
- abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
class M extends core::Object {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
index d8dedc2..d858827 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.outline.expect
@@ -32,11 +32,11 @@
;
mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+ mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+ forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
index 31bd6b8..be28553 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
@@ -34,11 +34,11 @@
;
mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+ mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+ forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
@@ -49,9 +49,9 @@
static method main() → dynamic {
self::Class c = new self::Class::•();
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
self::Superclass s = c;
self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
index 31bd6b8..be28553 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
@@ -34,11 +34,11 @@
;
mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+ mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+ forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
@@ -49,9 +49,9 @@
static method main() → dynamic {
self::Class c = new self::Class::•();
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
self::Superclass s = c;
self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
index 31bd6b8..be28553 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
@@ -34,11 +34,11 @@
;
mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+ mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+ forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
@@ -49,9 +49,9 @@
static method main() → dynamic {
self::Class c = new self::Class::•();
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
self::Superclass s = c;
self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
index 31bd6b8..be28553 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
@@ -34,11 +34,11 @@
;
mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
return super.{self::Mixin::method1}(argument1, argument2);
- forwarding-stub method method2(covariant core::num argument1, core::num argument2) → core::String
+ mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
return super.{self::Mixin::method2}(argument1, argument2);
forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
return super.{self::Mixin::method3}(argument1, argument2);
- forwarding-stub method method4(covariant core::num argument1, covariant core::num argument2) → core::String
+ forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
return super.{self::Mixin::method4}(argument1, argument2);
}
class Class extends self::_Class&Superclass&Mixin {
@@ -49,9 +49,9 @@
static method main() → dynamic {
self::Class c = new self::Class::•();
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method1}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method2}(0, 1){(core::int, core::num) → core::String});
self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method3}(0, 1){(core::num, core::num) → core::String});
- self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::num, core::num) → core::String});
+ self::expect("Mixin", c.{self::_Class&Superclass&Mixin::method4}(0, 1){(core::int, core::int) → core::String});
self::Superclass s = c;
self::expect("Mixin", s.{self::Superclass::method1}(0.5, 1.5){(core::num, core::num) → core::String});
self::throws(() → void => s.{self::Superclass::method2}(0.5, 1.5){(core::num, core::num) → core::String});
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 71a0dbf..add20b0 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -19,6 +19,8 @@
general/infer_field_from_multiple: TypeCheckError
general/invalid_operator: TypeCheckError
general/invalid_operator_override: TypeCheckError
+general/issue41210a: TypeCheckError
+general/issue41210b/issue41210: TypeCheckError
general/mixin_application_override: TypeCheckError
general/override_check_accessor_after_inference: TypeCheckError
general/override_check_accessor_basic: TypeCheckError
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
index ad6b170..d282494 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -2,16 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
-// class E extends D {
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
-// foo(int x) => x;
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-// foo(int x, {int y});
-// ^
-//
// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The implementation of 'foo' in the non-abstract class 'C' does not conform to its interface.
// class C extends A implements B {
// ^
@@ -22,6 +12,16 @@
// foo(int x, {int y}) => y;
// ^
//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
+// class E extends D {
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+// foo(int x) => x;
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+// foo(int x, {int y});
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
index 32e4786..3493cad 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
@@ -2,16 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
-// class E extends D {
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
-// foo(int x) => x;
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-// foo(int x, {int y});
-// ^
-//
// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The implementation of 'foo' in the non-abstract class 'C' does not conform to its interface.
// class C extends A implements B {
// ^
@@ -22,6 +12,16 @@
// foo(int x, {int y}) => y;
// ^
//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
+// class E extends D {
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+// foo(int x) => x;
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+// foo(int x, {int y});
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
index 32e4786..3493cad 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.transformed.expect
@@ -2,16 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
-// class E extends D {
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
-// foo(int x) => x;
-// ^
-// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
-// foo(int x, {int y});
-// ^
-//
// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The implementation of 'foo' in the non-abstract class 'C' does not conform to its interface.
// class C extends A implements B {
// ^
@@ -22,6 +12,16 @@
// foo(int x, {int y}) => y;
// ^
//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The implementation of 'foo' in the non-abstract class 'E' does not conform to its interface.
+// class E extends D {
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Context: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+// foo(int x) => x;
+// ^
+// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
+// foo(int x, {int y});
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
index 9c97b6c..4b93548 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
@@ -1,4 +1,17 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Error: The implementation of 'x' in the non-abstract class 'D' does not conform to its interface.
+// class D extends C implements B {}
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
+// int x;
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
+// class D extends C implements B {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
index 92c4e15..ef3d7b6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
@@ -1,4 +1,17 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Error: The implementation of 'x' in the non-abstract class 'D' does not conform to its interface.
+// class D extends C implements B {}
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
+// int x;
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
+// class D extends C implements B {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
index 92c4e15..ef3d7b6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.transformed.expect
@@ -1,4 +1,17 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Error: The implementation of 'x' in the non-abstract class 'D' does not conform to its interface.
+// class D extends C implements B {}
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:13:7: Context: The field 'C.x' has type 'int', which does not match the corresponding type, 'num', in the overridden setter, 'D.x'.
+// int x;
+// ^
+// pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart:16:7: Context: This is the overridden method ('x').
+// class D extends C implements B {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index 10bc3ee..b6f1dad 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -82,7 +82,7 @@
return super.{self::M::x} = value;
mixin-super-stub get y() → core::int*
return super.{self::M::y};
- forwarding-stub set y(covariant core::Object* value) → void
+ forwarding-stub set y(covariant core::int* value) → void
return super.{self::M::y} = value;
}
static method expectTypeError(() →* void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
index a084cac..2f222f6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
@@ -89,7 +89,7 @@
return super.{self::M::x} = value;
mixin-super-stub get y() → core::int*
return super.{self::M::y};
- forwarding-stub set y(covariant core::Object* value) → void
+ forwarding-stub set y(covariant core::int* value) → void
return super.{self::M::y} = value;
}
static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index 48cf848..3582fa0 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -89,7 +89,7 @@
return super.{self::M::x} = value;
mixin-super-stub get y() → core::int*
return super.{self::M::y};
- forwarding-stub set y(covariant core::Object* value) → void
+ forwarding-stub set y(covariant core::int* value) → void
return super.{self::M::y} = value;
}
static method expectTypeError(() →* void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
index 3f56a5f..743d696 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
@@ -98,7 +98,7 @@
return super.{self::M::x} = value;
mixin-super-stub get y() → core::int*
return super.{self::M::y};
- forwarding-stub set y(covariant core::Object* value) → void
+ forwarding-stub set y(covariant core::int* value) → void
return super.{self::M::y} = value;
}
static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index eea0f81..b2c9538 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -72,6 +72,8 @@
general/issue38938: RuntimeError # no main and compile time errors.
general/issue38944: RuntimeError # no main and compile time errors.
general/issue38961: RuntimeError # no main and compile time errors.
+general/issue41210a: TypeCheckError
+general/issue41210b/issue41210: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: ExpectationFileMismatch # Too many errors.
general/mixin_application_override: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index d84d3b9..a59dfcd 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -74,6 +74,8 @@
general/issue38938: RuntimeError
general/issue38944: RuntimeError
general/issue38961: RuntimeError
+general/issue41210a: TypeCheckError
+general/issue41210b/issue41210: TypeCheckError
general/micro: RuntimeError
general/mixin_application_override: TypeCheckError
general/mixin_constructors_with_default_values: RuntimeError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 901929c..add6cbb 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -100,6 +100,7 @@
late_lowering/late_lowering_bitmasks: FormatterCrash
late_lowering/late_nullable_field_with_initializer: FormatterCrash
late_lowering/late_nullable_field_without_initializer: FormatterCrash
+late_lowering/late_override: FormatterCrash
late_lowering/later: FormatterCrash
late_lowering/override: FormatterCrash
late_lowering/override_getter_setter: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index a382980..56c47dc 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -78,6 +78,8 @@
nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
nnbd_mixed/hierarchy/override: TypeCheckError
nnbd_mixed/inheritance_from_opt_in: TypeCheckError
+nnbd_mixed/issue40512/issue40512: TypeCheckError
+nnbd_mixed/issue41210a/issue41210: TypeCheckError
nnbd_mixed/issue41567: TypeCheckError
nnbd_mixed/messages_with_types_opt_in: TypeCheckError
nnbd_mixed/messages_with_types_opt_out: TypeCheckError
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 50bd29e..edd1e75 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -485,6 +485,7 @@
"exclude": [
"^pkg/analysis_server/lib/src/analysis_server\\.dart",
"test/analyser_ignored/",
+ "test/class_hierarchy/data/",
"test/enable_non_nullable/data/",
"test/extensions/data/",
"test/id_testing/data/",
diff --git a/pkg/kernel/lib/src/legacy_erasure.dart b/pkg/kernel/lib/src/legacy_erasure.dart
index c31e80b..3a386bd 100644
--- a/pkg/kernel/lib/src/legacy_erasure.dart
+++ b/pkg/kernel/lib/src/legacy_erasure.dart
@@ -71,3 +71,47 @@
@override
DartType visitNeverType(NeverType node) => const NullType();
}
+
+/// Returns `true` if a member declared in [declaringClass] inherited or
+/// mixed into [enclosingClass] needs legacy erasure to compute its inherited
+/// type.
+///
+/// For instance:
+///
+/// // Opt in:
+/// class Super {
+/// int extendedMethod(int i, {required int j}) => i;
+/// }
+/// class Mixin {
+/// int mixedInMethod(int i, {required int j}) => i;
+/// }
+/// // Opt out:
+/// class Legacy extends Super with Mixin {}
+/// // Opt in:
+/// class Class extends Legacy {
+/// test() {
+/// // Ok to call `Legacy.extendedMethod` since its type is
+/// // `int* Function(int*, {int* j})`.
+/// super.extendedMethod(null);
+/// // Ok to call `Legacy.mixedInMethod` since its type is
+/// // `int* Function(int*, {int* j})`.
+/// super.mixedInMethod(null);
+/// }
+/// }
+///
+bool needsLegacyErasure(Class enclosingClass, Class declaringClass) {
+ Class cls = enclosingClass;
+ while (cls != null) {
+ if (!cls.enclosingLibrary.isNonNullableByDefault) {
+ return true;
+ }
+ if (cls == declaringClass) {
+ return false;
+ }
+ if (cls.mixedInClass == declaringClass) {
+ return false;
+ }
+ cls = cls.superclass;
+ }
+ return false;
+}
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 0ca1b4a..a7faeea 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1157,17 +1157,25 @@
if (features.isNotEmpty) {
writeWord("/*${features.join(',')}*/");
}
- if (node.isMemberSignature) {
- writeFunction(node.function,
- name: getMemberName(node), terminateLine: false);
- if (node.function.body is ReturnStatement) {
- writeSymbol(';');
- }
- writeSymbol(' -> ');
- writeMemberReferenceFromReference(node.stubTargetReference);
- endLine();
- } else {
- writeFunction(node.function, name: getMemberName(node));
+ switch (node.stubKind) {
+ case ProcedureStubKind.Regular:
+ case ProcedureStubKind.AbstractForwardingStub:
+ case ProcedureStubKind.ConcreteForwardingStub:
+ case ProcedureStubKind.NoSuchMethodForwarder:
+ case ProcedureStubKind.ConcreteMixinStub:
+ writeFunction(node.function, name: getMemberName(node));
+ break;
+ case ProcedureStubKind.MemberSignature:
+ case ProcedureStubKind.AbstractMixinStub:
+ writeFunction(node.function,
+ name: getMemberName(node), terminateLine: false);
+ if (node.function.body is ReturnStatement) {
+ writeSymbol(';');
+ }
+ writeSymbol(' -> ');
+ writeMemberReferenceFromReference(node.stubTargetReference);
+ endLine();
+ break;
}
}
diff --git a/tests/language/mixin/invalid_override_in_mixin_test.dart b/tests/language/mixin/invalid_override_in_mixin_test.dart
index bd79f66..de7b18c 100644
--- a/tests/language/mixin/invalid_override_in_mixin_test.dart
+++ b/tests/language/mixin/invalid_override_in_mixin_test.dart
@@ -14,8 +14,6 @@
class C extends Object with A {
// ^
// [cfe] Applying the mixin 'A' to 'Object' introduces an erroneous override of 'noSuchMethod'.
-// ^
-// [cfe] Class 'Object with A' inherits multiple members named 'noSuchMethod' with incompatible signatures.
// ^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
test() {
diff --git a/tests/language/mixin/method_override_test.dart b/tests/language/mixin/method_override_test.dart
index 166599e..e50464d 100644
--- a/tests/language/mixin/method_override_test.dart
+++ b/tests/language/mixin/method_override_test.dart
@@ -21,34 +21,26 @@
// Wrong return type.
abstract class C1 = CII with CIS;
-// ^^
-// [cfe] Class 'C1' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C1' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C2 extends CII with CIS {}
-// ^^
-// [cfe] Applying the mixin 'CIS' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CIS' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CIS' to 'CII' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
// Wrong argument type.
abstract class C3 = CII with CSI;
-// ^^
-// [cfe] Class 'C3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C3' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C4 extends CII with CSI {}
-// ^^
-// [cfe] Applying the mixin 'CSI' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CSI' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CSI' to 'CII' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -56,17 +48,13 @@
abstract class C5 = CII with CTT<int>;
abstract class C6 extends CII with CTT<int> {}
abstract class C7 = CII with CTT<String>;
-// ^^
-// [cfe] Class 'C7' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C7' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C8 extends CII with CTT<String> {}
-// ^^
-// [cfe] Applying the mixin 'CTT' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CTT<String>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CTT' to 'CII' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -92,34 +80,26 @@
abstract class N2 extends NIIx with NIIxy {}
// It's NOT OK to rename named parameters.
abstract class N3 = NIIx with NIIy;
-// ^^
-// [cfe] Class 'N3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N3' introduces an erroneous override of 'id'.
// ^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N4 extends NIIx with NIIy {}
-// ^^
-// [cfe] Applying the mixin 'NIIy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NIIy' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NIIy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
// It's NOT OK to drop named parameters.
abstract class N5 = NIIx with NII;
-// ^^
-// [cfe] Class 'N5' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N5' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N6 extends NIIx with NII {}
-// ^^
-// [cfe] Applying the mixin 'NII' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NII' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NII' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -139,45 +119,33 @@
abstract class N7 = NIIx with NBABxy<int, int>;
abstract class N8 extends NIIx with NBABxy<int, int> {}
abstract class N9 = NIIx with NBABxy<String, int>;
-// ^^
-// [cfe] Class 'N9' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N9' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N10 extends NIIx with NBABxy<String, int> {}
-// ^^^
-// [cfe] Applying the mixin 'NBABxy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NBABxy<String, int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NBABxy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N11 = NIIx with NTTy<int>;
-// ^^^
-// [cfe] Class 'N11' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N11' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N12 extends NIIx with NTTy<int> {}
-// ^^^
-// [cfe] Applying the mixin 'NTTy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NTTy<int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NTTy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N13 = NIIx with NTTx<int>;
-// ^^^
-// [cfe] Class 'N13' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N13' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N14 extends NIIx with NTTx<int> {}
-// ^^^
-// [cfe] Applying the mixin 'NTTx' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NTTx<int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NTTx' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -232,17 +200,13 @@
abstract class O7 = OII with OBAB<int, int>;
abstract class O8 extends OII with OBAB<int, int> {}
abstract class O9 = OII with OBAB<String, int>;
-// ^^
-// [cfe] Class 'O9' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'O9' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class O10 extends OII with OBAB<String, int> {}
-// ^^^
-// [cfe] Applying the mixin 'OBAB' to 'OII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'OII with OBAB<String, int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'OBAB' to 'OII' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class O11 = OII with OTTy<int>;
@@ -280,22 +244,16 @@
}
class G1 = GTTnum with MTTnum;
class G2 = GTTnum with MTTint;
-// ^^
-// [cfe] Class 'G2' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G2' introduces an erroneous override of 'id'.
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G3 = GTTnum with MTT;
-// ^^
-// [cfe] Class 'G3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G3' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G4 = GTTnum with MTTnumR;
-// ^^
-// [cfe] Class 'G4' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G4' introduces an erroneous override of 'id'.
// ^^^^^^^
diff --git a/tests/language/regress/regress33235_11_test.dart b/tests/language/regress/regress33235_11_test.dart
index 74710f4..74ccf45 100644
--- a/tests/language/regress/regress33235_11_test.dart
+++ b/tests/language/regress/regress33235_11_test.dart
@@ -14,6 +14,8 @@
static int n() => 42;
// ^
// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+ // [cfe] 'n' is already declared in this scope.
+ // ^
// [cfe] Conflicts with setter 'n'.
}
diff --git a/tests/language_2/mixin/invalid_override_in_mixin_test.dart b/tests/language_2/mixin/invalid_override_in_mixin_test.dart
index bd79f66..de7b18c 100644
--- a/tests/language_2/mixin/invalid_override_in_mixin_test.dart
+++ b/tests/language_2/mixin/invalid_override_in_mixin_test.dart
@@ -14,8 +14,6 @@
class C extends Object with A {
// ^
// [cfe] Applying the mixin 'A' to 'Object' introduces an erroneous override of 'noSuchMethod'.
-// ^
-// [cfe] Class 'Object with A' inherits multiple members named 'noSuchMethod' with incompatible signatures.
// ^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
test() {
diff --git a/tests/language_2/mixin/method_override_test.dart b/tests/language_2/mixin/method_override_test.dart
index 137156e..54844a9 100644
--- a/tests/language_2/mixin/method_override_test.dart
+++ b/tests/language_2/mixin/method_override_test.dart
@@ -21,34 +21,26 @@
// Wrong return type.
abstract class C1 = CII with CIS;
-// ^^
-// [cfe] Class 'C1' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C1' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C2 extends CII with CIS {}
-// ^^
-// [cfe] Applying the mixin 'CIS' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CIS' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CIS' to 'CII' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
// Wrong argument type.
abstract class C3 = CII with CSI;
-// ^^
-// [cfe] Class 'C3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C3' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C4 extends CII with CSI {}
-// ^^
-// [cfe] Applying the mixin 'CSI' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CSI' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CSI' to 'CII' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -56,17 +48,13 @@
abstract class C5 = CII with CTT<int>;
abstract class C6 extends CII with CTT<int> {}
abstract class C7 = CII with CTT<String>;
-// ^^
-// [cfe] Class 'C7' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'C7' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class C8 extends CII with CTT<String> {}
-// ^^
-// [cfe] Applying the mixin 'CTT' to 'CII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'CII with CTT<String>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'CTT' to 'CII' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -92,34 +80,26 @@
abstract class N2 extends NIIx with NIIxy {}
// It's NOT OK to rename named parameters.
abstract class N3 = NIIx with NIIy;
-// ^^
-// [cfe] Class 'N3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N3' introduces an erroneous override of 'id'.
// ^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N4 extends NIIx with NIIy {}
-// ^^
-// [cfe] Applying the mixin 'NIIy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NIIy' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NIIy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
// It's NOT OK to drop named parameters.
abstract class N5 = NIIx with NII;
-// ^^
-// [cfe] Class 'N5' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N5' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N6 extends NIIx with NII {}
-// ^^
-// [cfe] Applying the mixin 'NII' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NII' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NII' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -139,45 +119,33 @@
abstract class N7 = NIIx with NBABxy<int, int>;
abstract class N8 extends NIIx with NBABxy<int, int> {}
abstract class N9 = NIIx with NBABxy<String, int>;
-// ^^
-// [cfe] Class 'N9' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N9' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N10 extends NIIx with NBABxy<String, int> {}
-// ^^^
-// [cfe] Applying the mixin 'NBABxy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NBABxy<String, int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NBABxy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N11 = NIIx with NTTy<int>;
-// ^^^
-// [cfe] Class 'N11' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N11' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N12 extends NIIx with NTTy<int> {}
-// ^^^
-// [cfe] Applying the mixin 'NTTy' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NTTy<int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NTTy' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N13 = NIIx with NTTx<int>;
-// ^^^
-// [cfe] Class 'N13' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'N13' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class N14 extends NIIx with NTTx<int> {}
-// ^^^
-// [cfe] Applying the mixin 'NTTx' to 'NIIx' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'NIIx with NTTx<int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'NTTx' to 'NIIx' introduces an erroneous override of 'id'.
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
@@ -232,17 +200,13 @@
abstract class O7 = OII with OBAB<int, int>;
abstract class O8 extends OII with OBAB<int, int> {}
abstract class O9 = OII with OBAB<String, int>;
-// ^^
-// [cfe] Class 'O9' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'O9' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class O10 extends OII with OBAB<String, int> {}
-// ^^^
-// [cfe] Applying the mixin 'OBAB' to 'OII' introduces an erroneous override of 'id'.
// ^
-// [cfe] Class 'OII with OBAB<String, int>' inherits multiple members named 'id' with incompatible signatures.
+// [cfe] Applying the mixin 'OBAB' to 'OII' introduces an erroneous override of 'id'.
// ^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
abstract class O11 = OII with OTTy<int>;
@@ -280,22 +244,16 @@
}
class G1 = GTTnum with MTTnum;
class G2 = GTTnum with MTTint;
-// ^^
-// [cfe] Class 'G2' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G2' introduces an erroneous override of 'id'.
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G3 = GTTnum with MTT;
-// ^^
-// [cfe] Class 'G3' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G3' introduces an erroneous override of 'id'.
// ^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G4 = GTTnum with MTTnumR;
-// ^^
-// [cfe] Class 'G4' inherits multiple members named 'id' with incompatible signatures.
// ^
// [cfe] The mixin application class 'G4' introduces an erroneous override of 'id'.
// ^^^^^^^
diff --git a/tests/language_2/regress/regress33235_11_test.dart b/tests/language_2/regress/regress33235_11_test.dart
index 74710f4..74ccf45 100644
--- a/tests/language_2/regress/regress33235_11_test.dart
+++ b/tests/language_2/regress/regress33235_11_test.dart
@@ -14,6 +14,8 @@
static int n() => 42;
// ^
// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
+ // [cfe] 'n' is already declared in this scope.
+ // ^
// [cfe] Conflicts with setter 'n'.
}