Fix 'covariant' bit propagation in mixin applications
In the upstream CL https://dart-review.googlesource.com/c/sdk/+/100580 the
'covariant' bit on parameters of class methods isn't propagated correctly in the
case of mixins. Effectively, if it's used in a member of the superclass of the
mixin application, it won't be propagated to the mixin application or its
subclasses. Consider the following:
```
class A {
void foo(covariant num x) {}
}
class B {
void foo(num x) {}
}
class C {
void foo(num x) {}
}
class D extends A with B implements C {
void foo(int x) {}
}
```
The program above doesn't have any errors, and overriding foo in D using int as
the type of the parameter is allowed, because D's superclass A declares the
parameter as 'covariant'. Without the changes from this CL, the code will
result in a compile-time error. With the change, the 'covariant' bit is
propagated correctly, and the program compiles.
An existing test already covers the described behavior: see class Mixed in
tests/language_2/covariant_override/tear_off_type_test.dart.
Change-Id: Ia508a224527c95f5ef04c1f1fb02614f8ff43714
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101284
Reviewed-by: Aske Simon Christensen <askesc@google.com>
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 c6417ff..f433d38 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
@@ -451,6 +451,17 @@
cls.library.loader == hierarchy.loader);
hierarchy.delayedMemberChecks.add(result);
}
+ } else if (cls.isMixinApplication && a.parent != cls) {
+ result = InheritedImplementationInterfaceConflict.combined(
+ cls,
+ a,
+ b,
+ mergeKind == MergeKind.superclassSetters,
+ cls.library.loader == hierarchy.loader,
+ isInheritableConflict: false);
+ if (result is DelayedMember) {
+ hierarchy.delayedMemberChecks.add(result);
+ }
}
Member target = result.target;
@@ -502,6 +513,13 @@
debug?.log(
"supertypes: checkValidOverride(${cls.fullNameForErrors}, ${fullName(a)}, ${fullName(b)})");
checkValidOverride(a, b);
+ if (a is DelayedMember && !a.isInheritableConflict) {
+ if (b is DelayedMember) {
+ b.addAllDeclarationsTo(a.declarations);
+ } else {
+ addDeclarationIfDifferent(b, a.declarations);
+ }
+ }
} else {
if (isAbstract(a)) {
result = InterfaceConflict.combined(
@@ -1091,7 +1109,8 @@
}
if (mergeKind != MergeKind.membersWithSetters &&
mergeKind != MergeKind.settersWithMembers &&
- member is DelayedMember) {
+ member is DelayedMember &&
+ member.isInheritableConflict) {
hierarchy.delayedMemberChecks.add(member.withParent(cls));
}
return member;
@@ -2092,6 +2111,8 @@
@override
String get fullNameForErrors => declarations.map(fullName).join("%");
+ bool get isInheritableConflict => true;
+
@override
Member get target => declarations.first.target;
}
@@ -2102,8 +2123,12 @@
class InheritedImplementationInterfaceConflict extends DelayedMember {
Member combinedMemberSignatureResult;
+ @override
+ final bool isInheritableConflict;
+
InheritedImplementationInterfaceConflict(KernelClassBuilder parent,
- List<Declaration> declarations, bool isSetter, bool modifyKernel)
+ List<Declaration> declarations, bool isSetter, bool modifyKernel,
+ {this.isInheritableConflict = true})
: super(parent, declarations, isSetter, modifyKernel);
@override
@@ -2144,7 +2169,8 @@
Declaration concreteImplementation,
Declaration other,
bool isSetter,
- bool createForwarders) {
+ bool createForwarders,
+ {bool isInheritableConflict = true}) {
List<Declaration> declarations = <Declaration>[];
if (concreteImplementation is DelayedMember) {
concreteImplementation.addAllDeclarationsTo(declarations);
@@ -2160,7 +2186,8 @@
return declarations.single;
} else {
return new InheritedImplementationInterfaceConflict(
- parent, declarations, isSetter, createForwarders);
+ parent, declarations, isSetter, createForwarders,
+ isInheritableConflict: isInheritableConflict);
}
}
}
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart
new file mode 100644
index 0000000..d9a1e90
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2019, 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.
+
+// The test checks that 'covariant' bit is propagated from the superclass of the
+// mixin application to the mixin application and its subclasses.
+
+class A {
+ void foo(covariant num x) {}
+}
+
+class B {
+ void foo(num x) {}
+}
+
+class C {
+ void foo(num x) {}
+}
+
+class D extends A with B implements C {
+ // This member declaration shouldn't result in a compile-time error.
+ void foo(int x) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.hierarchy.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.hierarchy.expect
new file mode 100644
index 0000000..d9115a1
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.hierarchy.expect
@@ -0,0 +1,138 @@
+Object:
+ superclasses:
+ interfaces:
+ classMembers:
+ Object._haveSameRuntimeType
+ Object.toString
+ Object.runtimeType
+ Object._toString
+ Object._simpleInstanceOf
+ Object._hashCodeRnd
+ Object._instanceOf
+ Object.noSuchMethod
+ Object._objectHashCode
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+
+A:
+ superclasses:
+ Object
+ interfaces:
+ classMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ A.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+
+B:
+ superclasses:
+ Object
+ interfaces:
+ classMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ B.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+
+C:
+ superclasses:
+ Object
+ interfaces:
+ classMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ C.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+
+A with B:
+ superclasses:
+ Object
+ -> A
+ interfaces: B
+ classMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ A with B.B.foo%A.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+ interfaceMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ A with B.B.foo%A.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ interfaceSetters:
+
+D:
+ superclasses:
+ Object
+ -> A
+ -> _D&A&B
+ interfaces: B, C
+ classMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ D.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ classSetters:
+ interfaceMembers:
+ Object.toString
+ Object.runtimeType
+ Object._simpleInstanceOf
+ Object._instanceOf
+ D.foo
+ Object.noSuchMethod
+ Object._identityHashCode
+ Object.hashCode
+ Object._simpleInstanceOfFalse
+ Object._simpleInstanceOfTrue
+ Object.==
+ interfaceSetters:
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.expect
new file mode 100644
index 0000000..17ddb30
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class B extends core::Object {
+ synthetic constructor •() → self::B
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+class C extends core::Object {
+ synthetic constructor •() → self::C
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+abstract class _D&A&B = self::A with self::B {
+ synthetic constructor •() → self::_D&A&B
+ : super self::A::•()
+ ;
+ forwarding-stub method foo(covariant core::num x) → void
+ return super.{self::A::foo}(x);
+}
+class D extends self::_D&A&B implements self::C {
+ synthetic constructor •() → self::D
+ : super self::_D&A&B::•()
+ ;
+ method foo(covariant core::int x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.transformed.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.transformed.expect
new file mode 100644
index 0000000..cec0223
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.legacy.transformed.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class B extends core::Object {
+ synthetic constructor •() → self::B
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+class C extends core::Object {
+ synthetic constructor •() → self::C
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+abstract class _D&A&B extends self::A implements self::B {
+ synthetic constructor •() → self::_D&A&B
+ : super self::A::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class D extends self::_D&A&B implements self::C {
+ synthetic constructor •() → self::D
+ : super self::_D&A&B::•()
+ ;
+ method foo(covariant core::int x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect
new file mode 100644
index 0000000..241bbe0
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.outline.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ ;
+ method foo(covariant core::num x) → void
+ ;
+}
+class B extends core::Object {
+ synthetic constructor •() → self::B
+ ;
+ method foo(core::num x) → void
+ ;
+}
+class C extends core::Object {
+ synthetic constructor •() → self::C
+ ;
+ method foo(core::num x) → void
+ ;
+}
+abstract class _D&A&B = self::A with self::B {
+ synthetic constructor •() → self::_D&A&B
+ : super self::A::•()
+ ;
+ forwarding-stub method foo(covariant core::num x) → void
+ return super.{self::A::foo}(x);
+}
+class D extends self::_D&A&B implements self::C {
+ synthetic constructor •() → self::D
+ ;
+ method foo(covariant core::int x) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect
new file mode 100644
index 0000000..17ddb30
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class B extends core::Object {
+ synthetic constructor •() → self::B
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+class C extends core::Object {
+ synthetic constructor •() → self::C
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+abstract class _D&A&B = self::A with self::B {
+ synthetic constructor •() → self::_D&A&B
+ : super self::A::•()
+ ;
+ forwarding-stub method foo(covariant core::num x) → void
+ return super.{self::A::foo}(x);
+}
+class D extends self::_D&A&B implements self::C {
+ synthetic constructor •() → self::D
+ : super self::_D&A&B::•()
+ ;
+ method foo(covariant core::int x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.transformed.expect b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.transformed.expect
new file mode 100644
index 0000000..cec0223
--- /dev/null
+++ b/pkg/front_end/testcases/covariant_parameter_in_superclass_of_mixin_application.dart.strong.transformed.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A
+ : super core::Object::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class B extends core::Object {
+ synthetic constructor •() → self::B
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+class C extends core::Object {
+ synthetic constructor •() → self::C
+ : super core::Object::•()
+ ;
+ method foo(core::num x) → void {}
+}
+abstract class _D&A&B extends self::A implements self::B {
+ synthetic constructor •() → self::_D&A&B
+ : super self::A::•()
+ ;
+ method foo(covariant core::num x) → void {}
+}
+class D extends self::_D&A&B implements self::C {
+ synthetic constructor •() → self::D
+ : super self::_D&A&B::•()
+ ;
+ method foo(covariant core::int x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect b/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
index bec105b..426ba18 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.hierarchy.expect
@@ -115,7 +115,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ A0.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -128,7 +128,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ A0.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -180,7 +180,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ A1.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -279,7 +279,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ A2.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -311,7 +311,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -324,7 +324,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -344,7 +344,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -357,7 +357,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -409,7 +409,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _A1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -443,7 +443,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _A1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -456,7 +456,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- A1X.M.foo%S.foo
+ _A1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -542,7 +542,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _A2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -577,7 +577,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _A2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -590,7 +590,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- A2X.M.foo%S.foo
+ _A2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -609,7 +609,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -622,7 +622,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -642,7 +642,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -655,7 +655,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -707,7 +707,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B1&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -741,7 +741,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B1&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -754,7 +754,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- B1.M.foo%S.foo
+ _B1&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -840,7 +840,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B2&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -875,7 +875,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B2&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -888,7 +888,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- B2.M.foo%S.foo
+ _B2&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -907,7 +907,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -920,7 +920,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -940,7 +940,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -953,7 +953,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -974,7 +974,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -987,7 +987,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ S with M.M.foo%S.foo%M.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1039,7 +1039,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1073,7 +1073,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1086,7 +1086,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- _B1X&S&M1&M with MX.M.foo%S.foo
+ _B1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1108,7 +1108,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1121,7 +1121,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- B1X.M.foo%S.foo
+ _B1X&S&M1 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1207,7 +1207,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1242,7 +1242,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1255,7 +1255,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- _B2X&S&M1&M2&M with MX.M.foo%S.foo
+ _B2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1278,7 +1278,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- M.foo
+ _B2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
@@ -1291,7 +1291,7 @@
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
- B2X.M.foo%S.foo
+ _B2X&S&M1&M2 with M.M.foo%S.foo
Object.noSuchMethod
Object._identityHashCode
Object.hashCode
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect b/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
index 0900d21..6856ac8 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.legacy.expect
@@ -122,66 +122,6 @@
// class B2X extends S with M1, M2, M, MX {}
// ^^^
//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
-// class A1X = S with M1, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
-// class A2X = S with M1, M2, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
-// class B1 extends S with M1, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
-// class B2 extends S with M1, M2, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
-// class B1X extends S with M1, M, MX {}
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
-// class B2X extends S with M1, M2, M, MX {}
-// ^^^
-//
import self as self;
import "dart:core" as core;
@@ -216,6 +156,7 @@
synthetic constructor •() → self::A0
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _A1&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_A1&S&M1
@@ -248,6 +189,7 @@
synthetic constructor •() → self::_A0X&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X
@@ -269,7 +211,6 @@
synthetic constructor •() → self::A1X
: super self::_A1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _A2X&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_A2X&S&M1
@@ -291,12 +232,12 @@
synthetic constructor •() → self::A2X
: super self::_A2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0&S&M = self::S with self::M {
synthetic constructor •() → self::_B0&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0
@@ -318,7 +259,6 @@
synthetic constructor •() → self::B1
: super self::_B1&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B2&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_B2&S&M1
@@ -340,12 +280,12 @@
synthetic constructor •() → self::B2
: super self::_B2&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0X&S&M = self::S with self::M {
synthetic constructor •() → self::_B0X&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX {
synthetic constructor •() → self::_B0X&S&M&MX
@@ -372,13 +312,11 @@
synthetic constructor •() → self::_B1X&S&M1&M&MX
: super self::_B1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B1X extends self::_B1X&S&M1&M&MX {
synthetic constructor •() → self::B1X
: super self::_B1X&S&M1&M&MX::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B2X&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_B2X&S&M1
@@ -400,12 +338,10 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
: super self::_B2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B2X extends self::_B2X&S&M1&M2&M&MX {
synthetic constructor •() → self::B2X
: super self::_B2X&S&M1&M2&M&MX::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect b/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
index 49aba4d..f59920c 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.legacy.transformed.expect
@@ -122,66 +122,6 @@
// class B2X extends S with M1, M2, M, MX {}
// ^^^
//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
-// class A1X = S with M1, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
-// class A2X = S with M1, M2, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
-// class B1 extends S with M1, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
-// class B2 extends S with M1, M2, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
-// class B1X extends S with M1, M, MX {}
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
-// class B2X extends S with M1, M2, M, MX {}
-// ^^^
-//
import self as self;
import "dart:core" as core;
@@ -216,7 +156,7 @@
synthetic constructor •() → self::A0
: super self::S::•()
;
- method foo() → dynamic {}
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _A1&S&M1 extends self::S implements self::M1 {
synthetic constructor •() → self::_A1&S&M1
@@ -249,7 +189,7 @@
synthetic constructor •() → self::_A0X&S&M
: super self::S::•()
;
- method foo() → dynamic {}
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class A0X extends self::_A0X&S&M implements self::MX {
synthetic constructor •() → self::A0X
@@ -271,7 +211,6 @@
synthetic constructor •() → self::A1X
: super self::_A1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _A2X&S&M1 extends self::S implements self::M1 {
synthetic constructor •() → self::_A2X&S&M1
@@ -293,13 +232,12 @@
synthetic constructor •() → self::A2X
: super self::_A2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0&S&M extends self::S implements self::M {
synthetic constructor •() → self::_B0&S&M
: super self::S::•()
;
- method foo() → dynamic {}
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0
@@ -321,7 +259,6 @@
synthetic constructor •() → self::B1
: super self::_B1&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B2&S&M1 extends self::S implements self::M1 {
synthetic constructor •() → self::_B2&S&M1
@@ -343,13 +280,12 @@
synthetic constructor •() → self::B2
: super self::_B2&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0X&S&M extends self::S implements self::M {
synthetic constructor •() → self::_B0X&S&M
: super self::S::•()
;
- method foo() → dynamic {}
+ abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B0X&S&M&MX extends self::_B0X&S&M implements self::MX {
synthetic constructor •() → self::_B0X&S&M&MX
@@ -376,13 +312,11 @@
synthetic constructor •() → self::_B1X&S&M1&M&MX
: super self::_B1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B1X extends self::_B1X&S&M1&M&MX {
synthetic constructor •() → self::B1X
: super self::_B1X&S&M1&M&MX::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
abstract class _B2X&S&M1 extends self::S implements self::M1 {
synthetic constructor •() → self::_B2X&S&M1
@@ -404,12 +338,10 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
: super self::_B2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
class B2X extends self::_B2X&S&M1&M2&M&MX {
synthetic constructor •() → self::B2X
: super self::_B2X&S&M1&M2&M&MX::•()
;
- abstract forwarding-stub method foo([dynamic x = null]) → dynamic;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
index 90453d9..a241bd6 100644
--- a/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin_application_override.dart.outline.expect
@@ -122,66 +122,6 @@
// class B2X extends S with M1, M2, M, MX {}
// ^^^
//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:26:7: Context: Override was introduced in the mixin application class 'A1X'.
-// class A1X = S with M1, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:27:7: Context: Override was introduced in the mixin application class 'A2X'.
-// class A2X = S with M1, M2, M, MX;
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:31:7: Context: Both members are inherited by the non-abstract class 'B1'.
-// class B1 extends S with M1, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:33:7: Context: Both members are inherited by the non-abstract class 'B2'.
-// class B2 extends S with M1, M2, M {}
-// ^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:37:7: Context: Both members are inherited by the non-abstract class 'B1X'.
-// class B1X extends S with M1, M, MX {}
-// ^^^
-//
-// pkg/front_end/testcases/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
-// foo() {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
-// foo([x]) {}
-// ^
-// pkg/front_end/testcases/mixin_application_override.dart:39:7: Context: Both members are inherited by the non-abstract class 'B2X'.
-// class B2X extends S with M1, M2, M, MX {}
-// ^^^
-//
import self as self;
import "dart:core" as core;
@@ -213,6 +153,7 @@
synthetic constructor •() → self::A0
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _A1&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_A1&S&M1
@@ -245,6 +186,7 @@
synthetic constructor •() → self::_A0X&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class A0X = self::_A0X&S&M with self::MX {
synthetic constructor •() → self::A0X
@@ -266,7 +208,6 @@
synthetic constructor •() → self::A1X
: super self::_A1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _A2X&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_A2X&S&M1
@@ -288,12 +229,12 @@
synthetic constructor •() → self::A2X
: super self::_A2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B0&S&M = self::S with self::M {
synthetic constructor •() → self::_B0&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B0 extends self::_B0&S&M {
synthetic constructor •() → self::B0
@@ -313,7 +254,6 @@
class B1 extends self::_B1&S&M1&M {
synthetic constructor •() → self::B1
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B2&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_B2&S&M1
@@ -334,12 +274,12 @@
class B2 extends self::_B2&S&M1&M2&M {
synthetic constructor •() → self::B2
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B0X&S&M = self::S with self::M {
synthetic constructor •() → self::_B0X&S&M
: super self::S::•()
;
+ abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B0X&S&M&MX = self::_B0X&S&M with self::MX {
synthetic constructor •() → self::_B0X&S&M&MX
@@ -365,12 +305,10 @@
synthetic constructor •() → self::_B1X&S&M1&M&MX
: super self::_B1X&S&M1&M::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B1X extends self::_B1X&S&M1&M&MX {
synthetic constructor •() → self::B1X
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
abstract class _B2X&S&M1 = self::S with self::M1 {
synthetic constructor •() → self::_B2X&S&M1
@@ -392,12 +330,10 @@
synthetic constructor •() → self::_B2X&S&M1&M2&M&MX
: super self::_B2X&S&M1&M2&M::•()
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
class B2X extends self::_B2X&S&M1&M2&M&MX {
synthetic constructor •() → self::B2X
;
- abstract forwarding-stub method foo([dynamic x]) → dynamic;
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.hierarchy.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.hierarchy.expect
index 6fe92fb..7b077f3 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.hierarchy.expect
@@ -67,7 +67,7 @@
Object.toString
Object.runtimeType
Object._simpleInstanceOf
- M1.v2
+ C.M1.v2%A.v2%M1.v2
Object._instanceOf
Object.noSuchMethod
Object._identityHashCode
@@ -77,13 +77,13 @@
Object._simpleInstanceOfTrue
Object.==
classSetters:
- M1.v2
+ C.M1.v2%A.v2%M1.v2
A.v1
interfaceMembers:
Object.toString
Object.runtimeType
Object._simpleInstanceOf
- M1.v2
+ C.M1.v2%A.v2%M1.v2
Object._instanceOf
Object.noSuchMethod
Object._identityHashCode
@@ -93,5 +93,5 @@
Object._simpleInstanceOfTrue
Object.==
interfaceSetters:
- M1.v2
+ C.M1.v2%A.v2%M1.v2
A.v1
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
index df047dc..edbfd6d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.hierarchy.expect
@@ -87,9 +87,9 @@
-> B
interfaces: M, I<int>
classMembers:
- M.y
+ C.M.y%B.y%I.y
Object.toString
- M.x
+ C.M.x%B.x%I.x
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
@@ -100,12 +100,12 @@
Object._simpleInstanceOfTrue
Object.==
classSetters:
- M.y
- M.x
+ C.M.y%B.y%I.y
+ C.M.x%B.x%I.x
interfaceMembers:
- C.M.y%I.y
+ C.M.y%B.y%I.y
Object.toString
- C.M.x%I.x
+ C.M.x%B.x%I.x
Object.runtimeType
Object._simpleInstanceOf
Object._instanceOf
@@ -116,8 +116,8 @@
Object._simpleInstanceOfTrue
Object.==
interfaceSetters:
- C.M.y%I.y
- C.M.x%I.x
+ C.M.y%B.y%I.y
+ C.M.x%B.x%I.x
Comparable:
superclasses:
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index e6e64b1..1e7266a 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -71,6 +71,7 @@
control_flow_collection: TextSerializationFailure
control_flow_collection_inference: TextSerializationFailure
covariant_generic: TextSerializationFailure # Was: RuntimeError
+covariant_parameter_in_superclass_of_mixin_application: TextSerializationFailure
cycles: TextSerializationFailure # Was: Pass
default_values: TextSerializationFailure # Was: Pass
deferred_lib: TextSerializationFailure # Was: Pass