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