Version 2.12.0-206.0.dev

Merge commit '78ca1452dc05f21a1c0578f33f30e5db26f84df0' into 'dev'
diff --git a/DEPS b/DEPS
index 70da9eb..b9546ff 100644
--- a/DEPS
+++ b/DEPS
@@ -102,7 +102,7 @@
 
   "chromedriver_tag": "83.0.4103.39",
   "dartdoc_rev" : "a1d86f2c992f4660ddcc09b27733396e92765d2a",
-  "ffi_rev": "a5d4232cd38562c75a3ed847baa340e399538028",
+  "ffi_rev": "31352979f261f7c6ea88fa0a2cfb0fdd004c38fb",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
   "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
   "glob_rev": "7c0ef8d4fa086f6b185c4dd724b700e7d7ad8f79",
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 6484fa9d..6c3d8e8 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
@@ -427,9 +427,6 @@
       Supertype supertype, TypeEnvironment typeEnvironment) {
     SourceLibraryBuilder libraryBuilder = this.library;
     Library library = libraryBuilder.library;
-    final DartType bottomType = library.isNonNullableByDefault
-        ? const NeverType(Nullability.nonNullable)
-        : const NullType();
 
     Set<TypeArgumentIssue> issues = {};
     issues.addAll(findTypeArgumentIssues(
@@ -438,7 +435,6 @@
                 supertype.typeArguments),
             typeEnvironment,
             SubtypeCheckMode.ignoringNullabilities,
-            bottomType,
             allowSuperBounded: false) ??
         const []);
     if (library.isNonNullableByDefault) {
@@ -448,7 +444,6 @@
                   supertype.typeArguments),
               typeEnvironment,
               SubtypeCheckMode.withNullabilities,
-              bottomType,
               allowSuperBounded: false) ??
           const []);
     }
@@ -456,7 +451,7 @@
       DartType argument = issue.argument;
       TypeParameter typeParameter = issue.typeParameter;
       bool inferred = libraryBuilder.inferredTypes.contains(argument);
-      if (argument is FunctionType && argument.typeParameters.length > 0) {
+      if (isGenericFunctionTypeOrAlias(argument)) {
         if (inferred) {
           libraryBuilder.reportTypeArgumentIssue(
               templateGenericFunctionTypeInferredAsActualTypeArgument
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 9e90a19..f46bba9 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -29,7 +29,6 @@
         Extension,
         Field,
         FunctionNode,
-        FunctionType,
         InterfaceType,
         InvalidType,
         Library,
@@ -69,7 +68,8 @@
         TypeArgumentIssue,
         findTypeArgumentIssues,
         findTypeArgumentIssuesForInvocation,
-        getGenericTypeName;
+        getGenericTypeName,
+        isGenericFunctionTypeOrAlias;
 
 import 'package:kernel/type_algebra.dart' show Substitution, substitute;
 
@@ -3236,7 +3236,7 @@
           inferredTypes.contains(argument);
       offset =
           typeArgumentsInfo?.getOffsetForIndex(issue.index, offset) ?? offset;
-      if (argument is FunctionType && argument.typeParameters.length > 0) {
+      if (isGenericFunctionTypeOrAlias(argument)) {
         if (issueInferred) {
           message = templateGenericFunctionTypeInferredAsActualTypeArgument
               .withArguments(argument, isNonNullableByDefault);
@@ -3359,24 +3359,16 @@
 
   void checkBoundsInTypeParameters(TypeEnvironment typeEnvironment,
       List<TypeParameter> typeParameters, Uri fileUri) {
-    final DartType bottomType = library.isNonNullableByDefault
-        ? const NeverType(Nullability.nonNullable)
-        : const NullType();
-
     // Check in bounds of own type variables.
     for (TypeParameter parameter in typeParameters) {
       Set<TypeArgumentIssue> issues = {};
-      issues.addAll(findTypeArgumentIssues(
-              library,
-              parameter.bound,
-              typeEnvironment,
-              SubtypeCheckMode.ignoringNullabilities,
-              bottomType,
+      issues.addAll(findTypeArgumentIssues(library, parameter.bound,
+              typeEnvironment, SubtypeCheckMode.ignoringNullabilities,
               allowSuperBounded: true) ??
           const []);
       if (library.isNonNullableByDefault) {
         issues.addAll(findTypeArgumentIssues(library, parameter.bound,
-                typeEnvironment, SubtypeCheckMode.withNullabilities, bottomType,
+                typeEnvironment, SubtypeCheckMode.withNullabilities,
                 allowSuperBounded: true) ??
             const []);
       }
@@ -3392,7 +3384,7 @@
           continue;
         }
 
-        if (argument is FunctionType && argument.typeParameters.length > 0) {
+        if (isGenericFunctionTypeOrAlias(argument)) {
           reportTypeArgumentIssue(
               messageGenericFunctionTypeUsedAsActualTypeArgument,
               fileUri,
@@ -3446,17 +3438,14 @@
       }
     }
     if (!skipReturnType && returnType != null) {
-      final DartType bottomType = isNonNullableByDefault
-          ? const NeverType(Nullability.nonNullable)
-          : const NullType();
       Set<TypeArgumentIssue> issues = {};
       issues.addAll(findTypeArgumentIssues(library, returnType, typeEnvironment,
-              SubtypeCheckMode.ignoringNullabilities, bottomType,
+              SubtypeCheckMode.ignoringNullabilities,
               allowSuperBounded: true) ??
           const []);
       if (isNonNullableByDefault) {
         issues.addAll(findTypeArgumentIssues(library, returnType,
-                typeEnvironment, SubtypeCheckMode.withNullabilities, bottomType,
+                typeEnvironment, SubtypeCheckMode.withNullabilities,
                 allowSuperBounded: true) ??
             const []);
       }
@@ -3467,7 +3456,7 @@
         // We don't need to check if [argument] was inferred or specified
         // here, because inference in return types boils down to instantiate-
         // -to-bound, and it can't provide a type that violates the bound.
-        if (argument is FunctionType && argument.typeParameters.length > 0) {
+        if (isGenericFunctionTypeOrAlias(argument)) {
           reportTypeArgumentIssue(
               messageGenericFunctionTypeUsedAsActualTypeArgument,
               fileUri,
@@ -3558,17 +3547,14 @@
   void checkBoundsInType(
       DartType type, TypeEnvironment typeEnvironment, Uri fileUri, int offset,
       {bool inferred, bool allowSuperBounded = true}) {
-    final DartType bottomType = isNonNullableByDefault
-        ? const NeverType(Nullability.nonNullable)
-        : const NullType();
     Set<TypeArgumentIssue> issues = {};
     issues.addAll(findTypeArgumentIssues(library, type, typeEnvironment,
-            SubtypeCheckMode.ignoringNullabilities, bottomType,
+            SubtypeCheckMode.ignoringNullabilities,
             allowSuperBounded: allowSuperBounded) ??
         const []);
     if (isNonNullableByDefault) {
       issues.addAll(findTypeArgumentIssues(library, type, typeEnvironment,
-              SubtypeCheckMode.withNullabilities, bottomType,
+              SubtypeCheckMode.withNullabilities,
               allowSuperBounded: allowSuperBounded) ??
           const []);
     }
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index e78f36c..040d1fe 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -1213,6 +1213,7 @@
 flattened
 flexibility
 flexible
+flip
 float
 flow
 flow's
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.outline.expect b/pkg/front_end/testcases/general/ffi_sample.dart.outline.expect
deleted file mode 100644
index c1e27d7..0000000
--- a/pkg/front_end/testcases/general/ffi_sample.dart.outline.expect
+++ /dev/null
@@ -1,36 +0,0 @@
-library;
-import self as self;
-import "dart:ffi" as ffi;
-import "dart:core" as core;
-
-import "dart:ffi";
-import "package:ffi/ffi.dart";
-
-class Coordinate extends ffi::Struct {
-  @ffi::Double::•()
-  field core::double* x;
-  @ffi::Double::•()
-  field core::double* y;
-  field ffi::Pointer<self::Coordinate*>* next;
-  static factory allocate(core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate*
-    ;
-  abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
-  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
-  ;
-
-
-Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:13:4 -> InstanceConstant(const Double{})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:16:4 -> InstanceConstant(const Double{})
-Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.strong.expect b/pkg/front_end/testcases/general/ffi_sample.dart.strong.expect
deleted file mode 100644
index 7121f54..0000000
--- a/pkg/front_end/testcases/general/ffi_sample.dart.strong.expect
+++ /dev/null
@@ -1,44 +0,0 @@
-library;
-import self as self;
-import "dart:ffi" as ffi;
-import "dart:core" as core;
-import "package:ffi/src/allocation.dart" as all;
-
-import "dart:ffi";
-import "package:ffi/ffi.dart";
-
-class Coordinate extends ffi::Struct {
-  @#C1
-  field core::double* x = null;
-  @#C1
-  field core::double* y = null;
-  field ffi::Pointer<self::Coordinate*>* next = null;
-  static factory allocate(core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate* {
-    return let final self::Coordinate* #t1 = ffi::StructPointer|get#ref<self::Coordinate*>(all::allocate<self::Coordinate*>()) in block {
-      #t1.{self::Coordinate::x} = x;
-      #t1.{self::Coordinate::y} = y;
-      #t1.{self::Coordinate::next} = next;
-    } =>#t1;
-  }
-  abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
-  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 {}
-
-constants  {
-  #C1 = ffi::Double {}
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect b/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect
deleted file mode 100644
index 906fb3f..0000000
--- a/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect
+++ /dev/null
@@ -1,75 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-import "dart:ffi" as ffi;
-import "package:ffi/src/allocation.dart" as all;
-
-import "dart:ffi";
-import "package:ffi/ffi.dart";
-
-@#C3
-@#C8
-class Coordinate extends ffi::Struct {
-  @#C3
-  static final field core::int* #sizeOf = (#C11).{core::List::[]}(ffi::_abi());
-  @#C3
-  constructor #fromTypedDataBase(dynamic #pointer) → dynamic
-    : super ffi::Struct::_fromPointer(#pointer)
-    ;
-  static factory allocate(core::double* x, core::double* y, ffi::Pointer<self::Coordinate*>* next) → self::Coordinate* {
-    return let final self::Coordinate* #t1 = ffi::StructPointer|get#ref<self::Coordinate*>(all::allocate<self::Coordinate*>()) in block {
-      #t1.{self::Coordinate::x} = x;
-      #t1.{self::Coordinate::y} = y;
-      #t1.{self::Coordinate::next} = next;
-    } =>#t1;
-  }
-  abstract member-signature get _addressOf() → core::Object*; -> ffi::Struct::_addressOf
-  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
-  get x() → core::double*
-    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()));
-  set x(core::double* #v) → void
-    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C13).{core::List::[]}(ffi::_abi()), #v);
-  get y() → core::double*
-    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()));
-  set y(core::double* #v) → void
-    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C15).{core::List::[]}(ffi::_abi()), #v);
-  get next() → ffi::Pointer<self::Coordinate*>*
-    return ffi::_fromAddress<self::Coordinate*>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi())));
-  set next(ffi::Pointer<self::Coordinate*>* #v) → void
-    return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C17).{core::List::[]}(ffi::_abi()), #v.{ffi::Pointer::address});
-}
-static method main() → dynamic {}
-
-constants  {
-  #C1 = "vm:entry-point"
-  #C2 = null
-  #C3 = core::pragma {name:#C1, options:#C2}
-  #C4 = "vm:ffi:struct-fields"
-  #C5 = TypeLiteralConstant(ffi::Double)
-  #C6 = TypeLiteralConstant(ffi::Pointer<ffi::NativeType>)
-  #C7 = <core::Type>[#C5, #C5, #C6]
-  #C8 = core::pragma {name:#C4, options:#C7}
-  #C9 = 24
-  #C10 = 20
-  #C11 = <core::int*>[#C9, #C10, #C9]
-  #C12 = 0
-  #C13 = <core::int*>[#C12, #C12, #C12]
-  #C14 = 8
-  #C15 = <core::int*>[#C14, #C14, #C14]
-  #C16 = 16
-  #C17 = <core::int*>[#C16, #C16, #C16]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///ffi_sample.dart:
-- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline_modelled.expect
deleted file mode 100644
index 2b9a9f6..0000000
--- a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,13 +0,0 @@
-import "package:ffi/ffi.dart";
-import 'dart:ffi';
-
-class Coordinate extends Struct {
-  Pointer<Coordinate> next;
-  @Double()
-  double x;
-  @Double()
-  double y;
-  factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {}
-}
-
-main() {}
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart b/pkg/front_end/testcases/nnbd/ffi_sample.dart
similarity index 88%
rename from pkg/front_end/testcases/general/ffi_sample.dart
rename to pkg/front_end/testcases/nnbd/ffi_sample.dart
index db95797..0c7f870 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart
@@ -11,12 +11,12 @@
 /// Sample struct for dart:ffi library.
 class Coordinate extends Struct {
   @Double()
-  double x;
+  external double x;
 
   @Double()
-  double y;
+  external double y;
 
-  Pointer<Coordinate> next;
+  external Pointer<Coordinate> next;
 
   factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {
     return allocate<Coordinate>().ref
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.outline.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.outline.expect
new file mode 100644
index 0000000..915c142
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.outline.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+import "dart:core" as core;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class Coordinate extends ffi::Struct {
+  @ffi::Double::•()
+  external get x() → core::double;
+  @ffi::Double::•()
+  external set x(core::double #externalFieldValue) → void;
+  @ffi::Double::•()
+  external get y() → core::double;
+  @ffi::Double::•()
+  external set y(core::double #externalFieldValue) → void;
+  external get next() → ffi::Pointer<self::Coordinate>;
+  external set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void;
+  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate
+    ;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:13:4 -> InstanceConstant(const Double{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:13:4 -> InstanceConstant(const Double{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:16:4 -> InstanceConstant(const Double{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///ffi_sample.dart:16:4 -> InstanceConstant(const Double{})
+Extra constant evaluation: evaluated: 4, effectively constant: 4
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect
new file mode 100644
index 0000000..0b6b078
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+import "dart:core" as core;
+import "package:ffi/src/allocation.dart" as all;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class Coordinate extends ffi::Struct {
+  @#C1
+  external get x() → core::double;
+  @#C1
+  external set x(core::double #externalFieldValue) → void;
+  @#C1
+  external get y() → core::double;
+  @#C1
+  external set y(core::double #externalFieldValue) → void;
+  external get next() → ffi::Pointer<self::Coordinate>;
+  external set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void;
+  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
+    return let final self::Coordinate #t1 = ffi::StructPointer|get#ref<self::Coordinate>(all::allocate<self::Coordinate>()) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = ffi::Double {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
new file mode 100644
index 0000000..92815a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.strong.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "package:ffi/src/allocation.dart" as all;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+@#C3
+@#C8
+class Coordinate extends ffi::Struct {
+  @#C3
+  static final field core::int* #sizeOf = (#C11).{core::List::[]}(ffi::_abi())/*isLegacy*/;
+  @#C3
+  constructor #fromTypedDataBase(dynamic #pointer) → dynamic
+    : super ffi::Struct::_fromPointer(#pointer)
+    ;
+  @#C12
+  get x() → core::double
+    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()));
+  @#C12
+  set x(core::double #externalFieldValue) → void
+    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()), #externalFieldValue);
+  @#C12
+  get y() → core::double
+    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()));
+  @#C12
+  set y(core::double #externalFieldValue) → void
+    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()), #externalFieldValue);
+  get next() → ffi::Pointer<self::Coordinate>
+    return ffi::_fromAddress<self::Coordinate>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi())));
+  set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void
+    return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi()), #externalFieldValue.{ffi::Pointer::address});
+  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
+    return let final self::Coordinate #t1 = ffi::StructPointer|get#ref<self::Coordinate>(all::allocate<self::Coordinate>()) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "vm:entry-point"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "vm:ffi:struct-fields"
+  #C5 = TypeLiteralConstant(ffi::Double)
+  #C6 = TypeLiteralConstant(ffi::Pointer<ffi::NativeType>)
+  #C7 = <core::Type>[#C5, #C5, #C6]
+  #C8 = core::pragma {name:#C4, options:#C7}
+  #C9 = 24
+  #C10 = 20
+  #C11 = <core::int*>[#C9, #C10, #C9]
+  #C12 = ffi::Double {}
+  #C13 = 0
+  #C14 = <core::int*>[#C13, #C13, #C13]
+  #C15 = 8
+  #C16 = <core::int*>[#C15, #C15, #C15]
+  #C17 = 16
+  #C18 = <core::int*>[#C17, #C17, #C17]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline.expect
similarity index 71%
copy from pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect
copy to pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline.expect
index eb10d58..f21ecbe 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline.expect
@@ -3,10 +3,10 @@
 
 class Coordinate extends Struct {
   @Double()
-  double x;
+  external double x;
   @Double()
-  double y;
-  Pointer<Coordinate> next;
+  external double y;
+  external Pointer<Coordinate> next;
   factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {}
 }
 
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline_modelled.expect
similarity index 71%
rename from pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect
rename to pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline_modelled.expect
index eb10d58..263267c 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.textual_outline_modelled.expect
@@ -1,12 +1,12 @@
-import 'dart:ffi';
 import "package:ffi/ffi.dart";
+import 'dart:ffi';
 
 class Coordinate extends Struct {
+  external Pointer<Coordinate> next;
   @Double()
-  double x;
+  external double x;
   @Double()
-  double y;
-  Pointer<Coordinate> next;
+  external double y;
   factory Coordinate.allocate(double x, double y, Pointer<Coordinate> next) {}
 }
 
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect
new file mode 100644
index 0000000..0b6b078
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:ffi" as ffi;
+import "dart:core" as core;
+import "package:ffi/src/allocation.dart" as all;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+class Coordinate extends ffi::Struct {
+  @#C1
+  external get x() → core::double;
+  @#C1
+  external set x(core::double #externalFieldValue) → void;
+  @#C1
+  external get y() → core::double;
+  @#C1
+  external set y(core::double #externalFieldValue) → void;
+  external get next() → ffi::Pointer<self::Coordinate>;
+  external set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void;
+  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
+    return let final self::Coordinate #t1 = ffi::StructPointer|get#ref<self::Coordinate>(all::allocate<self::Coordinate>()) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = ffi::Double {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
new file mode 100644
index 0000000..92815a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/ffi_sample.dart.weak.transformed.expect
@@ -0,0 +1,69 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:ffi" as ffi;
+import "package:ffi/src/allocation.dart" as all;
+
+import "dart:ffi";
+import "package:ffi/ffi.dart";
+
+@#C3
+@#C8
+class Coordinate extends ffi::Struct {
+  @#C3
+  static final field core::int* #sizeOf = (#C11).{core::List::[]}(ffi::_abi())/*isLegacy*/;
+  @#C3
+  constructor #fromTypedDataBase(dynamic #pointer) → dynamic
+    : super ffi::Struct::_fromPointer(#pointer)
+    ;
+  @#C12
+  get x() → core::double
+    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()));
+  @#C12
+  set x(core::double #externalFieldValue) → void
+    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C14).{core::List::[]}(ffi::_abi()), #externalFieldValue);
+  @#C12
+  get y() → core::double
+    return ffi::_loadDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()));
+  @#C12
+  set y(core::double #externalFieldValue) → void
+    return ffi::_storeDouble(this.{ffi::Struct::_addressOf}, (#C16).{core::List::[]}(ffi::_abi()), #externalFieldValue);
+  get next() → ffi::Pointer<self::Coordinate>
+    return ffi::_fromAddress<self::Coordinate>(ffi::_loadIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi())));
+  set next(ffi::Pointer<self::Coordinate> #externalFieldValue) → void
+    return ffi::_storeIntPtr(this.{ffi::Struct::_addressOf}, (#C18).{core::List::[]}(ffi::_abi()), #externalFieldValue.{ffi::Pointer::address});
+  static factory allocate(core::double x, core::double y, ffi::Pointer<self::Coordinate> next) → self::Coordinate {
+    return let final self::Coordinate #t1 = ffi::StructPointer|get#ref<self::Coordinate>(all::allocate<self::Coordinate>()) in block {
+      #t1.{self::Coordinate::x} = x;
+      #t1.{self::Coordinate::y} = y;
+      #t1.{self::Coordinate::next} = next;
+    } =>#t1;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = "vm:entry-point"
+  #C2 = null
+  #C3 = core::pragma {name:#C1, options:#C2}
+  #C4 = "vm:ffi:struct-fields"
+  #C5 = TypeLiteralConstant(ffi::Double)
+  #C6 = TypeLiteralConstant(ffi::Pointer<ffi::NativeType>)
+  #C7 = <core::Type>[#C5, #C5, #C6]
+  #C8 = core::pragma {name:#C4, options:#C7}
+  #C9 = 24
+  #C10 = 20
+  #C11 = <core::int*>[#C9, #C10, #C9]
+  #C12 = ffi::Double {}
+  #C13 = 0
+  #C14 = <core::int*>[#C13, #C13, #C13]
+  #C15 = 8
+  #C16 = <core::int*>[#C15, #C15, #C15]
+  #C17 = 16
+  #C18 = <core::int*>[#C17, #C17, #C17]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///ffi_sample.dart:
+- Double. (from org-dartlang-sdk:///sdk/lib/ffi/native_type.dart:116:9)
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart b/pkg/front_end/testcases/nnbd/issue42429.dart
index 5023f9a..9ef8843 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart
@@ -30,6 +30,9 @@
   FNowhere<num?> fNowhereNumNullable; // Error.
   FNowhere<int?> fNowhereIntNullable; // Error.
   FNowhere<Null> fNowhereNull; // Error.
+  FArgument<Object?> fArgumentObjectNullable; // Error.
+  FArgument<dynamic> fArgumentDynamic; // Error.
+  FArgument<void> fArgumentVoid; // Error.
 
   A<Object?> aObjectNullable; // Ok.
   A<dynamic> aDynamic; // Ok.
@@ -37,9 +40,6 @@
   A<num> aNum; // Ok.
   A<int> aInt; // Ok.
   A<Never> aNever; // Ok.
-  FArgument<Object?> fArgumentObjectNullable; // Ok.
-  FArgument<dynamic> fArgumentDynamic; // Ok.
-  FArgument<void> fArgumentVoid; // Ok.
   FArgument<num> fArgumentNum; // Ok.
   FArgument<int> fArgumentInt; // Ok.
   FArgument<Never> fArgumentNever; // Ok.
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
index eebb429..77cfde0 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.expect
@@ -167,6 +167,31 @@
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object?> fArgumentObjectNullable; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<dynamic> fArgumentDynamic; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<void> fArgumentVoid; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -200,15 +225,15 @@
   () → dynamic fNowhereNumNullable;
   () → dynamic fNowhereIntNullable;
   () → dynamic fNowhereNull;
+  (core::Object?) → dynamic fArgumentObjectNullable;
+  (dynamic) → dynamic fArgumentDynamic;
+  (void) → dynamic fArgumentVoid;
   self::A<core::Object?> aObjectNullable;
   self::A<dynamic> aDynamic;
   self::A<void> aVoid;
   self::A<core::num> aNum;
   self::A<core::int> aInt;
   self::A<Never> aNever;
-  (core::Object?) → dynamic fArgumentObjectNullable;
-  (dynamic) → dynamic fArgumentDynamic;
-  (void) → dynamic fArgumentVoid;
   (core::num) → dynamic fArgumentNum;
   (core::int) → dynamic fArgumentInt;
   (Never) → dynamic fArgumentNever;
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
index eebb429..77cfde0 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.strong.transformed.expect
@@ -167,6 +167,31 @@
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object?> fArgumentObjectNullable; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<dynamic> fArgumentDynamic; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<void> fArgumentVoid; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -200,15 +225,15 @@
   () → dynamic fNowhereNumNullable;
   () → dynamic fNowhereIntNullable;
   () → dynamic fNowhereNull;
+  (core::Object?) → dynamic fArgumentObjectNullable;
+  (dynamic) → dynamic fArgumentDynamic;
+  (void) → dynamic fArgumentVoid;
   self::A<core::Object?> aObjectNullable;
   self::A<dynamic> aDynamic;
   self::A<void> aVoid;
   self::A<core::num> aNum;
   self::A<core::int> aInt;
   self::A<Never> aNever;
-  (core::Object?) → dynamic fArgumentObjectNullable;
-  (dynamic) → dynamic fArgumentDynamic;
-  (void) → dynamic fArgumentVoid;
   (core::num) → dynamic fArgumentNum;
   (core::int) → dynamic fArgumentInt;
   (Never) → dynamic fArgumentNever;
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
index eebb429..77cfde0 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.expect
@@ -167,6 +167,31 @@
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object?> fArgumentObjectNullable; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<dynamic> fArgumentDynamic; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<void> fArgumentVoid; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -200,15 +225,15 @@
   () → dynamic fNowhereNumNullable;
   () → dynamic fNowhereIntNullable;
   () → dynamic fNowhereNull;
+  (core::Object?) → dynamic fArgumentObjectNullable;
+  (dynamic) → dynamic fArgumentDynamic;
+  (void) → dynamic fArgumentVoid;
   self::A<core::Object?> aObjectNullable;
   self::A<dynamic> aDynamic;
   self::A<void> aVoid;
   self::A<core::num> aNum;
   self::A<core::int> aInt;
   self::A<Never> aNever;
-  (core::Object?) → dynamic fArgumentObjectNullable;
-  (dynamic) → dynamic fArgumentDynamic;
-  (void) → dynamic fArgumentVoid;
   (core::num) → dynamic fArgumentNum;
   (core::int) → dynamic fArgumentInt;
   (Never) → dynamic fArgumentNever;
diff --git a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
index eebb429..77cfde0 100644
--- a/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42429.dart.weak.transformed.expect
@@ -167,6 +167,31 @@
 // typedef FNowhere<X extends num> = Function();
 //                  ^
 //
+// pkg/front_end/testcases/nnbd/issue42429.dart:33:22: Error: Type argument 'Object?' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+//  - 'Object' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<Object?> fArgumentObjectNullable; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:34:22: Error: Type argument 'dynamic' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<dynamic> fArgumentDynamic; // Error.
+//                      ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
+// pkg/front_end/testcases/nnbd/issue42429.dart:35:19: Error: Type argument 'void' doesn't conform to the bound 'num' of the type variable 'X' on 'FArgument'.
+// Try changing type arguments so that they conform to the bounds.
+//   FArgument<void> fArgumentVoid; // Error.
+//                   ^
+// pkg/front_end/testcases/nnbd/issue42429.dart:7:19: Context: This is the type variable whose bound isn't conformed to.
+// typedef FArgument<X extends num> = Function(X);
+//                   ^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -200,15 +225,15 @@
   () → dynamic fNowhereNumNullable;
   () → dynamic fNowhereIntNullable;
   () → dynamic fNowhereNull;
+  (core::Object?) → dynamic fArgumentObjectNullable;
+  (dynamic) → dynamic fArgumentDynamic;
+  (void) → dynamic fArgumentVoid;
   self::A<core::Object?> aObjectNullable;
   self::A<dynamic> aDynamic;
   self::A<void> aVoid;
   self::A<core::num> aNum;
   self::A<core::int> aInt;
   self::A<Never> aNever;
-  (core::Object?) → dynamic fArgumentObjectNullable;
-  (dynamic) → dynamic fArgumentDynamic;
-  (void) → dynamic fArgumentVoid;
   (core::num) → dynamic fArgumentNum;
   (core::int) → dynamic fArgumentInt;
   (Never) → dynamic fArgumentNever;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart
new file mode 100644
index 0000000..8f9b234
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class AbstractSuper {
+  int extendedConcreteField = 0;
+
+  abstract int extendedAbstractField;
+
+  int declaredConcreteExtendsConcreteField = 0;
+
+  int declaredAbstractExtendsConcreteField = 0;
+
+  abstract int declaredConcreteExtendsAbstractField;
+
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  int declaredConcreteField = 0;
+
+  abstract int declaredAbstractField;
+
+  int declaredConcreteExtendsConcreteField = 0;
+
+  abstract int declaredAbstractExtendsConcreteField;
+
+  int declaredConcreteExtendsAbstractField = 0;
+
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline.expect
new file mode 100644
index 0000000..0b7bb20
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class AbstractSuper {
+  int extendedConcreteField = 0;
+  abstract int extendedAbstractField;
+  int declaredConcreteExtendsConcreteField = 0;
+  int declaredAbstractExtendsConcreteField = 0;
+  abstract int declaredConcreteExtendsAbstractField;
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  int declaredConcreteField = 0;
+  abstract int declaredAbstractField;
+  int declaredConcreteExtendsConcreteField = 0;
+  abstract int declaredAbstractExtendsConcreteField;
+  int declaredConcreteExtendsAbstractField = 0;
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fc83945
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass extends AbstractSuper {
+  abstract int declaredAbstractExtendsAbstractField;
+  abstract int declaredAbstractExtendsConcreteField;
+  abstract int declaredAbstractField;
+  int declaredConcreteExtendsAbstractField = 0;
+  int declaredConcreteExtendsConcreteField = 0;
+  int declaredConcreteField = 0;
+}
+
+abstract class AbstractSuper {
+  abstract int declaredAbstractExtendsAbstractField;
+  abstract int declaredConcreteExtendsAbstractField;
+  abstract int extendedAbstractField;
+  int declaredAbstractExtendsConcreteField = 0;
+  int declaredConcreteExtendsConcreteField = 0;
+  int extendedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.expect
new file mode 100644
index 0000000..bb1a80e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..bb1a80e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_field.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart
new file mode 100644
index 0000000..0abffca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class AbstractSuper {
+  final int extendedConcreteField = 0;
+
+  abstract final int extendedAbstractField;
+
+  final int declaredConcreteExtendsConcreteField = 0;
+
+  final int declaredAbstractExtendsConcreteField = 0;
+
+  abstract final int declaredConcreteExtendsAbstractField;
+
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  final int declaredConcreteField = 0;
+
+  abstract final int declaredAbstractField;
+
+  final int declaredConcreteExtendsConcreteField = 0;
+
+  abstract final int declaredAbstractExtendsConcreteField;
+
+  final int declaredConcreteExtendsAbstractField = 0;
+
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..56b31e0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class AbstractSuper {
+  final int extendedConcreteField = 0;
+  abstract final int extendedAbstractField;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int declaredAbstractExtendsConcreteField = 0;
+  abstract final int declaredConcreteExtendsAbstractField;
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  final int declaredConcreteField = 0;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteExtendsConcreteField = 0;
+  abstract final int declaredAbstractExtendsConcreteField;
+  final int declaredConcreteExtendsAbstractField = 0;
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..856c33f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass extends AbstractSuper {
+  abstract final int declaredAbstractExtendsAbstractField;
+  abstract final int declaredAbstractExtendsConcreteField;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteExtendsAbstractField = 0;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int declaredConcreteField = 0;
+}
+
+abstract class AbstractSuper {
+  abstract final int declaredAbstractExtendsAbstractField;
+  abstract final int declaredConcreteExtendsAbstractField;
+  abstract final int extendedAbstractField;
+  final int declaredAbstractExtendsConcreteField = 0;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int extendedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.expect
new file mode 100644
index 0000000..f4368dd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..f4368dd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_final_field.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart
new file mode 100644
index 0000000..871245a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class AbstractSuper {
+  int get extendedConcreteGetter => 0;
+
+  int get extendedAbstractGetter;
+
+  int get declaredConcreteExtendsConcreteGetter => 0;
+
+  int get declaredAbstractExtendsConcreteGetter => 0;
+
+  int get declaredConcreteExtendsAbstractGetter;
+
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  int get declaredConcreteGetter => 0;
+
+  int get declaredAbstractGetter;
+
+  int get declaredConcreteExtendsConcreteGetter => 0;
+
+  int get declaredAbstractExtendsConcreteGetter;
+
+  int get declaredConcreteExtendsAbstractGetter => 0;
+
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..acc3521
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class AbstractSuper {
+  int get extendedConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredAbstractExtendsConcreteGetter => 0;
+  int get declaredConcreteExtendsAbstractGetter;
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  int get declaredConcreteGetter => 0;
+  int get declaredAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredAbstractExtendsConcreteGetter;
+  int get declaredConcreteExtendsAbstractGetter => 0;
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fac9d18
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass extends AbstractSuper {
+  int get declaredAbstractExtendsAbstractGetter;
+  int get declaredAbstractExtendsConcreteGetter;
+  int get declaredAbstractGetter;
+  int get declaredConcreteExtendsAbstractGetter => 0;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredConcreteGetter => 0;
+}
+
+abstract class AbstractSuper {
+  int get declaredAbstractExtendsAbstractGetter;
+  int get declaredAbstractExtendsConcreteGetter => 0;
+  int get declaredConcreteExtendsAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get extendedConcreteGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.expect
new file mode 100644
index 0000000..bd5fdb7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.transformed.expect
new file mode 100644
index 0000000..bd5fdb7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_getter.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart
new file mode 100644
index 0000000..a04b939
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class AbstractSuper {
+  void extendedConcreteMethod() {}
+
+  void extendedAbstractMethod();
+
+  void declaredConcreteExtendsConcreteMethod() {}
+
+  void declaredAbstractExtendsConcreteMethod() {}
+
+  void declaredConcreteExtendsAbstractMethod();
+
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  void declaredConcreteMethod() {}
+
+  void declaredAbstractMethod();
+
+  void declaredConcreteExtendsConcreteMethod() {}
+
+  void declaredAbstractExtendsConcreteMethod();
+
+  void declaredConcreteExtendsAbstractMethod() {}
+
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline.expect
new file mode 100644
index 0000000..91c1cf9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class AbstractSuper {
+  void extendedConcreteMethod() {}
+  void extendedAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredAbstractExtendsConcreteMethod() {}
+  void declaredConcreteExtendsAbstractMethod();
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  void declaredConcreteMethod() {}
+  void declaredAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredAbstractExtendsConcreteMethod();
+  void declaredConcreteExtendsAbstractMethod() {}
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..02bde9f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass extends AbstractSuper {
+  void declaredAbstractExtendsAbstractMethod();
+  void declaredAbstractExtendsConcreteMethod();
+  void declaredAbstractMethod();
+  void declaredConcreteExtendsAbstractMethod() {}
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredConcreteMethod() {}
+}
+
+abstract class AbstractSuper {
+  void declaredAbstractExtendsAbstractMethod();
+  void declaredAbstractExtendsConcreteMethod() {}
+  void declaredConcreteExtendsAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void extendedAbstractMethod();
+  void extendedConcreteMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.expect
new file mode 100644
index 0000000..4f4c28e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.transformed.expect
new file mode 100644
index 0000000..4f4c28e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_method.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart
new file mode 100644
index 0000000..204409ed
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class AbstractSuper {
+  void set extendedConcreteSetter(int value) {}
+
+  void set extendedAbstractSetter(int value);
+
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+
+  void set declaredConcreteExtendsAbstractSetter(int value);
+
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  void set declaredConcreteSetter(int value) {}
+
+  void set declaredAbstractSetter(int value);
+
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+  void set declaredAbstractExtendsConcreteSetter(int value);
+
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..27727ee
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class AbstractSuper {
+  void set extendedConcreteSetter(int value) {}
+  void set extendedAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+  void set declaredConcreteExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+abstract class AbstractClass extends AbstractSuper {
+  void set declaredConcreteSetter(int value) {}
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredAbstractExtendsConcreteSetter(int value);
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a78ec57
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass extends AbstractSuper {
+  void set declaredAbstractExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsConcreteSetter(int value);
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredConcreteSetter(int value) {}
+}
+
+abstract class AbstractSuper {
+  void set declaredAbstractExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+  void set declaredConcreteExtendsAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set extendedAbstractSetter(int value);
+  void set extendedConcreteSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.expect
new file mode 100644
index 0000000..c43f685
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..c43f685
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_extends_setter.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class AbstractSuper extends core::Object {
+  synthetic constructor •() → self::AbstractSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends self::AbstractSuper {
+  synthetic constructor •() → self::AbstractClass
+    : super self::AbstractSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart
new file mode 100644
index 0000000..f35baeb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class Interface {
+  int implementedConcreteField = 0;
+
+  abstract int implementedAbstractField;
+
+  int declaredConcreteImplementsConcreteField = 0;
+
+  int declaredAbstractImplementsConcreteField = 0;
+
+  abstract int declaredConcreteImplementsAbstractField;
+
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+abstract class AbstractClass implements Interface {
+  int declaredConcreteField = 0;
+
+  abstract int declaredAbstractField;
+
+  int declaredConcreteImplementsConcreteField = 0;
+
+  abstract int declaredAbstractImplementsConcreteField;
+
+  int declaredConcreteImplementsAbstractField = 0;
+
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline.expect
new file mode 100644
index 0000000..fd6e284
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class Interface {
+  int implementedConcreteField = 0;
+  abstract int implementedAbstractField;
+  int declaredConcreteImplementsConcreteField = 0;
+  int declaredAbstractImplementsConcreteField = 0;
+  abstract int declaredConcreteImplementsAbstractField;
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+abstract class AbstractClass implements Interface {
+  int declaredConcreteField = 0;
+  abstract int declaredAbstractField;
+  int declaredConcreteImplementsConcreteField = 0;
+  abstract int declaredAbstractImplementsConcreteField;
+  int declaredConcreteImplementsAbstractField = 0;
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..97ad7aa
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass implements Interface {
+  abstract int declaredAbstractField;
+  abstract int declaredAbstractImplementsAbstractField;
+  abstract int declaredAbstractImplementsConcreteField;
+  int declaredConcreteField = 0;
+  int declaredConcreteImplementsAbstractField = 0;
+  int declaredConcreteImplementsConcreteField = 0;
+}
+
+abstract class Interface {
+  abstract int declaredAbstractImplementsAbstractField;
+  abstract int declaredConcreteImplementsAbstractField;
+  abstract int implementedAbstractField;
+  int declaredAbstractImplementsConcreteField = 0;
+  int declaredConcreteImplementsConcreteField = 0;
+  int implementedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.expect
new file mode 100644
index 0000000..0cdcd41
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..0cdcd41
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_field.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart
new file mode 100644
index 0000000..b8ebbba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class Interface {
+  final int implementedConcreteField = 0;
+
+  abstract final int implementedAbstractField;
+
+  final int declaredConcreteImplementsConcreteField = 0;
+
+  final int declaredAbstractImplementsConcreteField = 0;
+
+  abstract final int declaredConcreteImplementsAbstractField;
+
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+abstract class AbstractClass implements Interface {
+  final int declaredConcreteField = 0;
+
+  abstract final int declaredAbstractField;
+
+  final int declaredConcreteImplementsConcreteField = 0;
+
+  abstract final int declaredAbstractImplementsConcreteField;
+
+  final int declaredConcreteImplementsAbstractField = 0;
+
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..0409a2d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class Interface {
+  final int implementedConcreteField = 0;
+  abstract final int implementedAbstractField;
+  final int declaredConcreteImplementsConcreteField = 0;
+  final int declaredAbstractImplementsConcreteField = 0;
+  abstract final int declaredConcreteImplementsAbstractField;
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+abstract class AbstractClass implements Interface {
+  final int declaredConcreteField = 0;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteImplementsConcreteField = 0;
+  abstract final int declaredAbstractImplementsConcreteField;
+  final int declaredConcreteImplementsAbstractField = 0;
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..71ccf7b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass implements Interface {
+  abstract final int declaredAbstractField;
+  abstract final int declaredAbstractImplementsAbstractField;
+  abstract final int declaredAbstractImplementsConcreteField;
+  final int declaredConcreteField = 0;
+  final int declaredConcreteImplementsAbstractField = 0;
+  final int declaredConcreteImplementsConcreteField = 0;
+}
+
+abstract class Interface {
+  abstract final int declaredAbstractImplementsAbstractField;
+  abstract final int declaredConcreteImplementsAbstractField;
+  abstract final int implementedAbstractField;
+  final int declaredAbstractImplementsConcreteField = 0;
+  final int declaredConcreteImplementsConcreteField = 0;
+  final int implementedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.expect
new file mode 100644
index 0000000..e1f92ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..e1f92ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_final_field.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart
new file mode 100644
index 0000000..2a5d904
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class Interface {
+  int get implementedConcreteGetter => 0;
+
+  int get implementedAbstractGetter;
+
+  int get declaredConcreteImplementsConcreteGetter => 0;
+
+  int get declaredAbstractImplementsConcreteGetter => 0;
+
+  int get declaredConcreteImplementsAbstractGetter;
+
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+abstract class AbstractClass implements Interface {
+  int get declaredConcreteGetter => 0;
+
+  int get declaredAbstractGetter;
+
+  int get declaredConcreteImplementsConcreteGetter => 0;
+
+  int get declaredAbstractImplementsConcreteGetter;
+
+  int get declaredConcreteImplementsAbstractGetter => 0;
+
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..4428729
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class Interface {
+  int get implementedConcreteGetter => 0;
+  int get implementedAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get declaredAbstractImplementsConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter;
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+abstract class AbstractClass implements Interface {
+  int get declaredConcreteGetter => 0;
+  int get declaredAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get declaredAbstractImplementsConcreteGetter;
+  int get declaredConcreteImplementsAbstractGetter => 0;
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9430ead
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass implements Interface {
+  int get declaredAbstractGetter;
+  int get declaredAbstractImplementsAbstractGetter;
+  int get declaredAbstractImplementsConcreteGetter;
+  int get declaredConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter => 0;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+}
+
+abstract class Interface {
+  int get declaredAbstractImplementsAbstractGetter;
+  int get declaredAbstractImplementsConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get implementedAbstractGetter;
+  int get implementedConcreteGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.expect
new file mode 100644
index 0000000..60896ad
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.transformed.expect
new file mode 100644
index 0000000..60896ad
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_getter.dart.weak.transformed.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart
new file mode 100644
index 0000000..94043a5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class Interface {
+  void implementedConcreteMethod() {}
+
+  void implementedAbstractMethod();
+
+  void declaredConcreteImplementsConcreteMethod() {}
+
+  void declaredAbstractImplementsConcreteMethod() {}
+
+  void declaredConcreteImplementsAbstractMethod();
+
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+abstract class AbstractClass implements Interface {
+  void declaredConcreteMethod() {}
+
+  void declaredAbstractMethod();
+
+  void declaredConcreteImplementsConcreteMethod() {}
+
+  void declaredAbstractImplementsConcreteMethod();
+
+  void declaredConcreteImplementsAbstractMethod() {}
+
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline.expect
new file mode 100644
index 0000000..590809c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class Interface {
+  void implementedConcreteMethod() {}
+  void implementedAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredAbstractImplementsConcreteMethod() {}
+  void declaredConcreteImplementsAbstractMethod();
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+abstract class AbstractClass implements Interface {
+  void declaredConcreteMethod() {}
+  void declaredAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredAbstractImplementsConcreteMethod();
+  void declaredConcreteImplementsAbstractMethod() {}
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..30f918b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass implements Interface {
+  void declaredAbstractImplementsAbstractMethod();
+  void declaredAbstractImplementsConcreteMethod();
+  void declaredAbstractMethod();
+  void declaredConcreteImplementsAbstractMethod() {}
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredConcreteMethod() {}
+}
+
+abstract class Interface {
+  void declaredAbstractImplementsAbstractMethod();
+  void declaredAbstractImplementsConcreteMethod() {}
+  void declaredConcreteImplementsAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void implementedAbstractMethod();
+  void implementedConcreteMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.expect
new file mode 100644
index 0000000..fb0c37a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.transformed.expect
new file mode 100644
index 0000000..fb0c37a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_method.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart
new file mode 100644
index 0000000..0fb2334
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart
@@ -0,0 +1,33 @@
+// 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.
+
+abstract class Interface {
+  void set implementedConcreteSetter(int value) {}
+
+  void set implementedAbstractSetter(int value);
+
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+
+  void set declaredConcreteImplementsAbstractSetter(int value);
+
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+abstract class AbstractClass implements Interface {
+  void set declaredConcreteSetter(int value) {}
+
+  void set declaredAbstractSetter(int value);
+
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+  void set declaredAbstractImplementsConcreteSetter(int value);
+
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..6118338
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+abstract class Interface {
+  void set implementedConcreteSetter(int value) {}
+  void set implementedAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+  void set declaredConcreteImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+abstract class AbstractClass implements Interface {
+  void set declaredConcreteSetter(int value) {}
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredAbstractImplementsConcreteSetter(int value);
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b33b64b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+abstract class AbstractClass implements Interface {
+  void set declaredAbstractImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsConcreteSetter(int value);
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredConcreteSetter(int value) {}
+}
+
+abstract class Interface {
+  void set declaredAbstractImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+  void set declaredConcreteImplementsAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set implementedAbstractSetter(int value);
+  void set implementedConcreteSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.expect
new file mode 100644
index 0000000..59931d6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..59931d6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_implements_setter.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart
new file mode 100644
index 0000000..17ea67b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart
@@ -0,0 +1,40 @@
+// 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 {
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractImplementedMethod(int i) {}
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+}
+
+class Interface {
+  void extendedConcreteMixedInAbstractImplementedMethod(covariant num i) {}
+  void extendedConcreteMixedInConcreteImplementedMethod(covariant num i) {}
+}
+
+mixin Mixin {
+  void extendedConcreteMixedInAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractImplementedMethod(int i);
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+}
+
+class Class = Super with Mixin implements Interface;
+
+class Sub extends Class {
+  void test() {
+    extendedConcreteMixedInAbstractMethod();
+    super.extendedConcreteMixedInAbstractMethod();
+    extendedConcreteMixedInConcreteMethod();
+    super.extendedConcreteMixedInConcreteMethod();
+
+    extendedConcreteMixedInAbstractImplementedMethod(0);
+    super.extendedConcreteMixedInAbstractImplementedMethod(0);
+    extendedConcreteMixedInConcreteImplementedMethod(0);
+    super.extendedConcreteMixedInConcreteImplementedMethod(0);
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline.expect
new file mode 100644
index 0000000..f5c6297
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Super {
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractImplementedMethod(int i) {}
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+}
+
+class Interface {
+  void extendedConcreteMixedInAbstractImplementedMethod(covariant num i) {}
+  void extendedConcreteMixedInConcreteImplementedMethod(covariant num i) {}
+}
+
+mixin Mixin {
+  void extendedConcreteMixedInAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractImplementedMethod(int i);
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+}
+class Class = Super with Mixin implements Interface;
+
+class Sub extends Class {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1f883cc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+class Class = Super with Mixin implements Interface;
+
+class Interface {
+  void extendedConcreteMixedInAbstractImplementedMethod(covariant num i) {}
+  void extendedConcreteMixedInConcreteImplementedMethod(covariant num i) {}
+}
+
+class Sub extends Class {
+  void test() {}
+}
+
+class Super {
+  void extendedConcreteMixedInAbstractImplementedMethod(int i) {}
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+  void extendedConcreteMixedInConcreteMethod() {}
+}
+
+main() {}
+mixin Mixin {
+  void extendedConcreteMixedInAbstractImplementedMethod(int i);
+  void extendedConcreteMixedInAbstractMethod();
+  void extendedConcreteMixedInConcreteImplementedMethod(int i) {}
+  void extendedConcreteMixedInConcreteMethod() {}
+}
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
new file mode 100644
index 0000000..e1f73da
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void;
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Class = self::Super with self::Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  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
+    return super.{self::Mixin::extendedConcreteMixedInConcreteImplementedMethod}(i);
+}
+class Sub extends self::Class {
+  synthetic constructor •() → self::Sub
+    : super self::Class::•()
+    ;
+  method test() → void {
+    this.{self::Mixin::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::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
new file mode 100644
index 0000000..709b09a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void {}
+}
+abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractImplementedMethod(core::int i) → void;
+  method extendedConcreteMixedInConcreteImplementedMethod(core::int i) → void {}
+}
+class Class extends self::Super implements self::Interface, self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  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}();
+    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::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/concrete_extends_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart
new file mode 100644
index 0000000..0ac9669
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart
@@ -0,0 +1,33 @@
+// 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 {
+  int extendedConcreteField = 0;
+
+  abstract int extendedAbstractField;
+
+  int declaredConcreteExtendsConcreteField = 0;
+
+  int declaredAbstractExtendsConcreteField = 0;
+
+  abstract int declaredConcreteExtendsAbstractField;
+
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  int declaredConcreteField = 0;
+
+  abstract int declaredAbstractField;
+
+  int declaredConcreteExtendsConcreteField = 0;
+
+  abstract int declaredAbstractExtendsConcreteField;
+
+  int declaredConcreteExtendsAbstractField = 0;
+
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline.expect
new file mode 100644
index 0000000..d3507c8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class ConcreteSuper {
+  int extendedConcreteField = 0;
+  abstract int extendedAbstractField;
+  int declaredConcreteExtendsConcreteField = 0;
+  int declaredAbstractExtendsConcreteField = 0;
+  abstract int declaredConcreteExtendsAbstractField;
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  int declaredConcreteField = 0;
+  abstract int declaredAbstractField;
+  int declaredConcreteExtendsConcreteField = 0;
+  abstract int declaredAbstractExtendsConcreteField;
+  int declaredConcreteExtendsAbstractField = 0;
+  abstract int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2a62eba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass extends ConcreteSuper {
+  abstract int declaredAbstractExtendsAbstractField;
+  abstract int declaredAbstractExtendsConcreteField;
+  abstract int declaredAbstractField;
+  int declaredConcreteExtendsAbstractField = 0;
+  int declaredConcreteExtendsConcreteField = 0;
+  int declaredConcreteField = 0;
+}
+
+class ConcreteSuper {
+  abstract int declaredAbstractExtendsAbstractField;
+  abstract int declaredConcreteExtendsAbstractField;
+  abstract int extendedAbstractField;
+  int declaredAbstractExtendsConcreteField = 0;
+  int declaredConcreteExtendsConcreteField = 0;
+  int extendedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.expect
new file mode 100644
index 0000000..2697e8e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.expect
@@ -0,0 +1,104 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField=' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractExtendsAbstractField=
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..2697e8e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart.weak.transformed.expect
@@ -0,0 +1,104 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:16:16: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:14:16: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField=' is defined here.
+//   abstract int declaredConcreteExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractExtendsAbstractField=
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteSuper.extendedAbstractField
+//  - ConcreteSuper.extendedAbstractField=
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField=' is defined here.
+//   abstract int declaredAbstractExtendsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_field.dart:8:16: Context: 'ConcreteSuper.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract set declaredConcreteExtendsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteExtendsConcreteField = 0;
+  field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract set declaredAbstractExtendsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+  abstract set declaredAbstractExtendsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart
new file mode 100644
index 0000000..998ab9f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart
@@ -0,0 +1,33 @@
+// 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 {
+  final int extendedConcreteField = 0;
+
+  abstract final int extendedAbstractField;
+
+  final int declaredConcreteExtendsConcreteField = 0;
+
+  final int declaredAbstractExtendsConcreteField = 0;
+
+  abstract final int declaredConcreteExtendsAbstractField;
+
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  final int declaredConcreteField = 0;
+
+  abstract final int declaredAbstractField;
+
+  final int declaredConcreteExtendsConcreteField = 0;
+
+  abstract final int declaredAbstractExtendsConcreteField;
+
+  final int declaredConcreteExtendsAbstractField = 0;
+
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..b723de4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class ConcreteSuper {
+  final int extendedConcreteField = 0;
+  abstract final int extendedAbstractField;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int declaredAbstractExtendsConcreteField = 0;
+  abstract final int declaredConcreteExtendsAbstractField;
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  final int declaredConcreteField = 0;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteExtendsConcreteField = 0;
+  abstract final int declaredAbstractExtendsConcreteField;
+  final int declaredConcreteExtendsAbstractField = 0;
+  abstract final int declaredAbstractExtendsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d18a1d2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass extends ConcreteSuper {
+  abstract final int declaredAbstractExtendsAbstractField;
+  abstract final int declaredAbstractExtendsConcreteField;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteExtendsAbstractField = 0;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int declaredConcreteField = 0;
+}
+
+class ConcreteSuper {
+  abstract final int declaredAbstractExtendsAbstractField;
+  abstract final int declaredConcreteExtendsAbstractField;
+  abstract final int extendedAbstractField;
+  final int declaredAbstractExtendsConcreteField = 0;
+  final int declaredConcreteExtendsConcreteField = 0;
+  final int extendedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.expect
new file mode 100644
index 0000000..4b81a56
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:16:22: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:14:22: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract final int declaredConcreteExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..4b81a56
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractField
+//  - ConcreteSuper.declaredConcreteExtendsAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:16:22: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:14:22: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractField' is defined here.
+//   abstract final int declaredConcreteExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractField
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteSuper.extendedAbstractField
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractExtendsAbstractField' is defined here.
+//   abstract final int declaredAbstractExtendsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_final_field.dart:8:22: Context: 'ConcreteSuper.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredAbstractExtendsConcreteField = 0;
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get declaredConcreteExtendsAbstractField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteExtendsConcreteField = 0;
+  final field core::int declaredConcreteExtendsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractExtendsConcreteField() → core::int;
+  abstract get declaredAbstractExtendsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart
new file mode 100644
index 0000000..da7068b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart
@@ -0,0 +1,33 @@
+// 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 {
+  int get extendedConcreteGetter => 0;
+
+  int get extendedAbstractGetter;
+
+  int get declaredConcreteExtendsConcreteGetter => 0;
+
+  int get declaredAbstractExtendsConcreteGetter => 0;
+
+  int get declaredConcreteExtendsAbstractGetter;
+
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  int get declaredConcreteGetter => 0;
+
+  int get declaredAbstractGetter;
+
+  int get declaredConcreteExtendsConcreteGetter => 0;
+
+  int get declaredAbstractExtendsConcreteGetter;
+
+  int get declaredConcreteExtendsAbstractGetter => 0;
+
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..e077184
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class ConcreteSuper {
+  int get extendedConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredAbstractExtendsConcreteGetter => 0;
+  int get declaredConcreteExtendsAbstractGetter;
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+class ConcreteClass extends ConcreteSuper {
+  int get declaredConcreteGetter => 0;
+  int get declaredAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredAbstractExtendsConcreteGetter;
+  int get declaredConcreteExtendsAbstractGetter => 0;
+  int get declaredAbstractExtendsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..897f7a1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass extends ConcreteSuper {
+  int get declaredAbstractExtendsAbstractGetter;
+  int get declaredAbstractExtendsConcreteGetter;
+  int get declaredAbstractGetter;
+  int get declaredConcreteExtendsAbstractGetter => 0;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get declaredConcreteGetter => 0;
+}
+
+class ConcreteSuper {
+  int get declaredAbstractExtendsAbstractGetter;
+  int get declaredAbstractExtendsConcreteGetter => 0;
+  int get declaredConcreteExtendsAbstractGetter;
+  int get declaredConcreteExtendsConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get extendedConcreteGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.expect
new file mode 100644
index 0000000..626d8af
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractGetter
+//  - ConcreteSuper.declaredConcreteExtendsAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:16:11: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:14:11: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractGetter' is defined here.
+//   int get declaredConcreteExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractGetter
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.transformed.expect
new file mode 100644
index 0000000..626d8af
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart.weak.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractGetter
+//  - ConcreteSuper.declaredConcreteExtendsAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:16:11: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:14:11: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractGetter' is defined here.
+//   int get declaredConcreteExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractGetter
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteSuper.extendedAbstractGetter
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractExtendsAbstractGetter' is defined here.
+//   int get declaredAbstractExtendsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_getter.dart:8:11: Context: 'ConcreteSuper.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteExtendsAbstractGetter() → core::int;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteExtendsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsConcreteGetter() → core::int;
+  get declaredConcreteExtendsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractExtendsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart
new file mode 100644
index 0000000..49f2893
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart
@@ -0,0 +1,33 @@
+// 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 {
+  void extendedConcreteMethod() {}
+
+  void extendedAbstractMethod();
+
+  void declaredConcreteExtendsConcreteMethod() {}
+
+  void declaredAbstractExtendsConcreteMethod() {}
+
+  void declaredConcreteExtendsAbstractMethod();
+
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+class ConcreteClass extends ConcreteSuper {
+  void declaredConcreteMethod() {}
+
+  void declaredAbstractMethod();
+
+  void declaredConcreteExtendsConcreteMethod() {}
+
+  void declaredAbstractExtendsConcreteMethod();
+
+  void declaredConcreteExtendsAbstractMethod() {}
+
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline.expect
new file mode 100644
index 0000000..ccf2808
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class ConcreteSuper {
+  void extendedConcreteMethod() {}
+  void extendedAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredAbstractExtendsConcreteMethod() {}
+  void declaredConcreteExtendsAbstractMethod();
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+class ConcreteClass extends ConcreteSuper {
+  void declaredConcreteMethod() {}
+  void declaredAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredAbstractExtendsConcreteMethod();
+  void declaredConcreteExtendsAbstractMethod() {}
+  void declaredAbstractExtendsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b49277b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass extends ConcreteSuper {
+  void declaredAbstractExtendsAbstractMethod();
+  void declaredAbstractExtendsConcreteMethod();
+  void declaredAbstractMethod();
+  void declaredConcreteExtendsAbstractMethod() {}
+  void declaredConcreteExtendsConcreteMethod() {}
+  void declaredConcreteMethod() {}
+}
+
+class ConcreteSuper {
+  void declaredAbstractExtendsAbstractMethod();
+  void declaredAbstractExtendsConcreteMethod() {}
+  void declaredConcreteExtendsAbstractMethod();
+  void declaredConcreteExtendsConcreteMethod() {}
+  void extendedAbstractMethod();
+  void extendedConcreteMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.expect
new file mode 100644
index 0000000..0eba0b9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractMethod
+//  - ConcreteSuper.declaredConcreteExtendsAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:16:8: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:14:8: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractMethod' is defined here.
+//   void declaredConcreteExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.transformed.expect
new file mode 100644
index 0000000..0eba0b9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractMethod
+//  - ConcreteSuper.declaredConcreteExtendsAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:16:8: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:14:8: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractMethod' is defined here.
+//   void declaredConcreteExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - ConcreteSuper.extendedAbstractMethod
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractExtendsAbstractMethod' is defined here.
+//   void declaredAbstractExtendsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  method declaredAbstractExtendsConcreteMethod() → void {}
+  abstract method declaredConcreteExtendsAbstractMethod() → void;
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteExtendsConcreteMethod() → void {}
+  abstract method declaredAbstractExtendsConcreteMethod() → void;
+  method declaredConcreteExtendsAbstractMethod() → void {}
+  abstract method declaredAbstractExtendsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart
new file mode 100644
index 0000000..e3c8c81
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart
@@ -0,0 +1,33 @@
+// 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 {
+  void set extendedConcreteSetter(int value) {}
+
+  void set extendedAbstractSetter(int value);
+
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+
+  void set declaredConcreteExtendsAbstractSetter(int value);
+
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+class ConcreteClass extends ConcreteSuper {
+  void set declaredConcreteSetter(int value) {}
+
+  void set declaredAbstractSetter(int value);
+
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+
+  void set declaredAbstractExtendsConcreteSetter(int value);
+
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..74b46ce
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class ConcreteSuper {
+  void set extendedConcreteSetter(int value) {}
+  void set extendedAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+  void set declaredConcreteExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+class ConcreteClass extends ConcreteSuper {
+  void set declaredConcreteSetter(int value) {}
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredAbstractExtendsConcreteSetter(int value);
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+  void set declaredAbstractExtendsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5976614
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass extends ConcreteSuper {
+  void set declaredAbstractExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsConcreteSetter(int value);
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteExtendsAbstractSetter(int value) {}
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set declaredConcreteSetter(int value) {}
+}
+
+class ConcreteSuper {
+  void set declaredAbstractExtendsAbstractSetter(int value);
+  void set declaredAbstractExtendsConcreteSetter(int value) {}
+  void set declaredConcreteExtendsAbstractSetter(int value);
+  void set declaredConcreteExtendsConcreteSetter(int value) {}
+  void set extendedAbstractSetter(int value);
+  void set extendedConcreteSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.expect
new file mode 100644
index 0000000..2df220c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:16:12: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:14:12: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractSetter=' is defined here.
+//   void set declaredConcreteExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..2df220c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart.weak.transformed.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
+//  - ConcreteSuper.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteSuper.declaredConcreteExtendsAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// 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 ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:16:12: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:14:12: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractSetter=' is defined here.
+//   void set declaredConcreteExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractExtendsAbstractSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - ConcreteSuper.extendedAbstractSetter=
+// 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 ConcreteClass extends ConcreteSuper {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractExtendsAbstractSetter=' is defined here.
+//   void set declaredAbstractExtendsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_setter.dart:8:12: Context: 'ConcreteSuper.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class ConcreteSuper extends core::Object {
+  synthetic constructor •() → self::ConcreteSuper
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  set declaredAbstractExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteExtendsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends self::ConcreteSuper {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::ConcreteSuper::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteExtendsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsConcreteSetter(core::int value) → void;
+  set declaredConcreteExtendsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractExtendsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart
new file mode 100644
index 0000000..991ee10
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart
@@ -0,0 +1,33 @@
+// 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 {
+  int implementedConcreteField = 0;
+
+  abstract int implementedAbstractField;
+
+  int declaredConcreteImplementsConcreteField = 0;
+
+  int declaredAbstractImplementsConcreteField = 0;
+
+  abstract int declaredConcreteImplementsAbstractField;
+
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+class ConcreteClass implements Interface {
+  int declaredConcreteField = 0;
+
+  abstract int declaredAbstractField;
+
+  int declaredConcreteImplementsConcreteField = 0;
+
+  abstract int declaredAbstractImplementsConcreteField;
+
+  int declaredConcreteImplementsAbstractField = 0;
+
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline.expect
new file mode 100644
index 0000000..910a8cf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class Interface {
+  int implementedConcreteField = 0;
+  abstract int implementedAbstractField;
+  int declaredConcreteImplementsConcreteField = 0;
+  int declaredAbstractImplementsConcreteField = 0;
+  abstract int declaredConcreteImplementsAbstractField;
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+class ConcreteClass implements Interface {
+  int declaredConcreteField = 0;
+  abstract int declaredAbstractField;
+  int declaredConcreteImplementsConcreteField = 0;
+  abstract int declaredAbstractImplementsConcreteField;
+  int declaredConcreteImplementsAbstractField = 0;
+  abstract int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f0bdbe5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass implements Interface {
+  abstract int declaredAbstractField;
+  abstract int declaredAbstractImplementsAbstractField;
+  abstract int declaredAbstractImplementsConcreteField;
+  int declaredConcreteField = 0;
+  int declaredConcreteImplementsAbstractField = 0;
+  int declaredConcreteImplementsConcreteField = 0;
+}
+
+class Interface {
+  abstract int declaredAbstractImplementsAbstractField;
+  abstract int declaredConcreteImplementsAbstractField;
+  abstract int implementedAbstractField;
+  int declaredAbstractImplementsConcreteField = 0;
+  int declaredConcreteImplementsConcreteField = 0;
+  int implementedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.expect
new file mode 100644
index 0000000..3c9afcd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.expect
@@ -0,0 +1,116 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredAbstractImplementsAbstractField=
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField=' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+//  - Interface.implementedConcreteField
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField=' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:6:7: Context: 'Interface.implementedConcreteField' is defined here.
+//   int implementedConcreteField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..3c9afcd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart.weak.transformed.expect
@@ -0,0 +1,116 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredAbstractImplementsAbstractField=
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:16:16: Context: 'Interface.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:14:16: Context: 'Interface.declaredConcreteImplementsAbstractField=' is defined here.
+//   abstract int declaredConcreteImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField=
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField=
+//  - Interface.implementedAbstractField
+//  - Interface.implementedAbstractField=
+//  - Interface.implementedConcreteField
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:22:16: Context: 'ConcreteClass.declaredAbstractField=' is defined here.
+//   abstract int declaredAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:30:16: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField=' is defined here.
+//   abstract int declaredAbstractImplementsAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:26:16: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField=' is defined here.
+//   abstract int declaredAbstractImplementsConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:8:16: Context: 'Interface.implementedAbstractField=' is defined here.
+//   abstract int implementedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_field.dart:6:7: Context: 'Interface.implementedConcreteField' is defined here.
+//   int implementedConcreteField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  field core::int implementedConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract set implementedAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract set declaredConcreteImplementsAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  field core::int declaredConcreteField = 0;
+  field core::int declaredConcreteImplementsConcreteField = 0;
+  field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract set declaredAbstractField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract set declaredAbstractImplementsConcreteField(core::int #externalFieldValue) → void;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+  abstract set declaredAbstractImplementsAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart
new file mode 100644
index 0000000..1bacb92
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart
@@ -0,0 +1,33 @@
+// 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 {
+  final int implementedConcreteField = 0;
+
+  abstract final int implementedAbstractField;
+
+  final int declaredConcreteImplementsConcreteField = 0;
+
+  final int declaredAbstractImplementsConcreteField = 0;
+
+  abstract final int declaredConcreteImplementsAbstractField;
+
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+class ConcreteClass implements Interface {
+  final int declaredConcreteField = 0;
+
+  abstract final int declaredAbstractField;
+
+  final int declaredConcreteImplementsConcreteField = 0;
+
+  abstract final int declaredAbstractImplementsConcreteField;
+
+  final int declaredConcreteImplementsAbstractField = 0;
+
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..92f0a43
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class Interface {
+  final int implementedConcreteField = 0;
+  abstract final int implementedAbstractField;
+  final int declaredConcreteImplementsConcreteField = 0;
+  final int declaredAbstractImplementsConcreteField = 0;
+  abstract final int declaredConcreteImplementsAbstractField;
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+class ConcreteClass implements Interface {
+  final int declaredConcreteField = 0;
+  abstract final int declaredAbstractField;
+  final int declaredConcreteImplementsConcreteField = 0;
+  abstract final int declaredAbstractImplementsConcreteField;
+  final int declaredConcreteImplementsAbstractField = 0;
+  abstract final int declaredAbstractImplementsAbstractField;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cdd8b25
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass implements Interface {
+  abstract final int declaredAbstractField;
+  abstract final int declaredAbstractImplementsAbstractField;
+  abstract final int declaredAbstractImplementsConcreteField;
+  final int declaredConcreteField = 0;
+  final int declaredConcreteImplementsAbstractField = 0;
+  final int declaredConcreteImplementsConcreteField = 0;
+}
+
+class Interface {
+  abstract final int declaredAbstractImplementsAbstractField;
+  abstract final int declaredConcreteImplementsAbstractField;
+  abstract final int implementedAbstractField;
+  final int declaredAbstractImplementsConcreteField = 0;
+  final int declaredConcreteImplementsConcreteField = 0;
+  final int implementedConcreteField = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.expect
new file mode 100644
index 0000000..921aaec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.implementedAbstractField
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:16:22: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:14:22: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract final int declaredConcreteImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - Interface.implementedAbstractField
+//  - Interface.implementedConcreteField
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:26:22: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract final int declaredAbstractImplementsConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:6:13: Context: 'Interface.implementedConcreteField' is defined here.
+//   final int implementedConcreteField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.transformed.expect
new file mode 100644
index 0000000..921aaec
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart.weak.transformed.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractField
+//  - Interface.declaredConcreteImplementsAbstractField
+//  - Interface.implementedAbstractField
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:16:22: Context: 'Interface.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:14:22: Context: 'Interface.declaredConcreteImplementsAbstractField' is defined here.
+//   abstract final int declaredConcreteImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractField
+//  - ConcreteClass.declaredAbstractImplementsAbstractField
+//  - ConcreteClass.declaredAbstractImplementsConcreteField
+//  - Interface.implementedAbstractField
+//  - Interface.implementedConcreteField
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:22:22: Context: 'ConcreteClass.declaredAbstractField' is defined here.
+//   abstract final int declaredAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:30:22: Context: 'ConcreteClass.declaredAbstractImplementsAbstractField' is defined here.
+//   abstract final int declaredAbstractImplementsAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:26:22: Context: 'ConcreteClass.declaredAbstractImplementsConcreteField' is defined here.
+//   abstract final int declaredAbstractImplementsConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:8:22: Context: 'Interface.implementedAbstractField' is defined here.
+//   abstract final int implementedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_final_field.dart:6:13: Context: 'Interface.implementedConcreteField' is defined here.
+//   final int implementedConcreteField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  final field core::int implementedConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredAbstractImplementsConcreteField = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract get implementedAbstractField() → core::int;
+  abstract get declaredConcreteImplementsAbstractField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  final field core::int declaredConcreteField = 0;
+  final field core::int declaredConcreteImplementsConcreteField = 0;
+  final field core::int declaredConcreteImplementsAbstractField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declaredAbstractField() → core::int;
+  abstract get declaredAbstractImplementsConcreteField() → core::int;
+  abstract get declaredAbstractImplementsAbstractField() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart
new file mode 100644
index 0000000..86db3b5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart
@@ -0,0 +1,33 @@
+// 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 {
+  int get implementedConcreteGetter => 0;
+
+  int get implementedAbstractGetter;
+
+  int get declaredConcreteImplementsConcreteGetter => 0;
+
+  int get declaredAbstractImplementsConcreteGetter => 0;
+
+  int get declaredConcreteImplementsAbstractGetter;
+
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+class ConcreteClass implements Interface {
+  int get declaredConcreteGetter => 0;
+
+  int get declaredAbstractGetter;
+
+  int get declaredConcreteImplementsConcreteGetter => 0;
+
+  int get declaredAbstractImplementsConcreteGetter;
+
+  int get declaredConcreteImplementsAbstractGetter => 0;
+
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..699fb25
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class Interface {
+  int get implementedConcreteGetter => 0;
+  int get implementedAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get declaredAbstractImplementsConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter;
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+class ConcreteClass implements Interface {
+  int get declaredConcreteGetter => 0;
+  int get declaredAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get declaredAbstractImplementsConcreteGetter;
+  int get declaredConcreteImplementsAbstractGetter => 0;
+  int get declaredAbstractImplementsAbstractGetter;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..80ed155
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass implements Interface {
+  int get declaredAbstractGetter;
+  int get declaredAbstractImplementsAbstractGetter;
+  int get declaredAbstractImplementsConcreteGetter;
+  int get declaredConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter => 0;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+}
+
+class Interface {
+  int get declaredAbstractImplementsAbstractGetter;
+  int get declaredAbstractImplementsConcreteGetter => 0;
+  int get declaredConcreteImplementsAbstractGetter;
+  int get declaredConcreteImplementsConcreteGetter => 0;
+  int get implementedAbstractGetter;
+  int get implementedConcreteGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.expect
new file mode 100644
index 0000000..5c3ce45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.expect
@@ -0,0 +1,88 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractGetter
+//  - Interface.declaredConcreteImplementsAbstractGetter
+//  - Interface.implementedAbstractGetter
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:16:11: Context: 'Interface.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:14:11: Context: 'Interface.declaredConcreteImplementsAbstractGetter' is defined here.
+//   int get declaredConcreteImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsConcreteGetter
+//  - Interface.implementedAbstractGetter
+//  - Interface.implementedConcreteGetter
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:26:11: Context: 'ConcreteClass.declaredAbstractImplementsConcreteGetter' is defined here.
+//   int get declaredAbstractImplementsConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:6:11: Context: 'Interface.implementedConcreteGetter' is defined here.
+//   int get implementedConcreteGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.transformed.expect
new file mode 100644
index 0000000..5c3ce45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart.weak.transformed.expect
@@ -0,0 +1,88 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractGetter
+//  - Interface.declaredConcreteImplementsAbstractGetter
+//  - Interface.implementedAbstractGetter
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:16:11: Context: 'Interface.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:14:11: Context: 'Interface.declaredConcreteImplementsAbstractGetter' is defined here.
+//   int get declaredConcreteImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsAbstractGetter
+//  - ConcreteClass.declaredAbstractImplementsConcreteGetter
+//  - Interface.implementedAbstractGetter
+//  - Interface.implementedConcreteGetter
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:22:11: Context: 'ConcreteClass.declaredAbstractGetter' is defined here.
+//   int get declaredAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:30:11: Context: 'ConcreteClass.declaredAbstractImplementsAbstractGetter' is defined here.
+//   int get declaredAbstractImplementsAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:26:11: Context: 'ConcreteClass.declaredAbstractImplementsConcreteGetter' is defined here.
+//   int get declaredAbstractImplementsConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:8:11: Context: 'Interface.implementedAbstractGetter' is defined here.
+//   int get implementedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_getter.dart:6:11: Context: 'Interface.implementedConcreteGetter' is defined here.
+//   int get implementedConcreteGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  get implementedConcreteGetter() → core::int
+    return 0;
+  abstract get implementedAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  get declaredAbstractImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredConcreteImplementsAbstractGetter() → core::int;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declaredConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractGetter() → core::int;
+  get declaredConcreteImplementsConcreteGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsConcreteGetter() → core::int;
+  get declaredConcreteImplementsAbstractGetter() → core::int
+    return 0;
+  abstract get declaredAbstractImplementsAbstractGetter() → core::int;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart
new file mode 100644
index 0000000..7f5079e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart
@@ -0,0 +1,33 @@
+// 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 {
+  void implementedConcreteMethod() {}
+
+  void implementedAbstractMethod();
+
+  void declaredConcreteImplementsConcreteMethod() {}
+
+  void declaredAbstractImplementsConcreteMethod() {}
+
+  void declaredConcreteImplementsAbstractMethod();
+
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+class ConcreteClass implements Interface {
+  void declaredConcreteMethod() {}
+
+  void declaredAbstractMethod();
+
+  void declaredConcreteImplementsConcreteMethod() {}
+
+  void declaredAbstractImplementsConcreteMethod();
+
+  void declaredConcreteImplementsAbstractMethod() {}
+
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline.expect
new file mode 100644
index 0000000..ce28f1e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class Interface {
+  void implementedConcreteMethod() {}
+  void implementedAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredAbstractImplementsConcreteMethod() {}
+  void declaredConcreteImplementsAbstractMethod();
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+class ConcreteClass implements Interface {
+  void declaredConcreteMethod() {}
+  void declaredAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredAbstractImplementsConcreteMethod();
+  void declaredConcreteImplementsAbstractMethod() {}
+  void declaredAbstractImplementsAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5e58135
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass implements Interface {
+  void declaredAbstractImplementsAbstractMethod();
+  void declaredAbstractImplementsConcreteMethod();
+  void declaredAbstractMethod();
+  void declaredConcreteImplementsAbstractMethod() {}
+  void declaredConcreteImplementsConcreteMethod() {}
+  void declaredConcreteMethod() {}
+}
+
+class Interface {
+  void declaredAbstractImplementsAbstractMethod();
+  void declaredAbstractImplementsConcreteMethod() {}
+  void declaredConcreteImplementsAbstractMethod();
+  void declaredConcreteImplementsConcreteMethod() {}
+  void implementedAbstractMethod();
+  void implementedConcreteMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.expect
new file mode 100644
index 0000000..ff9e0ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractMethod
+//  - Interface.declaredConcreteImplementsAbstractMethod
+//  - Interface.implementedAbstractMethod
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:16:8: Context: 'Interface.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:14:8: Context: 'Interface.declaredConcreteImplementsAbstractMethod' is defined here.
+//   void declaredConcreteImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractMethod
+//  - ConcreteClass.declaredAbstractImplementsConcreteMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - Interface.implementedAbstractMethod
+//  - Interface.implementedConcreteMethod
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:26:8: Context: 'ConcreteClass.declaredAbstractImplementsConcreteMethod' is defined here.
+//   void declaredAbstractImplementsConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:6:8: Context: 'Interface.implementedConcreteMethod' is defined here.
+//   void implementedConcreteMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.transformed.expect
new file mode 100644
index 0000000..ff9e0ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart.weak.transformed.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractMethod
+//  - Interface.declaredConcreteImplementsAbstractMethod
+//  - Interface.implementedAbstractMethod
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:16:8: Context: 'Interface.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:14:8: Context: 'Interface.declaredConcreteImplementsAbstractMethod' is defined here.
+//   void declaredConcreteImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractMethod
+//  - ConcreteClass.declaredAbstractImplementsConcreteMethod
+//  - ConcreteClass.declaredAbstractMethod
+//  - Interface.implementedAbstractMethod
+//  - Interface.implementedConcreteMethod
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractImplementsAbstractMethod' is defined here.
+//   void declaredAbstractImplementsAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:26:8: Context: 'ConcreteClass.declaredAbstractImplementsConcreteMethod' is defined here.
+//   void declaredAbstractImplementsConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
+//   void declaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:8:8: Context: 'Interface.implementedAbstractMethod' is defined here.
+//   void implementedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_method.dart:6:8: Context: 'Interface.implementedConcreteMethod' is defined here.
+//   void implementedConcreteMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedConcreteMethod() → void {}
+  abstract method implementedAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  method declaredAbstractImplementsConcreteMethod() → void {}
+  abstract method declaredConcreteImplementsAbstractMethod() → void;
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declaredConcreteMethod() → void {}
+  abstract method declaredAbstractMethod() → void;
+  method declaredConcreteImplementsConcreteMethod() → void {}
+  abstract method declaredAbstractImplementsConcreteMethod() → void;
+  method declaredConcreteImplementsAbstractMethod() → void {}
+  abstract method declaredAbstractImplementsAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart
new file mode 100644
index 0000000..97c2bc9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart
@@ -0,0 +1,33 @@
+// 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 {
+  void set implementedConcreteSetter(int value) {}
+
+  void set implementedAbstractSetter(int value);
+
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+
+  void set declaredConcreteImplementsAbstractSetter(int value);
+
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+class ConcreteClass implements Interface {
+  void set declaredConcreteSetter(int value) {}
+
+  void set declaredAbstractSetter(int value);
+
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+
+  void set declaredAbstractImplementsConcreteSetter(int value);
+
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..db91b7f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline.expect
@@ -0,0 +1,19 @@
+class Interface {
+  void set implementedConcreteSetter(int value) {}
+  void set implementedAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+  void set declaredConcreteImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+class ConcreteClass implements Interface {
+  void set declaredConcreteSetter(int value) {}
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredAbstractImplementsConcreteSetter(int value);
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+  void set declaredAbstractImplementsAbstractSetter(int value);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..be9240a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,19 @@
+class ConcreteClass implements Interface {
+  void set declaredAbstractImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsConcreteSetter(int value);
+  void set declaredAbstractSetter(int value);
+  void set declaredConcreteImplementsAbstractSetter(int value) {}
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set declaredConcreteSetter(int value) {}
+}
+
+class Interface {
+  void set declaredAbstractImplementsAbstractSetter(int value);
+  void set declaredAbstractImplementsConcreteSetter(int value) {}
+  void set declaredConcreteImplementsAbstractSetter(int value);
+  void set declaredConcreteImplementsConcreteSetter(int value) {}
+  void set implementedAbstractSetter(int value);
+  void set implementedConcreteSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.expect
new file mode 100644
index 0000000..ca9b49b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractSetter=
+//  - Interface.declaredConcreteImplementsAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:16:12: Context: 'Interface.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:14:12: Context: 'Interface.declaredConcreteImplementsAbstractSetter=' is defined here.
+//   void set declaredConcreteImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractSetter=
+//  - ConcreteClass.declaredAbstractImplementsConcreteSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+//  - Interface.implementedConcreteSetter=
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:26:12: Context: 'ConcreteClass.declaredAbstractImplementsConcreteSetter=' is defined here.
+//   void set declaredAbstractImplementsConcreteSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:6:12: Context: 'Interface.implementedConcreteSetter=' is defined here.
+//   void set implementedConcreteSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.transformed.expect
new file mode 100644
index 0000000..ca9b49b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart.weak.transformed.expect
@@ -0,0 +1,82 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:5:7: Error: The non-abstract class 'Interface' is missing implementations for these members:
+//  - Interface.declaredAbstractImplementsAbstractSetter=
+//  - Interface.declaredConcreteImplementsAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+// 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 Interface {
+//       ^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:16:12: Context: 'Interface.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:14:12: Context: 'Interface.declaredConcreteImplementsAbstractSetter=' is defined here.
+//   void set declaredConcreteImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declaredAbstractImplementsAbstractSetter=
+//  - ConcreteClass.declaredAbstractImplementsConcreteSetter=
+//  - ConcreteClass.declaredAbstractSetter=
+//  - Interface.implementedAbstractSetter=
+//  - Interface.implementedConcreteSetter=
+// 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 ConcreteClass implements Interface {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:30:12: Context: 'ConcreteClass.declaredAbstractImplementsAbstractSetter=' is defined here.
+//   void set declaredAbstractImplementsAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:26:12: Context: 'ConcreteClass.declaredAbstractImplementsConcreteSetter=' is defined here.
+//   void set declaredAbstractImplementsConcreteSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:22:12: Context: 'ConcreteClass.declaredAbstractSetter=' is defined here.
+//   void set declaredAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:8:12: Context: 'Interface.implementedAbstractSetter=' is defined here.
+//   void set implementedAbstractSetter(int value);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_implements_setter.dart:6:12: Context: 'Interface.implementedConcreteSetter=' is defined here.
+//   void set implementedConcreteSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set implementedConcreteSetter(core::int value) → void {}
+  abstract set implementedAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  set declaredAbstractImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredConcreteImplementsAbstractSetter(core::int value) → void;
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+class ConcreteClass extends core::Object implements self::Interface {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declaredConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractSetter(core::int value) → void;
+  set declaredConcreteImplementsConcreteSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsConcreteSetter(core::int value) → void;
+  set declaredConcreteImplementsAbstractSetter(core::int value) → void {}
+  abstract set declaredAbstractImplementsAbstractSetter(core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart
new file mode 100644
index 0000000..7e7cb73
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.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 Super {
+  void extendedMethodDeclaredGetter() {}
+  void extendedMethodDeclaredSetter() {}
+  void extendedMethodDeclaredField() {}
+  int get extendedGetterDeclaredMethod => 0;
+  void set extendedSetterDeclaredMethod(int value) {}
+  int extendedFieldDeclaredMethod = 0;
+
+  void extendedMethodMixedInGetter() {}
+  void extendedMethodMixedInSetter() {}
+  void extendedMethodMixedInField() {}
+  int get extendedGetterMixedInMethod => 0;
+  void set extendedSetterMixedInMethod(int value) {}
+  int extendedFieldMixedInMethod = 0;
+
+  void extendedMethodImplementedGetter() {}
+  void extendedMethodImplementedSetter() {}
+  void extendedMethodImplementedField() {}
+  int get extendedGetterImplementedMethod => 0;
+  void set extendedSetterImplementedMethod(int value) {}
+  int extendedFieldImplementedMethod = 0;
+}
+
+class Mixin {
+  void mixedInMethodDeclaredGetter() {}
+  void mixedInMethodDeclaredSetter() {}
+  void mixedInMethodDeclaredField() {}
+  int get mixedInGetterDeclaredMethod => 0;
+  void set mixedInSetterDeclaredMethod(int value) {}
+  int mixedInFieldDeclaredMethod = 0;
+
+  void mixedInMethodImplementedGetter() {}
+  void mixedInMethodImplementedSetter() {}
+  void mixedInMethodImplementedField() {}
+  int get mixedInGetterImplementedMethod => 0;
+  void set mixedInSetterImplementedMethod(int value) {}
+  int mixedInFieldImplementedMethod = 0;
+
+  int get extendedMethodMixedInGetter => 0;
+  void set extendedMethodMixedInSetter(int value) {}
+  int extendedMethodMixedInField = 0;
+  void extendedGetterMixedInMethod() {}
+  void extendedSetterMixedInMethod() {}
+  void extendedFieldMixedInMethod() {}
+}
+
+class Interface1 {
+  void implementedMethodDeclaredGetter() {}
+  void implementedMethodDeclaredSetter() {}
+  void implementedMethodDeclaredField() {}
+  int get implementedGetterDeclaredMethod => 0;
+  void set implementedSetterDeclaredMethod(int value) {}
+  int implementedFieldDeclaredMethod = 0;
+
+  void implementedMethodImplementedGetter() {}
+  void implementedMethodImplementedSetter() {}
+  void implementedMethodImplementedField() {}
+  int get implementedGetterImplementedMethod => 0;
+  void set implementedSetterImplementedMethod(int value) {}
+  int implementedFieldImplementedMethod = 0;
+
+  int get extendedMethodImplementedGetter => 0;
+  void set extendedMethodImplementedSetter(int value) {}
+  int extendedMethodImplementedField = 0;
+  void extendedGetterImplementedMethod() {}
+  void extendedSetterImplementedMethod() {}
+  void extendedFieldImplementedMethod() {}
+
+  int get mixedInMethodImplementedGetter => 0;
+  void set mixedInMethodImplementedSetter(int value) {}
+  int mixedInMethodImplementedField = 0;
+  void mixedInGetterImplementedMethod() {}
+  void mixedInSetterImplementedMethod() {}
+  void mixedInFieldImplementedMethod() {}
+}
+
+class Interface2 {
+  int get implementedMethodImplementedGetter => 0;
+  void set implementedMethodImplementedSetter(int value) {}
+  int implementedMethodImplementedField = 0;
+  void implementedGetterImplementedMethod() {}
+  void implementedSetterImplementedMethod() {}
+  void implementedFieldImplementedMethod() {}
+}
+
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  int get extendedMethodDeclaredGetter => 0;
+  void set extendedMethodDeclaredSetter(int value) {}
+  int extendedMethodDeclaredField = 0;
+  void extendedGetterDeclaredMethod() {}
+  void extendedSetterDeclaredMethod() {}
+  void extendedFieldDeclaredMethod() {}
+
+  int get mixedInMethodDeclaredGetter => 0;
+  void set mixedInMethodDeclaredSetter(int value) {}
+  int mixedInMethodDeclaredField = 0;
+  void mixedInGetterDeclaredMethod() {}
+  void mixedInSetterDeclaredMethod() {}
+  void mixedInFieldDeclaredMethod() {}
+
+  int get implementedMethodDeclaredGetter => 0;
+  void set implementedMethodDeclaredSetter(int value) {}
+  int implementedMethodDeclaredField = 0;
+  void implementedGetterDeclaredMethod() {}
+  void implementedSetterDeclaredMethod() {}
+  void implementedFieldDeclaredMethod() {}
+
+  void declaredMethodAndSetter() {}
+  void set declaredMethodAndSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline.expect
new file mode 100644
index 0000000..079bf85
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline.expect
@@ -0,0 +1,104 @@
+class Super {
+  void extendedMethodDeclaredGetter() {}
+  void extendedMethodDeclaredSetter() {}
+  void extendedMethodDeclaredField() {}
+  int get extendedGetterDeclaredMethod => 0;
+  void set extendedSetterDeclaredMethod(int value) {}
+  int extendedFieldDeclaredMethod = 0;
+  void extendedMethodMixedInGetter() {}
+  void extendedMethodMixedInSetter() {}
+  void extendedMethodMixedInField() {}
+  int get extendedGetterMixedInMethod => 0;
+  void set extendedSetterMixedInMethod(int value) {}
+  int extendedFieldMixedInMethod = 0;
+  void extendedMethodImplementedGetter() {}
+  void extendedMethodImplementedSetter() {}
+  void extendedMethodImplementedField() {}
+  int get extendedGetterImplementedMethod => 0;
+  void set extendedSetterImplementedMethod(int value) {}
+  int extendedFieldImplementedMethod = 0;
+}
+
+class Mixin {
+  void mixedInMethodDeclaredGetter() {}
+  void mixedInMethodDeclaredSetter() {}
+  void mixedInMethodDeclaredField() {}
+  int get mixedInGetterDeclaredMethod => 0;
+  void set mixedInSetterDeclaredMethod(int value) {}
+  int mixedInFieldDeclaredMethod = 0;
+  void mixedInMethodImplementedGetter() {}
+  void mixedInMethodImplementedSetter() {}
+  void mixedInMethodImplementedField() {}
+  int get mixedInGetterImplementedMethod => 0;
+  void set mixedInSetterImplementedMethod(int value) {}
+  int mixedInFieldImplementedMethod = 0;
+  int get extendedMethodMixedInGetter => 0;
+  void set extendedMethodMixedInSetter(int value) {}
+  int extendedMethodMixedInField = 0;
+  void extendedGetterMixedInMethod() {}
+  void extendedSetterMixedInMethod() {}
+  void extendedFieldMixedInMethod() {}
+}
+
+class Interface1 {
+  void implementedMethodDeclaredGetter() {}
+  void implementedMethodDeclaredSetter() {}
+  void implementedMethodDeclaredField() {}
+  int get implementedGetterDeclaredMethod => 0;
+  void set implementedSetterDeclaredMethod(int value) {}
+  int implementedFieldDeclaredMethod = 0;
+  void implementedMethodImplementedGetter() {}
+  void implementedMethodImplementedSetter() {}
+  void implementedMethodImplementedField() {}
+  int get implementedGetterImplementedMethod => 0;
+  void set implementedSetterImplementedMethod(int value) {}
+  int implementedFieldImplementedMethod = 0;
+  int get extendedMethodImplementedGetter => 0;
+  void set extendedMethodImplementedSetter(int value) {}
+  int extendedMethodImplementedField = 0;
+  void extendedGetterImplementedMethod() {}
+  void extendedSetterImplementedMethod() {}
+  void extendedFieldImplementedMethod() {}
+  int get mixedInMethodImplementedGetter => 0;
+  void set mixedInMethodImplementedSetter(int value) {}
+  int mixedInMethodImplementedField = 0;
+  void mixedInGetterImplementedMethod() {}
+  void mixedInSetterImplementedMethod() {}
+  void mixedInFieldImplementedMethod() {}
+}
+
+class Interface2 {
+  int get implementedMethodImplementedGetter => 0;
+  void set implementedMethodImplementedSetter(int value) {}
+  int implementedMethodImplementedField = 0;
+  void implementedGetterImplementedMethod() {}
+  void implementedSetterImplementedMethod() {}
+  void implementedFieldImplementedMethod() {}
+}
+
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  int get extendedMethodDeclaredGetter => 0;
+  void set extendedMethodDeclaredSetter(int value) {}
+  int extendedMethodDeclaredField = 0;
+  void extendedGetterDeclaredMethod() {}
+  void extendedSetterDeclaredMethod() {}
+  void extendedFieldDeclaredMethod() {}
+  int get mixedInMethodDeclaredGetter => 0;
+  void set mixedInMethodDeclaredSetter(int value) {}
+  int mixedInMethodDeclaredField = 0;
+  void mixedInGetterDeclaredMethod() {}
+  void mixedInSetterDeclaredMethod() {}
+  void mixedInFieldDeclaredMethod() {}
+  int get implementedMethodDeclaredGetter => 0;
+  void set implementedMethodDeclaredSetter(int value) {}
+  int implementedMethodDeclaredField = 0;
+  void implementedGetterDeclaredMethod() {}
+  void implementedSetterDeclaredMethod() {}
+  void implementedFieldDeclaredMethod() {}
+  void declaredMethodAndSetter() {}
+  void set declaredMethodAndSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..09b395b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.textual_outline_modelled.expect
@@ -0,0 +1,104 @@
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  int extendedMethodDeclaredField = 0;
+  int get extendedMethodDeclaredGetter => 0;
+  int get implementedMethodDeclaredGetter => 0;
+  int get mixedInMethodDeclaredGetter => 0;
+  int implementedMethodDeclaredField = 0;
+  int mixedInMethodDeclaredField = 0;
+  void declaredMethodAndSetter() {}
+  void extendedFieldDeclaredMethod() {}
+  void extendedGetterDeclaredMethod() {}
+  void extendedSetterDeclaredMethod() {}
+  void implementedFieldDeclaredMethod() {}
+  void implementedGetterDeclaredMethod() {}
+  void implementedSetterDeclaredMethod() {}
+  void mixedInFieldDeclaredMethod() {}
+  void mixedInGetterDeclaredMethod() {}
+  void mixedInSetterDeclaredMethod() {}
+  void set declaredMethodAndSetter(int value) {}
+  void set extendedMethodDeclaredSetter(int value) {}
+  void set implementedMethodDeclaredSetter(int value) {}
+  void set mixedInMethodDeclaredSetter(int value) {}
+}
+
+class Interface1 {
+  int extendedMethodImplementedField = 0;
+  int get extendedMethodImplementedGetter => 0;
+  int get implementedGetterDeclaredMethod => 0;
+  int get implementedGetterImplementedMethod => 0;
+  int get mixedInMethodImplementedGetter => 0;
+  int implementedFieldDeclaredMethod = 0;
+  int implementedFieldImplementedMethod = 0;
+  int mixedInMethodImplementedField = 0;
+  void extendedFieldImplementedMethod() {}
+  void extendedGetterImplementedMethod() {}
+  void extendedSetterImplementedMethod() {}
+  void implementedMethodDeclaredField() {}
+  void implementedMethodDeclaredGetter() {}
+  void implementedMethodDeclaredSetter() {}
+  void implementedMethodImplementedField() {}
+  void implementedMethodImplementedGetter() {}
+  void implementedMethodImplementedSetter() {}
+  void mixedInFieldImplementedMethod() {}
+  void mixedInGetterImplementedMethod() {}
+  void mixedInSetterImplementedMethod() {}
+  void set extendedMethodImplementedSetter(int value) {}
+  void set implementedSetterDeclaredMethod(int value) {}
+  void set implementedSetterImplementedMethod(int value) {}
+  void set mixedInMethodImplementedSetter(int value) {}
+}
+
+class Interface2 {
+  int get implementedMethodImplementedGetter => 0;
+  int implementedMethodImplementedField = 0;
+  void implementedFieldImplementedMethod() {}
+  void implementedGetterImplementedMethod() {}
+  void implementedSetterImplementedMethod() {}
+  void set implementedMethodImplementedSetter(int value) {}
+}
+
+class Mixin {
+  int extendedMethodMixedInField = 0;
+  int get extendedMethodMixedInGetter => 0;
+  int get mixedInGetterDeclaredMethod => 0;
+  int get mixedInGetterImplementedMethod => 0;
+  int mixedInFieldDeclaredMethod = 0;
+  int mixedInFieldImplementedMethod = 0;
+  void extendedFieldMixedInMethod() {}
+  void extendedGetterMixedInMethod() {}
+  void extendedSetterMixedInMethod() {}
+  void mixedInMethodDeclaredField() {}
+  void mixedInMethodDeclaredGetter() {}
+  void mixedInMethodDeclaredSetter() {}
+  void mixedInMethodImplementedField() {}
+  void mixedInMethodImplementedGetter() {}
+  void mixedInMethodImplementedSetter() {}
+  void set extendedMethodMixedInSetter(int value) {}
+  void set mixedInSetterDeclaredMethod(int value) {}
+  void set mixedInSetterImplementedMethod(int value) {}
+}
+
+class Super {
+  int extendedFieldDeclaredMethod = 0;
+  int extendedFieldImplementedMethod = 0;
+  int extendedFieldMixedInMethod = 0;
+  int get extendedGetterDeclaredMethod => 0;
+  int get extendedGetterImplementedMethod => 0;
+  int get extendedGetterMixedInMethod => 0;
+  void extendedMethodDeclaredField() {}
+  void extendedMethodDeclaredGetter() {}
+  void extendedMethodDeclaredSetter() {}
+  void extendedMethodImplementedField() {}
+  void extendedMethodImplementedGetter() {}
+  void extendedMethodImplementedSetter() {}
+  void extendedMethodMixedInField() {}
+  void extendedMethodMixedInGetter() {}
+  void extendedMethodMixedInSetter() {}
+  void set extendedSetterDeclaredMethod(int value) {}
+  void set extendedSetterImplementedMethod(int value) {}
+  void set extendedSetterMixedInMethod(int value) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..825a474
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart.weak.expect
@@ -0,0 +1,343 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Error: Can't inherit members that conflict with each other.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:13:8: Context: This is one inherited member.
+//   void extendedMethodMixedInGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:43:11: Context: This is the other inherited member.
+//   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;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:6:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:95:7: Error: Can't declare a member that conflicts with an inherited one.
+//   int extendedMethodDeclaredField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:8:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredField() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:96:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedGetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:9:11: Context: This is the inherited member.
+//   int get extendedGetterDeclaredMethod => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:97:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedSetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:10:12: Context: This is the inherited member.
+//   void set extendedSetterDeclaredMethod(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:98:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void extendedFieldDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:11:7: Context: This is the inherited member.
+//   int extendedFieldDeclaredMethod = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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: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: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: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: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:107:11: Error: Can't declare a member that conflicts with an inherited one.
+//   int get implementedMethodDeclaredGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:52:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredGetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:109:7: Error: Can't declare a member that conflicts with an inherited one.
+//   int implementedMethodDeclaredField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:54:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredField() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:110:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedGetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:55:11: Context: This is the inherited member.
+//   int get implementedGetterDeclaredMethod => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:111:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedSetterDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:56:12: Context: This is the inherited member.
+//   void set implementedSetterDeclaredMethod(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:112:8: Error: Can't declare a member that conflicts with an inherited one.
+//   void implementedFieldDeclaredMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:57:7: Context: This is the inherited member.
+//   int implementedFieldDeclaredMethod = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:115:12: Error: 'declaredMethodAndSetter' is already declared in this scope.
+//   void set declaredMethodAndSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:114:8: Context: Previous declaration of 'declaredMethodAndSetter'.
+//   void declaredMethodAndSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:94:12: Error: Can't declare a member that conflicts with an inherited one.
+//   void set extendedMethodDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:7:8: Context: This is the inherited member.
+//   void extendedMethodDeclaredSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:108:12: Error: Can't declare a member that conflicts with an inherited one.
+//   void set implementedMethodDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:53:8: Context: This is the inherited member.
+//   void implementedMethodDeclaredSetter() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int extendedFieldDeclaredMethod = 0;
+  field core::int extendedFieldMixedInMethod = 0;
+  field core::int extendedFieldImplementedMethod = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethodDeclaredGetter() → void {}
+  method extendedMethodDeclaredSetter() → void {}
+  method extendedMethodDeclaredField() → void {}
+  get extendedGetterDeclaredMethod() → core::int
+    return 0;
+  set extendedSetterDeclaredMethod(core::int value) → void {}
+  method extendedMethodMixedInGetter() → void {}
+  method extendedMethodMixedInSetter() → void {}
+  method extendedMethodMixedInField() → void {}
+  get extendedGetterMixedInMethod() → core::int
+    return 0;
+  set extendedSetterMixedInMethod(core::int value) → void {}
+  method extendedMethodImplementedGetter() → void {}
+  method extendedMethodImplementedSetter() → void {}
+  method extendedMethodImplementedField() → void {}
+  get extendedGetterImplementedMethod() → core::int
+    return 0;
+  set extendedSetterImplementedMethod(core::int value) → void {}
+}
+class Mixin extends core::Object {
+  field core::int mixedInFieldDeclaredMethod = 0;
+  field core::int mixedInFieldImplementedMethod = 0;
+  field core::int extendedMethodMixedInField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInMethodDeclaredGetter() → void {}
+  method mixedInMethodDeclaredSetter() → void {}
+  method mixedInMethodDeclaredField() → void {}
+  get mixedInGetterDeclaredMethod() → core::int
+    return 0;
+  set mixedInSetterDeclaredMethod(core::int value) → void {}
+  method mixedInMethodImplementedGetter() → void {}
+  method mixedInMethodImplementedSetter() → void {}
+  method mixedInMethodImplementedField() → void {}
+  get mixedInGetterImplementedMethod() → core::int
+    return 0;
+  set mixedInSetterImplementedMethod(core::int value) → void {}
+  get extendedMethodMixedInGetter() → core::int
+    return 0;
+  set extendedMethodMixedInSetter(core::int value) → void {}
+  method extendedGetterMixedInMethod() → void {}
+  method extendedSetterMixedInMethod() → void {}
+  method extendedFieldMixedInMethod() → void {}
+}
+class Interface1 extends core::Object {
+  field core::int implementedFieldDeclaredMethod = 0;
+  field core::int implementedFieldImplementedMethod = 0;
+  field core::int extendedMethodImplementedField = 0;
+  field core::int mixedInMethodImplementedField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method implementedMethodDeclaredGetter() → void {}
+  method implementedMethodDeclaredSetter() → void {}
+  method implementedMethodDeclaredField() → void {}
+  get implementedGetterDeclaredMethod() → core::int
+    return 0;
+  set implementedSetterDeclaredMethod(core::int value) → void {}
+  method implementedMethodImplementedGetter() → void {}
+  method implementedMethodImplementedSetter() → void {}
+  method implementedMethodImplementedField() → void {}
+  get implementedGetterImplementedMethod() → core::int
+    return 0;
+  set implementedSetterImplementedMethod(core::int value) → void {}
+  get extendedMethodImplementedGetter() → core::int
+    return 0;
+  set extendedMethodImplementedSetter(core::int value) → void {}
+  method extendedGetterImplementedMethod() → void {}
+  method extendedSetterImplementedMethod() → void {}
+  method extendedFieldImplementedMethod() → void {}
+  get mixedInMethodImplementedGetter() → core::int
+    return 0;
+  set mixedInMethodImplementedSetter(core::int value) → void {}
+  method mixedInGetterImplementedMethod() → void {}
+  method mixedInSetterImplementedMethod() → void {}
+  method mixedInFieldImplementedMethod() → void {}
+}
+class Interface2 extends core::Object {
+  field core::int implementedMethodImplementedField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get implementedMethodImplementedGetter() → core::int
+    return 0;
+  set implementedMethodImplementedSetter(core::int value) → void {}
+  method implementedGetterImplementedMethod() → void {}
+  method implementedSetterImplementedMethod() → void {}
+  method implementedFieldImplementedMethod() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInFieldDeclaredMethod() → core::int
+    return super.{self::Mixin::mixedInFieldDeclaredMethod};
+  mixin-super-stub set mixedInFieldDeclaredMethod(core::int value) → void
+    return super.{self::Mixin::mixedInFieldDeclaredMethod} = value;
+  mixin-super-stub get mixedInFieldImplementedMethod() → core::int
+    return super.{self::Mixin::mixedInFieldImplementedMethod};
+  mixin-super-stub set mixedInFieldImplementedMethod(core::int value) → void
+    return super.{self::Mixin::mixedInFieldImplementedMethod} = value;
+  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
+    return super.{self::Mixin::mixedInGetterDeclaredMethod};
+  mixin-super-stub method mixedInMethodImplementedGetter() → void
+    return super.{self::Mixin::mixedInMethodImplementedGetter}();
+  mixin-super-stub method mixedInMethodImplementedSetter() → void
+    return super.{self::Mixin::mixedInMethodImplementedSetter}();
+  mixin-super-stub method mixedInMethodImplementedField() → void
+    return super.{self::Mixin::mixedInMethodImplementedField}();
+  mixin-super-stub get mixedInGetterImplementedMethod() → core::int
+    return super.{self::Mixin::mixedInGetterImplementedMethod};
+  mixin-super-stub method extendedSetterMixedInMethod() → void
+    return super.{self::Mixin::extendedSetterMixedInMethod}();
+  mixin-super-stub set mixedInSetterDeclaredMethod(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredMethod} = value;
+  mixin-super-stub set mixedInSetterImplementedMethod(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedMethod} = value;
+  mixin-super-stub set extendedMethodMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedMethodMixedInSetter} = value;
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
+  field core::int extendedMethodDeclaredField = 0;
+  field core::int mixedInMethodDeclaredField = 0;
+  field core::int implementedMethodDeclaredField = 0;
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  get extendedMethodDeclaredGetter() → core::int
+    return 0;
+  set extendedMethodDeclaredSetter(core::int value) → void {}
+  method extendedGetterDeclaredMethod() → void {}
+  method extendedSetterDeclaredMethod() → void {}
+  method extendedFieldDeclaredMethod() → void {}
+  get mixedInMethodDeclaredGetter() → core::int
+    return 0;
+  set mixedInMethodDeclaredSetter(core::int value) → void {}
+  method mixedInGetterDeclaredMethod() → void {}
+  method mixedInSetterDeclaredMethod() → void {}
+  method mixedInFieldDeclaredMethod() → void {}
+  get implementedMethodDeclaredGetter() → core::int
+    return 0;
+  set implementedMethodDeclaredSetter(core::int value) → void {}
+  method implementedGetterDeclaredMethod() → void {}
+  method implementedSetterDeclaredMethod() → void {}
+  method implementedFieldDeclaredMethod() → void {}
+  method declaredMethodAndSetter() → void {}
+  set declaredMethodAndSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart
new file mode 100644
index 0000000..32d8eed
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart
@@ -0,0 +1,92 @@
+// 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 {
+  method(covariant int a, int b) {}
+}
+
+class M2 {
+  method(int a, covariant int b) {}
+}
+
+class C extends Object with M1, M2 {}
+
+class Direct {
+  void positional(covariant int a, int b, covariant int c, int d, int e) {}
+  void optional(
+      [covariant int a = 0, int b = 0, covariant int c = 0, int d = 0]) {}
+  void named(
+      {covariant int a = 0, int b = 0, covariant int c = 0, int d = 0}) {}
+}
+
+class Inherited extends Direct {}
+
+// ---
+
+class Override1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Override2 extends Override1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Override3 extends Override2 {
+  void method(int a, int b, int c, int d, int e) {}
+}
+
+// ---
+
+abstract class Implement1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Implement2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class Implement3 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Implement4 implements Implement3 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Implement5 implements Implement1, Implement2, Implement4 {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+// ---
+
+class Interface1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Interface2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class Mixin1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Mixin2 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Superclass {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+class Mixed extends Superclass
+    with Mixin1, Mixin2
+    implements Interface1, Interface2 {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline.expect
new file mode 100644
index 0000000..99a4f42
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline.expect
@@ -0,0 +1,77 @@
+class M1 {
+  method(covariant int a, int b) {}
+}
+
+class M2 {
+  method(int a, covariant int b) {}
+}
+
+class C extends Object with M1, M2 {}
+
+class Direct {
+  void positional(covariant int a, int b, covariant int c, int d, int e) {}
+  void optional(
+      [covariant int a = 0, int b = 0, covariant int c = 0, int d = 0]) {}
+  void named(
+      {covariant int a = 0, int b = 0, covariant int c = 0, int d = 0}) {}
+}
+
+class Inherited extends Direct {}
+
+class Override1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Override2 extends Override1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Override3 extends Override2 {
+  void method(int a, int b, int c, int d, int e) {}
+}
+
+abstract class Implement1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Implement2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class Implement3 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Implement4 implements Implement3 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Implement5 implements Implement1, Implement2, Implement4 {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+class Interface1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Interface2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class Mixin1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Mixin2 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Superclass {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+class Mixed extends Superclass
+    with Mixin1, Mixin2
+    implements Interface1, Interface2 {}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..dd47260
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.textual_outline_modelled.expect
@@ -0,0 +1,77 @@
+abstract class Implement1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class C extends Object with M1, M2 {}
+
+class Direct {
+  void named(
+      {covariant int a = 0, int b = 0, covariant int c = 0, int d = 0}) {}
+  void optional(
+      [covariant int a = 0, int b = 0, covariant int c = 0, int d = 0]) {}
+  void positional(covariant int a, int b, covariant int c, int d, int e) {}
+}
+
+class Implement2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class Implement3 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Implement4 implements Implement3 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Implement5 implements Implement1, Implement2, Implement4 {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+class Inherited extends Direct {}
+
+class Interface1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Interface2 {
+  void method(int a, covariant int b, int c, int d, int e) {}
+}
+
+class M1 {
+  method(covariant int a, int b) {}
+}
+
+class M2 {
+  method(int a, covariant int b) {}
+}
+
+class Mixed extends Superclass
+    with Mixin1, Mixin2
+    implements Interface1, Interface2 {}
+
+class Mixin1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Mixin2 {
+  void method(int a, int b, int c, covariant int d, int e) {}
+}
+
+class Override1 {
+  void method(covariant int a, int b, int c, int d, int e) {}
+}
+
+class Override2 extends Override1 {
+  void method(int a, int b, covariant int c, int d, int e) {}
+}
+
+class Override3 extends Override2 {
+  void method(int a, int b, int c, int d, int e) {}
+}
+
+class Superclass {
+  void method(int a, int b, int c, int d, covariant int e) {}
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect
new file mode 100644
index 0000000..17fd9e4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect
@@ -0,0 +1,152 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class M1 extends core::Object {
+  synthetic constructor •() → self::M1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b) → dynamic {}
+}
+class M2 extends core::Object {
+  synthetic constructor •() → self::M2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b) → dynamic {}
+}
+abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1
+    : super core::Object::•()
+    ;
+  mixin-super-stub method method(covariant core::int a, core::int b) → dynamic
+    return super.{self::M1::method}(a, b);
+}
+abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1&M2
+    : super self::_C&Object&M1::•()
+    ;
+  forwarding-stub method method(covariant core::int a, covariant core::int b) → dynamic
+    return super.{self::M2::method}(a, b);
+}
+class C extends self::_C&Object&M1&M2 {
+  synthetic constructor •() → self::C
+    : super self::_C&Object&M1&M2::•()
+    ;
+}
+class Direct extends core::Object {
+  synthetic constructor •() → self::Direct
+    : super core::Object::•()
+    ;
+  method positional(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method optional([covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1]) → void {}
+  method named({covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1}) → void {}
+}
+class Inherited extends self::Direct {
+  synthetic constructor •() → self::Inherited
+    : super self::Direct::•()
+    ;
+}
+class Override1 extends core::Object {
+  synthetic constructor •() → self::Override1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Override2 extends self::Override1 {
+  synthetic constructor •() → self::Override2
+    : super self::Override1::•()
+    ;
+  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Override3 extends self::Override2 {
+  synthetic constructor •() → self::Override3
+    : super self::Override2::•()
+    ;
+  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+abstract class Implement1 extends core::Object {
+  synthetic constructor •() → self::Implement1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement2 extends core::Object {
+  synthetic constructor •() → self::Implement2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement3 extends core::Object {
+  synthetic constructor •() → self::Implement3
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Implement4 extends core::Object implements self::Implement3 {
+  synthetic constructor •() → self::Implement4
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, core::int e) → void {}
+}
+class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
+  synthetic constructor •() → self::Implement5
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Mixin1 extends core::Object {
+  synthetic constructor •() → self::Mixin1
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Mixin2 extends core::Object {
+  synthetic constructor •() → self::Mixin2
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, covariant core::int d, core::int e) → void {}
+}
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, core::int d, covariant core::int e) → void {}
+}
+abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
+    : super self::Superclass::•()
+    ;
+  forwarding-stub method method(core::int a, core::int b, covariant core::int c, core::int d, covariant core::int e) → void
+    return super.{self::Mixin1::method}(a, b, c, d, e);
+}
+abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
+    : super self::_Mixed&Superclass&Mixin1::•()
+    ;
+  forwarding-stub method method(core::int a, core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::Mixed
+    : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
+    ;
+  forwarding-stub method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect
new file mode 100644
index 0000000..62abc3c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect
@@ -0,0 +1,148 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class M1 extends core::Object {
+  synthetic constructor •() → self::M1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b) → dynamic {}
+}
+class M2 extends core::Object {
+  synthetic constructor •() → self::M2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b) → dynamic {}
+}
+abstract class _C&Object&M1 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b) → dynamic {}
+}
+abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_C&Object&M1&M2
+    : super self::_C&Object&M1::•()
+    ;
+  method method(covariant core::int a, covariant core::int b) → dynamic {}
+}
+class C extends self::_C&Object&M1&M2 {
+  synthetic constructor •() → self::C
+    : super self::_C&Object&M1&M2::•()
+    ;
+}
+class Direct extends core::Object {
+  synthetic constructor •() → self::Direct
+    : super core::Object::•()
+    ;
+  method positional(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method optional([covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1]) → void {}
+  method named({covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1}) → void {}
+}
+class Inherited extends self::Direct {
+  synthetic constructor •() → self::Inherited
+    : super self::Direct::•()
+    ;
+}
+class Override1 extends core::Object {
+  synthetic constructor •() → self::Override1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Override2 extends self::Override1 {
+  synthetic constructor •() → self::Override2
+    : super self::Override1::•()
+    ;
+  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Override3 extends self::Override2 {
+  synthetic constructor •() → self::Override3
+    : super self::Override2::•()
+    ;
+  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+abstract class Implement1 extends core::Object {
+  synthetic constructor •() → self::Implement1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement2 extends core::Object {
+  synthetic constructor •() → self::Implement2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Implement3 extends core::Object {
+  synthetic constructor •() → self::Implement3
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Implement4 extends core::Object implements self::Implement3 {
+  synthetic constructor •() → self::Implement4
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, core::int e) → void {}
+}
+class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
+  synthetic constructor •() → self::Implement5
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+}
+class Mixin1 extends core::Object {
+  synthetic constructor •() → self::Mixin1
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+}
+class Mixin2 extends core::Object {
+  synthetic constructor •() → self::Mixin2
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, covariant core::int d, core::int e) → void {}
+}
+class Superclass extends core::Object {
+  synthetic constructor •() → self::Superclass
+    : super core::Object::•()
+    ;
+  method method(core::int a, core::int b, core::int c, core::int d, covariant core::int e) → void {}
+}
+abstract class _Mixed&Superclass&Mixin1 extends self::Superclass implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1
+    : super self::Superclass::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, core::int d, covariant core::int e) → void {}
+}
+abstract class _Mixed&Superclass&Mixin1&Mixin2 extends self::_Mixed&Superclass&Mixin1 implements self::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
+    : super self::_Mixed&Superclass&Mixin1::•()
+    ;
+  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+}
+class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::Mixed
+    : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
+    ;
+  forwarding-stub method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+    return super.{self::Mixin2::method}(a, b, c, d, e);
+}
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart
new file mode 100644
index 0000000..67fe830
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart
@@ -0,0 +1,21 @@
+// 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 {
+  bool operator ==(covariant A other) => true;
+}
+
+class B extends A {
+  bool operator ==(other) => true;
+}
+
+class C<T> {
+  bool operator ==(covariant C<T> other) => true;
+}
+
+class D extends C<int> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline.expect
new file mode 100644
index 0000000..8d0614c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+// @dart = 2.9
+class A {
+  bool operator ==(covariant A other) => true;
+}
+
+class B extends A {
+  bool operator ==(other) => true;
+}
+
+class C<T> {
+  bool operator ==(covariant C<T> other) => true;
+}
+
+class D extends C<int> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8d0614c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+// @dart = 2.9
+class A {
+  bool operator ==(covariant A other) => true;
+}
+
+class B extends A {
+  bool operator ==(other) => true;
+}
+
+class C<T> {
+  bool operator ==(covariant C<T> other) => true;
+}
+
+class D extends C<int> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect
new file mode 100644
index 0000000..7ffa395
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ==(covariant self::A* other) → core::bool*
+    return true;
+  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 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 {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator ==(covariant self::A* other) → core::bool*
+    return true;
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+    return true;
+  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 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 D extends self::C<core::int*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect
new file mode 100644
index 0000000..7ffa395
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect
@@ -0,0 +1,49 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+  operator ==(covariant self::A* other) → core::bool*
+    return true;
+  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 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 {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+  operator ==(covariant self::A* other) → core::bool*
+    return true;
+}
+class C<T extends core::Object* = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T*>*
+    : super core::Object::•()
+    ;
+  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+    return true;
+  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 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 D extends self::C<core::int*> {
+  synthetic constructor •() → self::D*
+    : super self::C::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart
new file mode 100644
index 0000000..2706346
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.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.
+
+class Super {
+  void extendedConcreteDeclaredConcreteMethod() {}
+
+  void extendedAbstractDeclaredConcreteMethod();
+
+  void extendedConcreteDeclaredAbstractMethod() {}
+
+  void extendedAbstractDeclaredAbstractMethod();
+
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+  void extendedAbstractImplementedDeclaredConcreteMethod();
+
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+}
+
+class Interface {
+  void implementedDeclaredConcreteMethod() {}
+
+  void implementedDeclaredAbstractMethod() {}
+
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+
+  void extendedAbstractImplementedDeclaredAbstractMethod() {}
+}
+
+class Class extends Super implements Interface {
+  void extendedConcreteDeclaredConcreteMethod() {}
+
+  void extendedAbstractDeclaredConcreteMethod() {}
+
+  void extendedConcreteDeclaredAbstractMethod();
+
+  void extendedAbstractDeclaredAbstractMethod();
+
+  void implementedDeclaredConcreteMethod() {}
+
+  void implementedDeclaredAbstractMethod();
+
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+
+  void extendedConcreteImplementedDeclaredAbstractMethod();
+
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline.expect
new file mode 100644
index 0000000..5b331bb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline.expect
@@ -0,0 +1,34 @@
+class Super {
+  void extendedConcreteDeclaredConcreteMethod() {}
+  void extendedAbstractDeclaredConcreteMethod();
+  void extendedConcreteDeclaredAbstractMethod() {}
+  void extendedAbstractDeclaredAbstractMethod();
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+  void extendedAbstractImplementedDeclaredConcreteMethod();
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+}
+
+class Interface {
+  void implementedDeclaredConcreteMethod() {}
+  void implementedDeclaredAbstractMethod() {}
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+  void extendedAbstractImplementedDeclaredAbstractMethod() {}
+}
+
+class Class extends Super implements Interface {
+  void extendedConcreteDeclaredConcreteMethod() {}
+  void extendedAbstractDeclaredConcreteMethod() {}
+  void extendedConcreteDeclaredAbstractMethod();
+  void extendedAbstractDeclaredAbstractMethod();
+  void implementedDeclaredConcreteMethod() {}
+  void implementedDeclaredAbstractMethod();
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+  void extendedConcreteImplementedDeclaredAbstractMethod();
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1dfd1a3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.textual_outline_modelled.expect
@@ -0,0 +1,34 @@
+class Class extends Super implements Interface {
+  void extendedAbstractDeclaredAbstractMethod();
+  void extendedAbstractDeclaredConcreteMethod() {}
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+  void extendedConcreteDeclaredAbstractMethod();
+  void extendedConcreteDeclaredConcreteMethod() {}
+  void extendedConcreteImplementedDeclaredAbstractMethod();
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+  void implementedDeclaredAbstractMethod();
+  void implementedDeclaredConcreteMethod() {}
+}
+
+class Interface {
+  void extendedAbstractImplementedDeclaredAbstractMethod() {}
+  void extendedAbstractImplementedDeclaredConcreteMethod() {}
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+  void implementedDeclaredAbstractMethod() {}
+  void implementedDeclaredConcreteMethod() {}
+}
+
+class Super {
+  void extendedAbstractDeclaredAbstractMethod();
+  void extendedAbstractDeclaredConcreteMethod();
+  void extendedAbstractImplementedDeclaredAbstractMethod();
+  void extendedAbstractImplementedDeclaredConcreteMethod();
+  void extendedConcreteDeclaredAbstractMethod() {}
+  void extendedConcreteDeclaredConcreteMethod() {}
+  void extendedConcreteImplementedDeclaredAbstractMethod() {}
+  void extendedConcreteImplementedDeclaredConcreteMethod() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.expect
new file mode 100644
index 0000000..50391f4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractDeclaredAbstractMethod
+//  - Super.extendedAbstractDeclaredConcreteMethod
+//  - Super.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Super.extendedAbstractImplementedDeclaredConcreteMethod
+// 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 Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:12:8: Context: 'Super.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:8:8: Context: 'Super.extendedAbstractDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:20:8: Context: 'Super.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:16:8: Context: 'Super.extendedAbstractImplementedDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:37:7: Error: The non-abstract class 'Class' is missing implementations for these members:
+//  - Class.extendedAbstractDeclaredAbstractMethod
+//  - Class.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Class.implementedDeclaredAbstractMethod
+// 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 Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:44:8: Context: 'Class.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:56:8: Context: 'Class.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:48:8: Context: 'Class.implementedDeclaredAbstractMethod' is defined here.
+//   void implementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractDeclaredConcreteMethod() → void;
+  method extendedConcreteDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredConcreteMethod() → void;
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedDeclaredConcreteMethod() → void {}
+  method implementedDeclaredAbstractMethod() → void {}
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  method extendedAbstractImplementedDeclaredAbstractMethod() → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  method extendedAbstractDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method implementedDeclaredConcreteMethod() → void {}
+  abstract method implementedDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteImplementedDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.transformed.expect
new file mode 100644
index 0000000..50391f4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart.weak.transformed.expect
@@ -0,0 +1,95 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractDeclaredAbstractMethod
+//  - Super.extendedAbstractDeclaredConcreteMethod
+//  - Super.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Super.extendedAbstractImplementedDeclaredConcreteMethod
+// 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 Super {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:12:8: Context: 'Super.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:8:8: Context: 'Super.extendedAbstractDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:20:8: Context: 'Super.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:16:8: Context: 'Super.extendedAbstractImplementedDeclaredConcreteMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:37:7: Error: The non-abstract class 'Class' is missing implementations for these members:
+//  - Class.extendedAbstractDeclaredAbstractMethod
+//  - Class.extendedAbstractImplementedDeclaredAbstractMethod
+//  - Class.implementedDeclaredAbstractMethod
+// 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 Class extends Super implements Interface {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:44:8: Context: 'Class.extendedAbstractDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:56:8: Context: 'Class.extendedAbstractImplementedDeclaredAbstractMethod' is defined here.
+//   void extendedAbstractImplementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/declares.dart:48:8: Context: 'Class.implementedDeclaredAbstractMethod' is defined here.
+//   void implementedDeclaredAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractDeclaredConcreteMethod() → void;
+  method extendedConcreteDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredConcreteMethod() → void;
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method implementedDeclaredConcreteMethod() → void {}
+  method implementedDeclaredAbstractMethod() → void {}
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  method extendedConcreteImplementedDeclaredAbstractMethod() → void {}
+  method extendedAbstractImplementedDeclaredAbstractMethod() → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  method extendedConcreteDeclaredConcreteMethod() → void {}
+  method extendedAbstractDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractDeclaredAbstractMethod() → void;
+  method implementedDeclaredConcreteMethod() → void {}
+  abstract method implementedDeclaredAbstractMethod() → void;
+  method extendedConcreteImplementedDeclaredConcreteMethod() → void {}
+  method extendedAbstractImplementedDeclaredConcreteMethod() → void {}
+  abstract method extendedConcreteImplementedDeclaredAbstractMethod() → void;
+  abstract method extendedAbstractImplementedDeclaredAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart
new file mode 100644
index 0000000..92a4681
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart
@@ -0,0 +1,67 @@
+// 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 {
+  void superDuplicate1() {}
+  int get superDuplicate1 => 42;
+
+  int get superDuplicate2 => 42;
+  void superDuplicate2() {}
+
+  void extendedDuplicate1() {}
+  void extendedDuplicate2() {}
+}
+
+class Mixin {
+  //void mixinDuplicate1() {}
+  //int get mixinDuplicate1 => 42;
+
+  //int get mixinDuplicate2 => 42;
+  //void mixinDuplicate2() {}
+
+  void mixedInDuplicate1() {}
+  void mixedInDuplicate2() {}
+}
+
+class Interface {
+  void interfaceDuplicate1() {}
+  int get interfaceDuplicate1 => 42;
+
+  int get interfaceDuplicate2 => 42;
+  void interfaceDuplicate2() {}
+
+  void implementedDuplicate1() {}
+  void implementedDuplicate2() {}
+}
+
+abstract class Class extends Super with Mixin implements Interface {
+  void superDuplicate1() {}
+  void superDuplicate2() {}
+
+  void extendedDuplicate1() {}
+  int get extendedDuplicate1 => 42;
+
+  int get extendedDuplicate2 => 42;
+  void extendedDuplicate2() {}
+
+  //void mixinDuplicate1() {}
+  //void mixinDuplicate2() {}
+
+  void mixedInDuplicate1() {}
+  int get mixedInDuplicate1 => 42;
+
+  int get mixedInDuplicate2 => 42;
+  void mixedInDuplicate2() {}
+
+  void interfaceDuplicate1() {}
+  void interfaceDuplicate2() {}
+
+  void implementedDuplicate1() {}
+  int get implementedDuplicate1 => 42;
+
+  int get implementedDuplicate2 => 42;
+  void implementedDuplicate2() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline.expect
new file mode 100644
index 0000000..1647703
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline.expect
@@ -0,0 +1,43 @@
+class Super {
+  void superDuplicate1() {}
+  int get superDuplicate1 => 42;
+  int get superDuplicate2 => 42;
+  void superDuplicate2() {}
+  void extendedDuplicate1() {}
+  void extendedDuplicate2() {}
+}
+
+class Mixin {
+  void mixedInDuplicate1() {}
+  void mixedInDuplicate2() {}
+}
+
+class Interface {
+  void interfaceDuplicate1() {}
+  int get interfaceDuplicate1 => 42;
+  int get interfaceDuplicate2 => 42;
+  void interfaceDuplicate2() {}
+  void implementedDuplicate1() {}
+  void implementedDuplicate2() {}
+}
+
+abstract class Class extends Super with Mixin implements Interface {
+  void superDuplicate1() {}
+  void superDuplicate2() {}
+  void extendedDuplicate1() {}
+  int get extendedDuplicate1 => 42;
+  int get extendedDuplicate2 => 42;
+  void extendedDuplicate2() {}
+  void mixedInDuplicate1() {}
+  int get mixedInDuplicate1 => 42;
+  int get mixedInDuplicate2 => 42;
+  void mixedInDuplicate2() {}
+  void interfaceDuplicate1() {}
+  void interfaceDuplicate2() {}
+  void implementedDuplicate1() {}
+  int get implementedDuplicate1 => 42;
+  int get implementedDuplicate2 => 42;
+  void implementedDuplicate2() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5255f14
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.textual_outline_modelled.expect
@@ -0,0 +1,43 @@
+abstract class Class extends Super with Mixin implements Interface {
+  int get extendedDuplicate1 => 42;
+  int get extendedDuplicate2 => 42;
+  int get implementedDuplicate1 => 42;
+  int get implementedDuplicate2 => 42;
+  int get mixedInDuplicate1 => 42;
+  int get mixedInDuplicate2 => 42;
+  void extendedDuplicate1() {}
+  void extendedDuplicate2() {}
+  void implementedDuplicate1() {}
+  void implementedDuplicate2() {}
+  void interfaceDuplicate1() {}
+  void interfaceDuplicate2() {}
+  void mixedInDuplicate1() {}
+  void mixedInDuplicate2() {}
+  void superDuplicate1() {}
+  void superDuplicate2() {}
+}
+
+class Interface {
+  int get interfaceDuplicate1 => 42;
+  int get interfaceDuplicate2 => 42;
+  void implementedDuplicate1() {}
+  void implementedDuplicate2() {}
+  void interfaceDuplicate1() {}
+  void interfaceDuplicate2() {}
+}
+
+class Mixin {
+  void mixedInDuplicate1() {}
+  void mixedInDuplicate2() {}
+}
+
+class Super {
+  int get superDuplicate1 => 42;
+  int get superDuplicate2 => 42;
+  void extendedDuplicate1() {}
+  void extendedDuplicate2() {}
+  void superDuplicate1() {}
+  void superDuplicate2() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.expect
new file mode 100644
index 0000000..d51754d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart.weak.expect
@@ -0,0 +1,132 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:7:11: Error: 'superDuplicate1' is already declared in this scope.
+//   int get superDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:6:8: Context: Previous declaration of 'superDuplicate1'.
+//   void superDuplicate1() {}
+//        ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:10:8: Error: 'superDuplicate2' is already declared in this scope.
+//   void superDuplicate2() {}
+//        ^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:9:11: Context: Previous declaration of 'superDuplicate2'.
+//   int get superDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:29:11: Error: 'interfaceDuplicate1' is already declared in this scope.
+//   int get interfaceDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:28:8: Context: Previous declaration of 'interfaceDuplicate1'.
+//   void interfaceDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:32:8: Error: 'interfaceDuplicate2' is already declared in this scope.
+//   void interfaceDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:31:11: Context: Previous declaration of 'interfaceDuplicate2'.
+//   int get interfaceDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:43:11: Error: 'extendedDuplicate1' is already declared in this scope.
+//   int get extendedDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:42:8: Context: Previous declaration of 'extendedDuplicate1'.
+//   void extendedDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:46:8: Error: 'extendedDuplicate2' is already declared in this scope.
+//   void extendedDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:45:11: Context: Previous declaration of 'extendedDuplicate2'.
+//   int get extendedDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:52:11: Error: 'mixedInDuplicate1' is already declared in this scope.
+//   int get mixedInDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:51:8: Context: Previous declaration of 'mixedInDuplicate1'.
+//   void mixedInDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:55:8: Error: 'mixedInDuplicate2' is already declared in this scope.
+//   void mixedInDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:54:11: Context: Previous declaration of 'mixedInDuplicate2'.
+//   int get mixedInDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:61:11: Error: 'implementedDuplicate1' is already declared in this scope.
+//   int get implementedDuplicate1 => 42;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:60:8: Context: Previous declaration of 'implementedDuplicate1'.
+//   void implementedDuplicate1() {}
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:64:8: Error: 'implementedDuplicate2' is already declared in this scope.
+//   void implementedDuplicate2() {}
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/duplicates.dart:63:11: Context: Previous declaration of 'implementedDuplicate2'.
+//   int get implementedDuplicate2 => 42;
+//           ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method superDuplicate1() → void {}
+  get superDuplicate2() → core::int
+    return 42;
+  method extendedDuplicate1() → void {}
+  method extendedDuplicate2() → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInDuplicate1() → void {}
+  method mixedInDuplicate2() → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method interfaceDuplicate1() → void {}
+  get interfaceDuplicate2() → core::int
+    return 42;
+  method implementedDuplicate1() → void {}
+  method implementedDuplicate2() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInDuplicate1() → void
+    return super.{self::Mixin::mixedInDuplicate1}();
+  mixin-super-stub method mixedInDuplicate2() → void
+    return super.{self::Mixin::mixedInDuplicate2}();
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  method superDuplicate1() → void {}
+  method superDuplicate2() → void {}
+  method extendedDuplicate1() → void {}
+  get extendedDuplicate2() → core::int
+    return 42;
+  method mixedInDuplicate1() → void {}
+  get mixedInDuplicate2() → core::int
+    return 42;
+  method interfaceDuplicate1() → void {}
+  method interfaceDuplicate2() → void {}
+  method implementedDuplicate1() → void {}
+  get implementedDuplicate2() → core::int
+    return 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart
new file mode 100644
index 0000000..ef9ef31
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart
@@ -0,0 +1,41 @@
+// 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.
+
+abstract class Super {
+  int extendedConcreteField = 0;
+
+  abstract int extendedAbstractField;
+
+  int extendedConcreteImplementedField = 0;
+
+  abstract int extendedAbstractImplementedField;
+
+  int extendedConcreteImplementedMultipleField = 0;
+
+  abstract int extendedAbstractImplementedMultipleField;
+}
+
+class Interface1 {
+  int extendedConcreteImplementedField = 0;
+
+  int extendedAbstractImplementedField = 0;
+
+  int extendedConcreteImplementedMultipleField = 0;
+
+  int extendedAbstractImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  int extendedConcreteImplementedMultipleField = 0;
+
+  int extendedAbstractImplementedMultipleField = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline.expect
new file mode 100644
index 0000000..8e6585a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+abstract class Super {
+  int extendedConcreteField = 0;
+  abstract int extendedAbstractField;
+  int extendedConcreteImplementedField = 0;
+  abstract int extendedAbstractImplementedField;
+  int extendedConcreteImplementedMultipleField = 0;
+  abstract int extendedAbstractImplementedMultipleField;
+}
+
+class Interface1 {
+  int extendedConcreteImplementedField = 0;
+  int extendedAbstractImplementedField = 0;
+  int extendedConcreteImplementedMultipleField = 0;
+  int extendedAbstractImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  int extendedConcreteImplementedMultipleField = 0;
+  int extendedAbstractImplementedMultipleField = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..2501812
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  abstract int extendedAbstractField;
+  abstract int extendedAbstractImplementedField;
+  abstract int extendedAbstractImplementedMultipleField;
+  int extendedConcreteField = 0;
+  int extendedConcreteImplementedField = 0;
+  int extendedConcreteImplementedMultipleField = 0;
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  int extendedAbstractImplementedField = 0;
+  int extendedAbstractImplementedMultipleField = 0;
+  int extendedConcreteImplementedField = 0;
+  int extendedConcreteImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  int extendedAbstractImplementedMultipleField = 0;
+  int extendedConcreteImplementedMultipleField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..fd7af41
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// 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=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 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: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:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract set extendedAbstractImplementedField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+  abstract set extendedAbstractImplementedMultipleField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedAbstractImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..fd7af41
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_field.dart.weak.transformed.expect
@@ -0,0 +1,121 @@
+library /*isNonNullableByDefault*/;
+//
+// 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=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 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: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:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract set extendedAbstractImplementedField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+  abstract set extendedAbstractImplementedMultipleField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteImplementedField = 0;
+  field core::int extendedAbstractImplementedField = 0;
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int extendedConcreteImplementedMultipleField = 0;
+  field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart
new file mode 100644
index 0000000..f4c9530
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart
@@ -0,0 +1,41 @@
+// 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.
+
+abstract class Super {
+  final int extendedConcreteField = 0;
+
+  abstract final int extendedAbstractField;
+
+  final int extendedConcreteImplementedField = 0;
+
+  abstract final int extendedAbstractImplementedField;
+
+  final int extendedConcreteImplementedMultipleField = 0;
+
+  abstract final int extendedAbstractImplementedMultipleField;
+}
+
+class Interface1 {
+  final int extendedConcreteImplementedField = 0;
+
+  final int extendedAbstractImplementedField = 0;
+
+  final int extendedConcreteImplementedMultipleField = 0;
+
+  final int extendedAbstractImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  final int extendedConcreteImplementedMultipleField = 0;
+
+  final int extendedAbstractImplementedMultipleField = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..03a436e5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+abstract class Super {
+  final int extendedConcreteField = 0;
+  abstract final int extendedAbstractField;
+  final int extendedConcreteImplementedField = 0;
+  abstract final int extendedAbstractImplementedField;
+  final int extendedConcreteImplementedMultipleField = 0;
+  abstract final int extendedAbstractImplementedMultipleField;
+}
+
+class Interface1 {
+  final int extendedConcreteImplementedField = 0;
+  final int extendedAbstractImplementedField = 0;
+  final int extendedConcreteImplementedMultipleField = 0;
+  final int extendedAbstractImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  final int extendedConcreteImplementedMultipleField = 0;
+  final int extendedAbstractImplementedMultipleField = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cff7a0d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  abstract final int extendedAbstractField;
+  abstract final int extendedAbstractImplementedField;
+  abstract final int extendedAbstractImplementedMultipleField;
+  final int extendedConcreteField = 0;
+  final int extendedConcreteImplementedField = 0;
+  final int extendedConcreteImplementedMultipleField = 0;
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  final int extendedAbstractImplementedField = 0;
+  final int extendedAbstractImplementedMultipleField = 0;
+  final int extendedConcreteImplementedField = 0;
+  final int extendedConcreteImplementedMultipleField = 0;
+}
+
+class Interface2 {
+  final int extendedAbstractImplementedMultipleField = 0;
+  final int extendedConcreteImplementedMultipleField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..1fe2215
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractField
+// 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 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:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedMultipleField
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+}
+class Interface1 extends core::Object {
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedAbstractImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..1fe2215
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_final_field.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractField
+// 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 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:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractImplementedField
+//  - Super.extendedAbstractImplementedMultipleField
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractImplementedField() → core::int;
+  abstract get extendedAbstractImplementedMultipleField() → core::int;
+}
+class Interface1 extends core::Object {
+  final field core::int extendedConcreteImplementedField = 0;
+  final field core::int extendedAbstractImplementedField = 0;
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int extendedConcreteImplementedMultipleField = 0;
+  final field core::int extendedAbstractImplementedMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart
new file mode 100644
index 0000000..e7cdf82
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart
@@ -0,0 +1,41 @@
+// 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.
+
+abstract class Super {
+  int get extendedConcreteGetter => 0;
+
+  int get extendedAbstractGetter;
+
+  int get extendedConcreteImplementedGetter => 0;
+
+  int get extendedAbstractImplementedGetter;
+
+  int get extendedConcreteImplementedMultipleGetter => 0;
+
+  int get extendedAbstractImplementedMultipleGetter;
+}
+
+class Interface1 {
+  int get extendedConcreteImplementedGetter => 0;
+
+  int get extendedAbstractImplementedGetter => 0;
+
+  int get extendedConcreteImplementedMultipleGetter => 0;
+
+  int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get extendedConcreteImplementedMultipleGetter => 0;
+
+  int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..2d035e0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+abstract class Super {
+  int get extendedConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get extendedConcreteImplementedGetter => 0;
+  int get extendedAbstractImplementedGetter;
+  int get extendedConcreteImplementedMultipleGetter => 0;
+  int get extendedAbstractImplementedMultipleGetter;
+}
+
+class Interface1 {
+  int get extendedConcreteImplementedGetter => 0;
+  int get extendedAbstractImplementedGetter => 0;
+  int get extendedConcreteImplementedMultipleGetter => 0;
+  int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get extendedConcreteImplementedMultipleGetter => 0;
+  int get extendedAbstractImplementedMultipleGetter => 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d52a740
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  int get extendedAbstractGetter;
+  int get extendedAbstractImplementedGetter;
+  int get extendedAbstractImplementedMultipleGetter;
+  int get extendedConcreteGetter => 0;
+  int get extendedConcreteImplementedGetter => 0;
+  int get extendedConcreteImplementedMultipleGetter => 0;
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  int get extendedAbstractImplementedGetter => 0;
+  int get extendedAbstractImplementedMultipleGetter => 0;
+  int get extendedConcreteImplementedGetter => 0;
+  int get extendedConcreteImplementedMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get extendedAbstractImplementedMultipleGetter => 0;
+  int get extendedConcreteImplementedMultipleGetter => 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..68eae42
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractGetter
+// 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 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:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractImplementedGetter
+//  - Super.extendedAbstractImplementedMultipleGetter
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedGetter() → core::int;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedMultipleGetter() → core::int;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedGetter() → core::int
+    return 0;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..68eae42
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart.weak.transformed.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractGetter
+// 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 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:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractImplementedGetter
+//  - Super.extendedAbstractImplementedMultipleGetter
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedGetter() → core::int;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  abstract get extendedAbstractImplementedMultipleGetter() → core::int;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedGetter() → core::int
+    return 0;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get extendedConcreteImplementedMultipleGetter() → core::int
+    return 0;
+  get extendedAbstractImplementedMultipleGetter() → core::int
+    return 0;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart
new file mode 100644
index 0000000..2bdf042
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart
@@ -0,0 +1,41 @@
+// 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.
+
+abstract class Super {
+  void extendedConcreteMethod() {}
+
+  void extendedAbstractMethod();
+
+  void extendedConcreteImplementedMethod() {}
+
+  void extendedAbstractImplementedMethod();
+
+  void extendedConcreteImplementedMultipleMethod() {}
+
+  void extendedAbstractImplementedMultipleMethod();
+}
+
+class Interface1 {
+  void extendedConcreteImplementedMethod() {}
+
+  void extendedAbstractImplementedMethod() {}
+
+  void extendedConcreteImplementedMultipleMethod() {}
+
+  void extendedAbstractImplementedMultipleMethod() {}
+}
+
+class Interface2 {
+  void extendedConcreteImplementedMultipleMethod() {}
+
+  void extendedAbstractImplementedMultipleMethod() {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline.expect
new file mode 100644
index 0000000..ffe3605
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+abstract class Super {
+  void extendedConcreteMethod() {}
+  void extendedAbstractMethod();
+  void extendedConcreteImplementedMethod() {}
+  void extendedAbstractImplementedMethod();
+  void extendedConcreteImplementedMultipleMethod() {}
+  void extendedAbstractImplementedMultipleMethod();
+}
+
+class Interface1 {
+  void extendedConcreteImplementedMethod() {}
+  void extendedAbstractImplementedMethod() {}
+  void extendedConcreteImplementedMultipleMethod() {}
+  void extendedAbstractImplementedMultipleMethod() {}
+}
+
+class Interface2 {
+  void extendedConcreteImplementedMultipleMethod() {}
+  void extendedAbstractImplementedMultipleMethod() {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9539d08
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  void extendedAbstractImplementedMethod();
+  void extendedAbstractImplementedMultipleMethod();
+  void extendedAbstractMethod();
+  void extendedConcreteImplementedMethod() {}
+  void extendedConcreteImplementedMultipleMethod() {}
+  void extendedConcreteMethod() {}
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void extendedAbstractImplementedMethod() {}
+  void extendedAbstractImplementedMultipleMethod() {}
+  void extendedConcreteImplementedMethod() {}
+  void extendedConcreteImplementedMultipleMethod() {}
+}
+
+class Interface2 {
+  void extendedAbstractImplementedMultipleMethod() {}
+  void extendedConcreteImplementedMultipleMethod() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..7d6110d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractMethod
+// 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 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: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:
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractMethod
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteImplementedMethod() → void {}
+  abstract method extendedAbstractImplementedMethod() → void;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  abstract method extendedAbstractImplementedMultipleMethod() → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod() → void {}
+  method extendedAbstractImplementedMethod() → void {}
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..7d6110d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_method.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractMethod
+// 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 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: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:
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractImplementedMultipleMethod
+//  - Super.extendedAbstractMethod
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteImplementedMethod() → void {}
+  abstract method extendedAbstractImplementedMethod() → void;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  abstract method extendedAbstractImplementedMultipleMethod() → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod() → void {}
+  method extendedAbstractImplementedMethod() → void {}
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMultipleMethod() → void {}
+  method extendedAbstractImplementedMultipleMethod() → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart
new file mode 100644
index 0000000..2026b82
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart
@@ -0,0 +1,41 @@
+// 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.
+
+abstract class Super {
+  void set extendedConcreteSetter(int value) {}
+
+  void set extendedAbstractSetter(int value);
+
+  void set extendedConcreteImplementedSetter(int value) {}
+
+  void set extendedAbstractImplementedSetter(int value);
+
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+  void set extendedAbstractImplementedMultipleSetter(int value);
+}
+
+class Interface1 {
+  void set extendedConcreteImplementedSetter(int value) {}
+
+  void set extendedAbstractImplementedSetter(int value) {}
+
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+class Interface2 {
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..be8c083
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline.expect
@@ -0,0 +1,28 @@
+abstract class Super {
+  void set extendedConcreteSetter(int value) {}
+  void set extendedAbstractSetter(int value);
+  void set extendedConcreteImplementedSetter(int value) {}
+  void set extendedAbstractImplementedSetter(int value);
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+  void set extendedAbstractImplementedMultipleSetter(int value);
+}
+
+class Interface1 {
+  void set extendedConcreteImplementedSetter(int value) {}
+  void set extendedAbstractImplementedSetter(int value) {}
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+class Interface2 {
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ad902f2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,28 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  void set extendedAbstractImplementedMultipleSetter(int value);
+  void set extendedAbstractImplementedSetter(int value);
+  void set extendedAbstractSetter(int value);
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+  void set extendedConcreteImplementedSetter(int value) {}
+  void set extendedConcreteSetter(int value) {}
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+  void set extendedAbstractImplementedSetter(int value) {}
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+  void set extendedConcreteImplementedSetter(int value) {}
+}
+
+class Interface2 {
+  void set extendedAbstractImplementedMultipleSetter(int value) {}
+  void set extendedConcreteImplementedMultipleSetter(int value) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..9a3a3e9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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==
+//  - Super.extendedAbstractSetter=
+// 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 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: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:
+//  - Super.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedSetter=
+//  - Super.extendedAbstractSetter=
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedSetter(core::int value) → void;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedMultipleSetter(core::int value) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  set extendedAbstractImplementedSetter(core::int value) → void {}
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..9a3a3e9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_setter.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library /*isNonNullableByDefault*/;
+//
+// 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==
+//  - Super.extendedAbstractSetter=
+// 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 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: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:
+//  - Super.extendedAbstractImplementedMultipleSetter=
+//  - Super.extendedAbstractImplementedSetter=
+//  - Super.extendedAbstractSetter=
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int value) → void {}
+  abstract set extendedAbstractSetter(core::int value) → void;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedSetter(core::int value) → void;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  abstract set extendedAbstractImplementedMultipleSetter(core::int value) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedSetter(core::int value) → void {}
+  set extendedAbstractImplementedSetter(core::int value) → void {}
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set extendedConcreteImplementedMultipleSetter(core::int value) → void {}
+  set extendedAbstractImplementedMultipleSetter(core::int value) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart
new file mode 100644
index 0000000..a239ed9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart
@@ -0,0 +1,31 @@
+// 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 {
+  num field1 = 0;
+  num field2 = 0;
+  num field3 = 0;
+
+  covariant num field4 = 0;
+  covariant int field5 = 0;
+}
+
+class Interface {
+  covariant int field1 = 0;
+  covariant int field2 = 0;
+
+  int field4 = 0;
+  int field5 = 0;
+}
+
+class Class extends Super implements Interface {
+  abstract int field1;
+  abstract String field2;
+  abstract int field3;
+
+  abstract int field4;
+  abstract num field5;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline.expect
new file mode 100644
index 0000000..5623cfe94
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline.expect
@@ -0,0 +1,24 @@
+class Super {
+  num field1 = 0;
+  num field2 = 0;
+  num field3 = 0;
+  covariant num field4 = 0;
+  covariant int field5 = 0;
+}
+
+class Interface {
+  covariant int field1 = 0;
+  covariant int field2 = 0;
+  int field4 = 0;
+  int field5 = 0;
+}
+
+class Class extends Super implements Interface {
+  abstract int field1;
+  abstract String field2;
+  abstract int field3;
+  abstract int field4;
+  abstract num field5;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..54c91bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+class Class extends Super implements Interface {
+  abstract String field2;
+  abstract int field1;
+  abstract int field3;
+  abstract int field4;
+  abstract num field5;
+}
+
+class Interface {
+  covariant int field1 = 0;
+  covariant int field2 = 0;
+  int field4 = 0;
+  int field5 = 0;
+}
+
+class Super {
+  covariant int field5 = 0;
+  covariant num field4 = 0;
+  num field1 = 0;
+  num field2 = 0;
+  num field3 = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..d886bdb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
@@ -0,0 +1,144 @@
+library /*isNonNullableByDefault*/;
+//
+// 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;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: This is the overridden method ('field2').
+//   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;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:16:17: Context: This is the overridden method ('field2').
+//   covariant int field2 = 0;
+//                 ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The parameter '#externalFieldValue' of the method 'Class.field2' has type 'String', which does not match the corresponding type, 'num', in the overridden method, 'Super.field2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:7:7: Context: This is the overridden method ('field2').
+//   num field2 = 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:24:19: Error: The parameter '#externalFieldValue' of the method 'Class.field2' has type 'String', which does not match the corresponding type, 'int', in the overridden method, 'Interface.field2'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+//   abstract String field2;
+//                   ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:16:17: Context: This is the overridden method ('field2').
+//   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;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:8:7: Context: This is the overridden method ('field3').
+//   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;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:11:17: Context: This is the overridden method ('field5').
+//   covariant int field5 = 0;
+//                 ^
+//
+// 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, 'Interface.field5'.
+// Change to a subtype of 'int'.
+//   abstract num field5;
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart:19:7: Context: This is the overridden method ('field5').
+//   int field5 = 0;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::num field1 = 0;
+  field core::num field2 = 0;
+  field core::num field3 = 0;
+  covariant field core::num field4 = 0;
+  covariant field core::int field5 = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Interface extends core::Object {
+  covariant field core::int field1 = 0;
+  covariant field core::int field2 = 0;
+  field core::int field4 = 0;
+  field core::int field5 = 0;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  abstract get field1() → core::int;
+  forwarding-stub forwarding-semi-stub set field1(covariant core::int #externalFieldValue) → void
+    return super.{self::Super::field1} = #externalFieldValue;
+  abstract get field2() → core::String;
+  forwarding-stub forwarding-semi-stub set field2(covariant core::String #externalFieldValue) → void
+    return super.{self::Super::field2} = #externalFieldValue;
+  abstract get field3() → core::int;
+  abstract set field3(core::int #externalFieldValue) → void;
+  abstract get field4() → core::int;
+  abstract set field4(covariant core::int #externalFieldValue) → void;
+  abstract get field5() → core::num;
+  abstract set field5(covariant core::num #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart
new file mode 100644
index 0000000..12d4af5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart
@@ -0,0 +1,31 @@
+// 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 {
+  void method1(num n) {}
+  void method2(num n) {}
+  void method3(num n) {}
+
+  void method4(covariant num i) {}
+  void method5(covariant int i) {}
+}
+
+class Interface {
+  void method1(covariant int i) {}
+  void method2(covariant int i) {}
+
+  void method4(int i) {}
+  void method5(int i) {}
+}
+
+class Class extends Super implements Interface {
+  void method1(int i);
+  void method2(String i);
+  void method3(int i);
+
+  void method4(int i);
+  void method5(num n);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline.expect
new file mode 100644
index 0000000..ceef571
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline.expect
@@ -0,0 +1,24 @@
+class Super {
+  void method1(num n) {}
+  void method2(num n) {}
+  void method3(num n) {}
+  void method4(covariant num i) {}
+  void method5(covariant int i) {}
+}
+
+class Interface {
+  void method1(covariant int i) {}
+  void method2(covariant int i) {}
+  void method4(int i) {}
+  void method5(int i) {}
+}
+
+class Class extends Super implements Interface {
+  void method1(int i);
+  void method2(String i);
+  void method3(int i);
+  void method4(int i);
+  void method5(num n);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3456994
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+class Class extends Super implements Interface {
+  void method1(int i);
+  void method2(String i);
+  void method3(int i);
+  void method4(int i);
+  void method5(num n);
+}
+
+class Interface {
+  void method1(covariant int i) {}
+  void method2(covariant int i) {}
+  void method4(int i) {}
+  void method5(int i) {}
+}
+
+class Super {
+  void method1(num n) {}
+  void method2(num n) {}
+  void method3(num n) {}
+  void method4(covariant num i) {}
+  void method5(covariant int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..9e0138f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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, 'num', in the overridden method, 'Super.method2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method2(String i);
+//                       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:7:8: Context: This is the overridden method ('method2').
+//   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);
+//                       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:16:8: Context: This is the overridden method ('method2').
+//   void method2(covariant int i) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:25:20: Error: The parameter 'i' of the method 'Class.method3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.method3'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void method3(int i);
+//                    ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart:8:8: Context: This is the overridden method ('method3').
+//   void method3(num n) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method method1(core::num n) → void {}
+  method method2(core::num n) → void {}
+  method method3(core::num n) → void {}
+  method method4(covariant core::num i) → void {}
+  method method5(covariant core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  method method1(covariant core::int i) → void {}
+  method method2(covariant core::int i) → void {}
+  method method4(core::int i) → void {}
+  method method5(core::int i) → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub method method1(covariant core::int i) → void
+    return super.{self::Super::method1}(i);
+  forwarding-stub forwarding-semi-stub method method2(covariant core::String i) → void
+    return super.{self::Super::method2}(i);
+  abstract method method3(core::int i) → void;
+  abstract method method4(covariant core::int i) → void;
+  abstract method method5(covariant core::num n) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart
new file mode 100644
index 0000000..7c71384
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart
@@ -0,0 +1,31 @@
+// 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 {
+  void set setter1(num n) {}
+  void set setter2(num n) {}
+  void set setter3(num n) {}
+
+  void set setter4(covariant num i) {}
+  void set setter5(covariant int i) {}
+}
+
+class Interface {
+  void set setter1(covariant int i) {}
+  void set setter2(covariant int i) {}
+
+  void set setter4(int i) {}
+  void set setter5(int i) {}
+}
+
+class Class extends Super implements Interface {
+  void set setter1(int i);
+  void set setter2(String i);
+  void set setter3(int i);
+
+  void set setter4(int i);
+  void set setter5(num n);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..c7fba79
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline.expect
@@ -0,0 +1,24 @@
+class Super {
+  void set setter1(num n) {}
+  void set setter2(num n) {}
+  void set setter3(num n) {}
+  void set setter4(covariant num i) {}
+  void set setter5(covariant int i) {}
+}
+
+class Interface {
+  void set setter1(covariant int i) {}
+  void set setter2(covariant int i) {}
+  void set setter4(int i) {}
+  void set setter5(int i) {}
+}
+
+class Class extends Super implements Interface {
+  void set setter1(int i);
+  void set setter2(String i);
+  void set setter3(int i);
+  void set setter4(int i);
+  void set setter5(num n);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..67cef1c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+class Class extends Super implements Interface {
+  void set setter1(int i);
+  void set setter2(String i);
+  void set setter3(int i);
+  void set setter4(int i);
+  void set setter5(num n);
+}
+
+class Interface {
+  void set setter1(covariant int i) {}
+  void set setter2(covariant int i) {}
+  void set setter4(int i) {}
+  void set setter5(int i) {}
+}
+
+class Super {
+  void set setter1(num n) {}
+  void set setter2(num n) {}
+  void set setter3(num n) {}
+  void set setter4(covariant num i) {}
+  void set setter5(covariant int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..a58eb8f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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, 'num', in the overridden method, 'Super.setter2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set setter2(String i);
+//                           ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:7:12: Context: This is the overridden method ('setter2').
+//   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);
+//                           ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:16:12: Context: This is the overridden method ('setter2').
+//   void set setter2(covariant int i) {}
+//            ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:25:24: Error: The parameter 'i' of the method 'Class.setter3' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.setter3'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void set setter3(int i);
+//                        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart:8:12: Context: This is the overridden method ('setter3').
+//   void set setter3(num n) {}
+//            ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set setter1(core::num n) → void {}
+  set setter2(core::num n) → void {}
+  set setter3(core::num n) → void {}
+  set setter4(covariant core::num i) → void {}
+  set setter5(covariant core::int i) → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  set setter1(covariant core::int i) → void {}
+  set setter2(covariant core::int i) → void {}
+  set setter4(core::int i) → void {}
+  set setter5(core::int i) → void {}
+}
+class Class extends self::Super implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub forwarding-semi-stub set setter1(covariant core::int i) → void
+    return super.{self::Super::setter1} = i;
+  forwarding-stub forwarding-semi-stub set setter2(covariant core::String i) → void
+    return super.{self::Super::setter2} = i;
+  abstract set setter3(core::int i) → void;
+  abstract set setter4(covariant core::int i) → void;
+  abstract set setter5(covariant core::num n) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart
new file mode 100644
index 0000000..3684037
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart
@@ -0,0 +1,31 @@
+// 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.
+
+// Derived from language/mixin/forwarding_stub_call_test
+
+// Test for calling a method for which a forwarding super stub has been
+// inserted.
+
+class Super<T> {
+  void method(T t) {}
+}
+
+class Mixin {
+  void method(int t) {}
+}
+
+// A forwarding super stub is inserted:
+//
+//     void method(/*generic-covariant-impl*/ int t) => super.method(t);
+//
+class Class = Super<int> with Mixin;
+
+class Subclass extends Class {
+  void test() {
+    // Test that we can call the method.
+    super.method(0);
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline.expect
new file mode 100644
index 0000000..3b2f2c2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class Super<T> {
+  void method(T t) {}
+}
+
+class Mixin {
+  void method(int t) {}
+}
+
+class Class = Super<int> with Mixin;
+
+class Subclass extends Class {
+  void test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..547b86a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Class = Super<int> with Mixin;
+
+class Mixin {
+  void method(int t) {}
+}
+
+class Subclass extends Class {
+  void test() {}
+}
+
+class Super<T> {
+  void method(T t) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect
new file mode 100644
index 0000000..bb5cf3f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Super::T% t) → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method(core::int t) → void {}
+}
+class Class = self::Super<core::int> with self::Mixin {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  forwarding-stub method method(generic-covariant-impl core::int t) → void
+    return super.{self::Mixin::method}(t);
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method test() → void {
+    super.{self::Class::method}(0);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect
new file mode 100644
index 0000000..88c7f59
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Super<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Super<self::Super::T%>
+    : super core::Object::•()
+    ;
+  method method(generic-covariant-impl self::Super::T% t) → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method method(core::int t) → void {}
+}
+class Class extends self::Super<core::int> implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  method method(generic-covariant-impl core::int t) → void {}
+}
+class Subclass extends self::Class {
+  synthetic constructor •() → self::Subclass
+    : super self::Class::•()
+    ;
+  method test() → void {
+    super.{self::Class::method}(0);
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart
new file mode 100644
index 0000000..91875b6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart
@@ -0,0 +1,45 @@
+// 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.
+
+abstract class Super {
+  covariant int extendedConcreteCovariantField = 0;
+
+  abstract covariant int extendedAbstractCovariantField;
+
+  covariant int extendedConcreteCovariantImplementedField = 0;
+
+  abstract covariant int extendedAbstractCovariantImplementedField;
+
+  int extendedConcreteImplementedCovariantField = 0;
+
+  abstract int extendedAbstractImplementedCovariantField;
+}
+
+class Interface1 {
+  int extendedConcreteCovariantImplementedField = 0;
+
+  int extendedAbstractCovariantImplementedField = 0;
+
+  covariant int extendedConcreteImplementedCovariantField = 0;
+
+  covariant int extendedAbstractImplementedCovariantField = 0;
+
+  covariant int implementsMultipleCovariantField1 = 0;
+
+  int implementsMultipleCovariantField2 = 0;
+}
+
+class Interface2 {
+  int implementsMultipleCovariantField1 = 0;
+
+  covariant int implementsMultipleCovariantField2 = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline.expect
new file mode 100644
index 0000000..b2530ea
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+abstract class Super {
+  covariant int extendedConcreteCovariantField = 0;
+  abstract covariant int extendedAbstractCovariantField;
+  covariant int extendedConcreteCovariantImplementedField = 0;
+  abstract covariant int extendedAbstractCovariantImplementedField;
+  int extendedConcreteImplementedCovariantField = 0;
+  abstract int extendedAbstractImplementedCovariantField;
+}
+
+class Interface1 {
+  int extendedConcreteCovariantImplementedField = 0;
+  int extendedAbstractCovariantImplementedField = 0;
+  covariant int extendedConcreteImplementedCovariantField = 0;
+  covariant int extendedAbstractImplementedCovariantField = 0;
+  covariant int implementsMultipleCovariantField1 = 0;
+  int implementsMultipleCovariantField2 = 0;
+}
+
+class Interface2 {
+  int implementsMultipleCovariantField1 = 0;
+  covariant int implementsMultipleCovariantField2 = 0;
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..954cbe4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  abstract covariant int extendedAbstractCovariantField;
+  abstract covariant int extendedAbstractCovariantImplementedField;
+  abstract int extendedAbstractImplementedCovariantField;
+  covariant int extendedConcreteCovariantField = 0;
+  covariant int extendedConcreteCovariantImplementedField = 0;
+  int extendedConcreteImplementedCovariantField = 0;
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  covariant int extendedAbstractImplementedCovariantField = 0;
+  covariant int extendedConcreteImplementedCovariantField = 0;
+  covariant int implementsMultipleCovariantField1 = 0;
+  int extendedAbstractCovariantImplementedField = 0;
+  int extendedConcreteCovariantImplementedField = 0;
+  int implementsMultipleCovariantField2 = 0;
+}
+
+class Interface2 {
+  covariant int implementsMultipleCovariantField2 = 0;
+  int implementsMultipleCovariantField1 = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..638bf6e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
@@ -0,0 +1,163 @@
+library /*isNonNullableByDefault*/;
+//
+// 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=
+//  - Super.extendedAbstractCovariantField
+//  - Super.extendedAbstractCovariantField=
+// 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 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: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:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  covariant field core::int extendedConcreteCovariantField = 0;
+  covariant field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedConcreteImplementedCovariantField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractCovariantField() → core::int;
+  abstract set extendedAbstractCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract get extendedAbstractCovariantImplementedField() → core::int;
+  abstract set extendedAbstractCovariantImplementedField(covariant core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedCovariantField() → core::int;
+  abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedAbstractCovariantImplementedField = 0;
+  covariant field core::int extendedConcreteImplementedCovariantField = 0;
+  covariant field core::int extendedAbstractImplementedCovariantField = 0;
+  covariant field core::int implementsMultipleCovariantField1 = 0;
+  field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementsMultipleCovariantField1 = 0;
+  covariant field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..638bf6e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
@@ -0,0 +1,163 @@
+library /*isNonNullableByDefault*/;
+//
+// 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=
+//  - Super.extendedAbstractCovariantField
+//  - Super.extendedAbstractCovariantField=
+// 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 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: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:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  covariant field core::int extendedConcreteCovariantField = 0;
+  covariant field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedConcreteImplementedCovariantField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractCovariantField() → core::int;
+  abstract set extendedAbstractCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract get extendedAbstractCovariantImplementedField() → core::int;
+  abstract set extendedAbstractCovariantImplementedField(covariant core::int #externalFieldValue) → void;
+  abstract get extendedAbstractImplementedCovariantField() → core::int;
+  abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
+}
+class Interface1 extends core::Object {
+  field core::int extendedConcreteCovariantImplementedField = 0;
+  field core::int extendedAbstractCovariantImplementedField = 0;
+  covariant field core::int extendedConcreteImplementedCovariantField = 0;
+  covariant field core::int extendedAbstractImplementedCovariantField = 0;
+  covariant field core::int implementsMultipleCovariantField1 = 0;
+  field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementsMultipleCovariantField1 = 0;
+  covariant field core::int implementsMultipleCovariantField2 = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart
new file mode 100644
index 0000000..354068c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart
@@ -0,0 +1,45 @@
+// 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.
+
+abstract class Super {
+  void extendedConcreteCovariantMethod(covariant int i) {}
+
+  void extendedAbstractCovariantMethod(covariant int i);
+
+  void extendedConcreteCovariantImplementedMethod(covariant int i) {}
+
+  void extendedAbstractCovariantImplementedMethod(covariant int i);
+
+  void extendedConcreteImplementedCovariantMethod(int i) {}
+
+  void extendedAbstractImplementedCovariantMethod(int i);
+}
+
+class Interface1 {
+  void extendedConcreteCovariantImplementedMethod(int i) {}
+
+  void extendedAbstractCovariantImplementedMethod(int i) {}
+
+  void extendedConcreteImplementedCovariantMethod(covariant int i) {}
+
+  void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+
+  void implementsMultipleCovariantMethod1(covariant int i) {}
+
+  void implementsMultipleCovariantMethod2(int i) {}
+}
+
+class Interface2 {
+  void implementsMultipleCovariantMethod1(int i) {}
+
+  void implementsMultipleCovariantMethod2(covariant int i) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline.expect
new file mode 100644
index 0000000..fbd3e7e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+abstract class Super {
+  void extendedConcreteCovariantMethod(covariant int i) {}
+  void extendedAbstractCovariantMethod(covariant int i);
+  void extendedConcreteCovariantImplementedMethod(covariant int i) {}
+  void extendedAbstractCovariantImplementedMethod(covariant int i);
+  void extendedConcreteImplementedCovariantMethod(int i) {}
+  void extendedAbstractImplementedCovariantMethod(int i);
+}
+
+class Interface1 {
+  void extendedConcreteCovariantImplementedMethod(int i) {}
+  void extendedAbstractCovariantImplementedMethod(int i) {}
+  void extendedConcreteImplementedCovariantMethod(covariant int i) {}
+  void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+  void implementsMultipleCovariantMethod1(covariant int i) {}
+  void implementsMultipleCovariantMethod2(int i) {}
+}
+
+class Interface2 {
+  void implementsMultipleCovariantMethod1(int i) {}
+  void implementsMultipleCovariantMethod2(covariant int i) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..008b02c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  void extendedAbstractCovariantImplementedMethod(covariant int i);
+  void extendedAbstractCovariantMethod(covariant int i);
+  void extendedAbstractImplementedCovariantMethod(int i);
+  void extendedConcreteCovariantImplementedMethod(covariant int i) {}
+  void extendedConcreteCovariantMethod(covariant int i) {}
+  void extendedConcreteImplementedCovariantMethod(int i) {}
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void extendedAbstractCovariantImplementedMethod(int i) {}
+  void extendedAbstractImplementedCovariantMethod(covariant int i) {}
+  void extendedConcreteCovariantImplementedMethod(int i) {}
+  void extendedConcreteImplementedCovariantMethod(covariant int i) {}
+  void implementsMultipleCovariantMethod1(covariant int i) {}
+  void implementsMultipleCovariantMethod2(int i) {}
+}
+
+class Interface2 {
+  void implementsMultipleCovariantMethod1(int i) {}
+  void implementsMultipleCovariantMethod2(covariant int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..a4f6917
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractCovariantMethod
+// 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 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:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
+//   void extendedAbstractCovariantMethod(covariant 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.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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantMethod(covariant core::int i) → void {}
+  abstract method extendedAbstractCovariantMethod(covariant core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant core::int i) → void {}
+  abstract method extendedAbstractCovariantImplementedMethod(covariant core::int i) → void;
+  method extendedConcreteImplementedCovariantMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantImplementedMethod(core::int i) → void {}
+  method extendedAbstractCovariantImplementedMethod(core::int i) → void {}
+  method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void {}
+  method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod1(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementsMultipleCovariantMethod1(core::int i) → void {}
+  method implementsMultipleCovariantMethod2(covariant core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..a4f6917
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//  - Super.extendedAbstractCovariantMethod
+// 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 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:8:8: Context: 'Super.extendedAbstractCovariantMethod' is defined here.
+//   void extendedAbstractCovariantMethod(covariant 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.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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantMethod(covariant core::int i) → void {}
+  abstract method extendedAbstractCovariantMethod(covariant core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant core::int i) → void {}
+  abstract method extendedAbstractCovariantImplementedMethod(covariant core::int i) → void;
+  method extendedConcreteImplementedCovariantMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteCovariantImplementedMethod(core::int i) → void {}
+  method extendedAbstractCovariantImplementedMethod(core::int i) → void {}
+  method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void {}
+  method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod1(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementsMultipleCovariantMethod1(core::int i) → void {}
+  method implementsMultipleCovariantMethod2(covariant core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart
new file mode 100644
index 0000000..98f53a5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart
@@ -0,0 +1,45 @@
+// 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.
+
+abstract class Super {
+  void set extendedConcreteCovariantSetter(covariant int i) {}
+
+  void set extendedAbstractCovariantSetter(covariant int i);
+
+  void set extendedConcreteCovariantImplementedSetter(covariant int i) {}
+
+  void set extendedAbstractCovariantImplementedSetter(covariant int i);
+
+  void set extendedConcreteImplementedCovariantSetter(int i) {}
+
+  void set extendedAbstractImplementedCovariantSetter(int i);
+}
+
+class Interface1 {
+  void set extendedConcreteCovariantImplementedSetter(int i) {}
+
+  void set extendedAbstractCovariantImplementedSetter(int i) {}
+
+  void set extendedConcreteImplementedCovariantSetter(covariant int i) {}
+
+  void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+
+  void set implementsMultipleCovariantSetter1(covariant int i) {}
+
+  void set implementsMultipleCovariantSetter2(int i) {}
+}
+
+class Interface2 {
+  void set implementsMultipleCovariantSetter1(int i) {}
+
+  void set implementsMultipleCovariantSetter2(covariant int i) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..da91369
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline.expect
@@ -0,0 +1,30 @@
+abstract class Super {
+  void set extendedConcreteCovariantSetter(covariant int i) {}
+  void set extendedAbstractCovariantSetter(covariant int i);
+  void set extendedConcreteCovariantImplementedSetter(covariant int i) {}
+  void set extendedAbstractCovariantImplementedSetter(covariant int i);
+  void set extendedConcreteImplementedCovariantSetter(int i) {}
+  void set extendedAbstractImplementedCovariantSetter(int i);
+}
+
+class Interface1 {
+  void set extendedConcreteCovariantImplementedSetter(int i) {}
+  void set extendedAbstractCovariantImplementedSetter(int i) {}
+  void set extendedConcreteImplementedCovariantSetter(covariant int i) {}
+  void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+  void set implementsMultipleCovariantSetter1(covariant int i) {}
+  void set implementsMultipleCovariantSetter2(int i) {}
+}
+
+class Interface2 {
+  void set implementsMultipleCovariantSetter1(int i) {}
+  void set implementsMultipleCovariantSetter2(covariant int i) {}
+}
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bb9c98b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class Super {
+  void set extendedAbstractCovariantImplementedSetter(covariant int i);
+  void set extendedAbstractCovariantSetter(covariant int i);
+  void set extendedAbstractImplementedCovariantSetter(int i);
+  void set extendedConcreteCovariantImplementedSetter(covariant int i) {}
+  void set extendedConcreteCovariantSetter(covariant int i) {}
+  void set extendedConcreteImplementedCovariantSetter(int i) {}
+}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void set extendedAbstractCovariantImplementedSetter(int i) {}
+  void set extendedAbstractImplementedCovariantSetter(covariant int i) {}
+  void set extendedConcreteCovariantImplementedSetter(int i) {}
+  void set extendedConcreteImplementedCovariantSetter(covariant int i) {}
+  void set implementsMultipleCovariantSetter1(covariant int i) {}
+  void set implementsMultipleCovariantSetter2(int i) {}
+}
+
+class Interface2 {
+  void set implementsMultipleCovariantSetter1(int i) {}
+  void set implementsMultipleCovariantSetter2(covariant int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..5aca172
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// 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==
+//  - Super.extendedAbstractCovariantSetter=
+// 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 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: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:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantSetter(covariant core::int i) → void {}
+  abstract set extendedAbstractCovariantSetter(covariant core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant core::int i) → void {}
+  abstract set extendedAbstractCovariantImplementedSetter(covariant core::int i) → void;
+  set extendedConcreteImplementedCovariantSetter(core::int i) → void {}
+  abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantImplementedSetter(core::int i) → void {}
+  set extendedAbstractCovariantImplementedSetter(core::int i) → void {}
+  set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void {}
+  set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter1(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementsMultipleCovariantSetter1(core::int i) → void {}
+  set implementsMultipleCovariantSetter2(covariant core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..5aca172
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
@@ -0,0 +1,128 @@
+library /*isNonNullableByDefault*/;
+//
+// 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==
+//  - Super.extendedAbstractCovariantSetter=
+// 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 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: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:43:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - 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,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+//
+// class ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantSetter(covariant core::int i) → void {}
+  abstract set extendedAbstractCovariantSetter(covariant core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant core::int i) → void {}
+  abstract set extendedAbstractCovariantImplementedSetter(covariant core::int i) → void;
+  set extendedConcreteImplementedCovariantSetter(core::int i) → void {}
+  abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
+}
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedConcreteCovariantImplementedSetter(core::int i) → void {}
+  set extendedAbstractCovariantImplementedSetter(core::int i) → void {}
+  set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void {}
+  set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter1(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter2(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementsMultipleCovariantSetter1(core::int i) → void {}
+  set implementsMultipleCovariantSetter2(covariant core::int i) → void {}
+}
+abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super self::Super::•()
+    ;
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+    return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart
new file mode 100644
index 0000000..4b6f4da
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart
@@ -0,0 +1,115 @@
+// 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.
+
+abstract class Super {
+  String get extendedGetterDeclaredField => '';
+  String get extendedGetterMixedInField => '';
+  String get extendedGetterImplementedField => '';
+
+  String get extendedGetterDeclaredSetter => '';
+  String get extendedGetterMixedInSetter => '';
+  String get extendedGetterImplementedSetter => '';
+
+  final String extendedFieldDeclaredSetter = '';
+  final String extendedFieldMixedInSetter = '';
+  final String extendedFieldImplementedSetter = '';
+
+  void set extendedSetterDeclaredField(int value) {}
+  void set extendedSetterMixedInField(int value) {}
+  void set extendedSetterImplementedField(int value) {}
+
+  void set extendedSetterDeclaredGetter(int value) {}
+  void set extendedSetterMixedInGetter(int value) {}
+  void set extendedSetterImplementedGetter(int value) {}
+}
+
+abstract class Mixin {
+  int extendedGetterMixedInField = 0;
+  void set extendedGetterMixedInSetter(int value) {}
+  void set extendedFieldMixedInSetter(int value) {}
+  final String extendedSetterMixedInField = '';
+  String get extendedSetterMixedInGetter => '';
+
+  String get mixedInGetterDeclaredField => '';
+  String get mixedInGetterImplementedField => '';
+
+  String get mixedInGetterDeclaredSetter => '';
+  String get mixedInGetterImplementedSetter => '';
+
+  final String mixedInFieldDeclaredSetter = '';
+  final String mixedInFieldImplementedSetter = '';
+
+  void set mixedInSetterDeclaredField(int value) {}
+  void set mixedInSetterImplementedField(int value) {}
+
+  void set mixedInSetterDeclaredGetter(int value) {}
+  void set mixedInSetterImplementedGetter(int value) {}
+}
+
+abstract class Interface1 {
+  int extendedGetterImplementedField = 0;
+  void set extendedGetterImplementedSetter(int value) {}
+  void set extendedFieldImplementedSetter(int value) {}
+  final String extendedSetterImplementedField = '';
+  String get extendedSetterImplementedGetter => '';
+
+  int mixedInGetterImplementedField = 0;
+  void set mixedInGetterImplementedSetter(int value) {}
+  void set mixedInFieldImplementedSetter(int value) {}
+  final String mixedInSetterImplementedField = '';
+  String get mixedInSetterImplementedGetter => '';
+
+  String get implementedGetterDeclaredField => '';
+  String get implementedGetterImplementedField => '';
+
+  String get implementedGetterDeclaredSetter => '';
+  String get implementedGetterImplementedSetter => '';
+
+  final String implementedFieldDeclaredSetter = '';
+  final String implementedFieldImplementedSetter = '';
+
+  void set implementedSetterDeclaredField(int value) {}
+  void set implementedSetterImplementedField(int value) {}
+
+  void set implementedSetterDeclaredGetter(int value) {}
+  void set implementedSetterImplementedGetter(int value) {}
+}
+
+abstract class Interface2 {
+  int implementedGetterImplementedField = 0;
+  void set implementedGetterImplementedSetter(int value) {}
+  void set implementedFieldImplementedSetter(int value) {}
+  final String implementedSetterImplementedField = '';
+  String get implementedSetterImplementedGetter => '';
+}
+
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  int extendedGetterDeclaredField = 0;
+  void set extendedGetterDeclaredSetter(int value) {}
+  void set extendedFieldDeclaredSetter(int value) {}
+  final String extendedSetterDeclaredField = '';
+  String get extendedSetterDeclaredGetter => '';
+
+  int mixedInGetterDeclaredField = 0;
+  void set mixedInGetterDeclaredSetter(int value) {}
+  void set mixedInFieldDeclaredSetter(int value) {}
+  final String mixedInSetterDeclaredField = '';
+  String get mixedInSetterDeclaredGetter => '';
+
+  int implementedGetterDeclaredField = 0;
+  void set implementedGetterDeclaredSetter(int value) {}
+  void set implementedFieldDeclaredSetter(int value) {}
+  final String implementedSetterDeclaredField = '';
+  String get implementedSetterDeclaredGetter => '';
+
+  String get declaredGetterDeclaredSetter => '';
+  void set declaredGetterDeclaredSetter(int value) {}
+
+  final String declaredFieldDeclaredSetter = '';
+  void set declaredFieldDeclaredSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..c0e7660
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline.expect
@@ -0,0 +1,92 @@
+abstract class Super {
+  String get extendedGetterDeclaredField => '';
+  String get extendedGetterMixedInField => '';
+  String get extendedGetterImplementedField => '';
+  String get extendedGetterDeclaredSetter => '';
+  String get extendedGetterMixedInSetter => '';
+  String get extendedGetterImplementedSetter => '';
+  final String extendedFieldDeclaredSetter = '';
+  final String extendedFieldMixedInSetter = '';
+  final String extendedFieldImplementedSetter = '';
+  void set extendedSetterDeclaredField(int value) {}
+  void set extendedSetterMixedInField(int value) {}
+  void set extendedSetterImplementedField(int value) {}
+  void set extendedSetterDeclaredGetter(int value) {}
+  void set extendedSetterMixedInGetter(int value) {}
+  void set extendedSetterImplementedGetter(int value) {}
+}
+
+abstract class Mixin {
+  int extendedGetterMixedInField = 0;
+  void set extendedGetterMixedInSetter(int value) {}
+  void set extendedFieldMixedInSetter(int value) {}
+  final String extendedSetterMixedInField = '';
+  String get extendedSetterMixedInGetter => '';
+  String get mixedInGetterDeclaredField => '';
+  String get mixedInGetterImplementedField => '';
+  String get mixedInGetterDeclaredSetter => '';
+  String get mixedInGetterImplementedSetter => '';
+  final String mixedInFieldDeclaredSetter = '';
+  final String mixedInFieldImplementedSetter = '';
+  void set mixedInSetterDeclaredField(int value) {}
+  void set mixedInSetterImplementedField(int value) {}
+  void set mixedInSetterDeclaredGetter(int value) {}
+  void set mixedInSetterImplementedGetter(int value) {}
+}
+
+abstract class Interface1 {
+  int extendedGetterImplementedField = 0;
+  void set extendedGetterImplementedSetter(int value) {}
+  void set extendedFieldImplementedSetter(int value) {}
+  final String extendedSetterImplementedField = '';
+  String get extendedSetterImplementedGetter => '';
+  int mixedInGetterImplementedField = 0;
+  void set mixedInGetterImplementedSetter(int value) {}
+  void set mixedInFieldImplementedSetter(int value) {}
+  final String mixedInSetterImplementedField = '';
+  String get mixedInSetterImplementedGetter => '';
+  String get implementedGetterDeclaredField => '';
+  String get implementedGetterImplementedField => '';
+  String get implementedGetterDeclaredSetter => '';
+  String get implementedGetterImplementedSetter => '';
+  final String implementedFieldDeclaredSetter = '';
+  final String implementedFieldImplementedSetter = '';
+  void set implementedSetterDeclaredField(int value) {}
+  void set implementedSetterImplementedField(int value) {}
+  void set implementedSetterDeclaredGetter(int value) {}
+  void set implementedSetterImplementedGetter(int value) {}
+}
+
+abstract class Interface2 {
+  int implementedGetterImplementedField = 0;
+  void set implementedGetterImplementedSetter(int value) {}
+  void set implementedFieldImplementedSetter(int value) {}
+  final String implementedSetterImplementedField = '';
+  String get implementedSetterImplementedGetter => '';
+}
+
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  int extendedGetterDeclaredField = 0;
+  void set extendedGetterDeclaredSetter(int value) {}
+  void set extendedFieldDeclaredSetter(int value) {}
+  final String extendedSetterDeclaredField = '';
+  String get extendedSetterDeclaredGetter => '';
+  int mixedInGetterDeclaredField = 0;
+  void set mixedInGetterDeclaredSetter(int value) {}
+  void set mixedInFieldDeclaredSetter(int value) {}
+  final String mixedInSetterDeclaredField = '';
+  String get mixedInSetterDeclaredGetter => '';
+  int implementedGetterDeclaredField = 0;
+  void set implementedGetterDeclaredSetter(int value) {}
+  void set implementedFieldDeclaredSetter(int value) {}
+  final String implementedSetterDeclaredField = '';
+  String get implementedSetterDeclaredGetter => '';
+  String get declaredGetterDeclaredSetter => '';
+  void set declaredGetterDeclaredSetter(int value) {}
+  final String declaredFieldDeclaredSetter = '';
+  void set declaredFieldDeclaredSetter(int value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ae0e79d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,92 @@
+abstract class Class extends Super
+    with Mixin
+    implements Interface1, Interface2 {
+  String get declaredGetterDeclaredSetter => '';
+  String get extendedSetterDeclaredGetter => '';
+  String get implementedSetterDeclaredGetter => '';
+  String get mixedInSetterDeclaredGetter => '';
+  final String declaredFieldDeclaredSetter = '';
+  final String extendedSetterDeclaredField = '';
+  final String implementedSetterDeclaredField = '';
+  final String mixedInSetterDeclaredField = '';
+  int extendedGetterDeclaredField = 0;
+  int implementedGetterDeclaredField = 0;
+  int mixedInGetterDeclaredField = 0;
+  void set declaredFieldDeclaredSetter(int value) {}
+  void set declaredGetterDeclaredSetter(int value) {}
+  void set extendedFieldDeclaredSetter(int value) {}
+  void set extendedGetterDeclaredSetter(int value) {}
+  void set implementedFieldDeclaredSetter(int value) {}
+  void set implementedGetterDeclaredSetter(int value) {}
+  void set mixedInFieldDeclaredSetter(int value) {}
+  void set mixedInGetterDeclaredSetter(int value) {}
+}
+
+abstract class Interface1 {
+  String get extendedSetterImplementedGetter => '';
+  String get implementedGetterDeclaredField => '';
+  String get implementedGetterDeclaredSetter => '';
+  String get implementedGetterImplementedField => '';
+  String get implementedGetterImplementedSetter => '';
+  String get mixedInSetterImplementedGetter => '';
+  final String extendedSetterImplementedField = '';
+  final String implementedFieldDeclaredSetter = '';
+  final String implementedFieldImplementedSetter = '';
+  final String mixedInSetterImplementedField = '';
+  int extendedGetterImplementedField = 0;
+  int mixedInGetterImplementedField = 0;
+  void set extendedFieldImplementedSetter(int value) {}
+  void set extendedGetterImplementedSetter(int value) {}
+  void set implementedSetterDeclaredField(int value) {}
+  void set implementedSetterDeclaredGetter(int value) {}
+  void set implementedSetterImplementedField(int value) {}
+  void set implementedSetterImplementedGetter(int value) {}
+  void set mixedInFieldImplementedSetter(int value) {}
+  void set mixedInGetterImplementedSetter(int value) {}
+}
+
+abstract class Interface2 {
+  String get implementedSetterImplementedGetter => '';
+  final String implementedSetterImplementedField = '';
+  int implementedGetterImplementedField = 0;
+  void set implementedFieldImplementedSetter(int value) {}
+  void set implementedGetterImplementedSetter(int value) {}
+}
+
+abstract class Mixin {
+  String get extendedSetterMixedInGetter => '';
+  String get mixedInGetterDeclaredField => '';
+  String get mixedInGetterDeclaredSetter => '';
+  String get mixedInGetterImplementedField => '';
+  String get mixedInGetterImplementedSetter => '';
+  final String extendedSetterMixedInField = '';
+  final String mixedInFieldDeclaredSetter = '';
+  final String mixedInFieldImplementedSetter = '';
+  int extendedGetterMixedInField = 0;
+  void set extendedFieldMixedInSetter(int value) {}
+  void set extendedGetterMixedInSetter(int value) {}
+  void set mixedInSetterDeclaredField(int value) {}
+  void set mixedInSetterDeclaredGetter(int value) {}
+  void set mixedInSetterImplementedField(int value) {}
+  void set mixedInSetterImplementedGetter(int value) {}
+}
+
+abstract class Super {
+  String get extendedGetterDeclaredField => '';
+  String get extendedGetterDeclaredSetter => '';
+  String get extendedGetterImplementedField => '';
+  String get extendedGetterImplementedSetter => '';
+  String get extendedGetterMixedInField => '';
+  String get extendedGetterMixedInSetter => '';
+  final String extendedFieldDeclaredSetter = '';
+  final String extendedFieldImplementedSetter = '';
+  final String extendedFieldMixedInSetter = '';
+  void set extendedSetterDeclaredField(int value) {}
+  void set extendedSetterDeclaredGetter(int value) {}
+  void set extendedSetterImplementedField(int value) {}
+  void set extendedSetterImplementedGetter(int value) {}
+  void set extendedSetterMixedInField(int value) {}
+  void set extendedSetterMixedInGetter(int value) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..613c55c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart.weak.expect
@@ -0,0 +1,559 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
+//   void set extendedSetterMixedInField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
+//   void set extendedSetterMixedInGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
+//   String get extendedGetterMixedInSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
+//   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'.
+// 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: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'.
+//   final String extendedSetterDeclaredField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:18:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredField'.
+//   void set extendedSetterDeclaredField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:94:14: Error: The type 'String' of the getter 'Class.extendedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterDeclaredGetter'.
+//   String get extendedSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:22:12: Context: This is the declaration of the setter 'Super.extendedSetterDeclaredGetter'.
+//   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 = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:100:14: Error: The type 'String' of the getter 'Class.mixedInSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
+//   String get mixedInSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterDeclaredGetter'.
+// 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 = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:72:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredField'.
+//   void set implementedSetterDeclaredField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:106:14: Error: The type 'String' of the getter 'Class.implementedSetterDeclaredGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterDeclaredGetter'.
+//   String get implementedSetterDeclaredGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:75:12: Context: This is the declaration of the setter 'Interface1.implementedSetterDeclaredGetter'.
+//   void set implementedSetterDeclaredGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:108:14: Error: The type 'String' of the getter 'Class.declaredGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredGetterDeclaredSetter'.
+//   String get declaredGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:109:12: Context: This is the declaration of the setter 'Class.declaredGetterDeclaredSetter'.
+//   void set declaredGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:111:16: Error: The type 'String' of the getter 'Class.declaredFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.declaredFieldDeclaredSetter'.
+//   final String declaredFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:112:12: Context: This is the declaration of the setter 'Class.declaredFieldDeclaredSetter'.
+//   void set declaredFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:91:12: Error: The type 'String' of the inherited getter 'Super.extendedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedGetterDeclaredSetter'.
+//   void set extendedGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:10:14: Context: This is the declaration of the getter 'Super.extendedGetterDeclaredSetter'.
+//   String get extendedGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:92:12: Error: The type 'String' of the inherited field 'Super.extendedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.extendedFieldDeclaredSetter'.
+//   void set extendedFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:14:16: Context: This is the declaration of the field 'Super.extendedFieldDeclaredSetter'.
+//   final String extendedFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:97:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInGetterDeclaredSetter'.
+//   void set mixedInGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterDeclaredSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:98:12: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.mixedInFieldDeclaredSetter'.
+//   void set mixedInFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldDeclaredSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:103:12: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedGetterDeclaredSetter'.
+//   void set implementedGetterDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:66:14: Context: This is the declaration of the getter 'Interface1.implementedGetterDeclaredSetter'.
+//   String get implementedGetterDeclaredSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:104:12: Error: The type 'String' of the inherited field 'Interface1.implementedFieldDeclaredSetter' is not a subtype of the type 'int' of the setter 'Class.implementedFieldDeclaredSetter'.
+//   void set implementedFieldDeclaredSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:69:16: Context: This is the declaration of the field 'Interface1.implementedFieldDeclaredSetter'.
+//   final String implementedFieldDeclaredSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:19:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInField'.
+//   void set extendedSetterMixedInField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.extendedSetterMixedInGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.extendedSetterMixedInGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:23:12: Context: This is the declaration of the setter 'Super.extendedSetterMixedInGetter'.
+//   void set extendedSetterMixedInGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'Mixin.mixedInGetterImplementedField' with incompatible signatures.
+// 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:57:7: Context: This is one of the overridden members.
+//   int mixedInGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:57:7: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedField'.
+//   int mixedInGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:58:12: Context: This is the declaration of the setter 'Interface1.mixedInGetterImplementedSetter'.
+//   void set mixedInGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super with Mixin.mixedInFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.mixedInFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the getter 'Super with Mixin.mixedInFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:59:12: Context: This is the declaration of the setter 'Interface1.mixedInFieldImplementedSetter'.
+//   void set mixedInFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:11:14: Context: This is the declaration of the getter 'Super.extendedGetterMixedInSetter'.
+//   String get extendedGetterMixedInSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedGetterMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldMixedInSetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:15:16: Context: This is the declaration of the field 'Super.extendedFieldMixedInSetter'.
+//   final String extendedFieldMixedInSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.extendedFieldMixedInSetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'extendedGetterImplementedField' with incompatible signatures.
+// Try adding a declaration of 'extendedGetterImplementedField' to 'Class'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is one of the overridden members.
+//   String get extendedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is one of the overridden members.
+//   int extendedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:8:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedField'.
+//   String get extendedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:51:7: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedField'.
+//   int extendedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Super.extendedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:12:14: Context: This is the declaration of the getter 'Super.extendedGetterImplementedSetter'.
+//   String get extendedGetterImplementedSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:52:12: Context: This is the declaration of the setter 'Interface1.extendedGetterImplementedSetter'.
+//   void set extendedGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Super.extendedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.extendedFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:16:16: Context: This is the declaration of the field 'Super.extendedFieldImplementedSetter'.
+//   final String extendedFieldImplementedSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:53:12: Context: This is the declaration of the setter 'Interface1.extendedFieldImplementedSetter'.
+//   void set extendedFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.mixedInSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:60:16: Context: This is the declaration of the field 'Interface1.mixedInSetterImplementedField'.
+//   final String mixedInSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedField'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.mixedInSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super with Mixin.mixedInSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:61:14: Context: This is the declaration of the getter 'Interface1.mixedInSetterImplementedGetter'.
+//   String get mixedInSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Context: This is the declaration of the setter 'Super with Mixin.mixedInSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^^^^^^^^^^^^^^^^^^^^...
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.extendedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:54:16: Context: This is the declaration of the field 'Interface1.extendedSetterImplementedField'.
+//   final String extendedSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:20:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedField'.
+//   void set extendedSetterImplementedField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.extendedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Super.extendedSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:55:14: Context: This is the declaration of the getter 'Interface1.extendedSetterImplementedGetter'.
+//   String get extendedSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:24:12: Context: This is the declaration of the setter 'Super.extendedSetterImplementedGetter'.
+//   void set extendedSetterImplementedGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: Class 'Class' inherits multiple members named 'implementedGetterImplementedField' with incompatible signatures.
+// Try adding a declaration of 'implementedGetterImplementedField' to 'Class'.
+// abstract class Class extends Super
+//                ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is one of the overridden members.
+//   String get implementedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is one of the overridden members.
+//   int implementedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:64:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedField'.
+//   String get implementedGetterImplementedField => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:80:7: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedField'.
+//   int implementedGetterImplementedField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface1.implementedGetterImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedGetterImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:67:14: Context: This is the declaration of the getter 'Interface1.implementedGetterImplementedSetter'.
+//   String get implementedGetterImplementedSetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:81:12: Context: This is the declaration of the setter 'Interface2.implementedGetterImplementedSetter'.
+//   void set implementedGetterImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface1.implementedFieldImplementedSetter' is not a subtype of the type 'int' of the inherited setter 'Interface2.implementedFieldImplementedSetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:70:16: Context: This is the declaration of the field 'Interface1.implementedFieldImplementedSetter'.
+//   final String implementedFieldImplementedSetter = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:82:12: Context: This is the declaration of the setter 'Interface2.implementedFieldImplementedSetter'.
+//   void set implementedFieldImplementedSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited field 'Interface2.implementedSetterImplementedField' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedField'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:83:16: Context: This is the declaration of the field 'Interface2.implementedSetterImplementedField'.
+//   final String implementedSetterImplementedField = '';
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:73:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedField'.
+//   void set implementedSetterImplementedField(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:87:16: Error: The type 'String' of the inherited getter 'Interface2.implementedSetterImplementedGetter' is not a subtype of the type 'int' of the inherited setter 'Interface1.implementedSetterImplementedGetter'.
+// abstract class Class extends Super
+//                ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:84:14: Context: This is the declaration of the getter 'Interface2.implementedSetterImplementedGetter'.
+//   String get implementedSetterImplementedGetter => '';
+//              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/getter_setter.dart:76:12: Context: This is the declaration of the setter 'Interface1.implementedSetterImplementedGetter'.
+//   void set implementedSetterImplementedGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  final field core::String extendedFieldDeclaredSetter = "";
+  final field core::String extendedFieldMixedInSetter = "";
+  final field core::String extendedFieldImplementedSetter = "";
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedGetterDeclaredField() → core::String
+    return "";
+  get extendedGetterMixedInField() → core::String
+    return "";
+  get extendedGetterImplementedField() → core::String
+    return "";
+  get extendedGetterDeclaredSetter() → core::String
+    return "";
+  get extendedGetterMixedInSetter() → core::String
+    return "";
+  get extendedGetterImplementedSetter() → core::String
+    return "";
+  set extendedSetterDeclaredField(core::int value) → void {}
+  set extendedSetterMixedInField(core::int value) → void {}
+  set extendedSetterImplementedField(core::int value) → void {}
+  set extendedSetterDeclaredGetter(core::int value) → void {}
+  set extendedSetterMixedInGetter(core::int value) → void {}
+  set extendedSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Mixin extends core::Object {
+  field core::int extendedGetterMixedInField = 0;
+  final field core::String extendedSetterMixedInField = "";
+  final field core::String mixedInFieldDeclaredSetter = "";
+  final field core::String mixedInFieldImplementedSetter = "";
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  set extendedGetterMixedInSetter(core::int value) → void {}
+  set extendedFieldMixedInSetter(core::int value) → void {}
+  get extendedSetterMixedInGetter() → core::String
+    return "";
+  get mixedInGetterDeclaredField() → core::String
+    return "";
+  get mixedInGetterImplementedField() → core::String
+    return "";
+  get mixedInGetterDeclaredSetter() → core::String
+    return "";
+  get mixedInGetterImplementedSetter() → core::String
+    return "";
+  set mixedInSetterDeclaredField(core::int value) → void {}
+  set mixedInSetterImplementedField(core::int value) → void {}
+  set mixedInSetterDeclaredGetter(core::int value) → void {}
+  set mixedInSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Interface1 extends core::Object {
+  field core::int extendedGetterImplementedField = 0;
+  final field core::String extendedSetterImplementedField = "";
+  field core::int mixedInGetterImplementedField = 0;
+  final field core::String mixedInSetterImplementedField = "";
+  final field core::String implementedFieldDeclaredSetter = "";
+  final field core::String implementedFieldImplementedSetter = "";
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set extendedGetterImplementedSetter(core::int value) → void {}
+  set extendedFieldImplementedSetter(core::int value) → void {}
+  get extendedSetterImplementedGetter() → core::String
+    return "";
+  set mixedInGetterImplementedSetter(core::int value) → void {}
+  set mixedInFieldImplementedSetter(core::int value) → void {}
+  get mixedInSetterImplementedGetter() → core::String
+    return "";
+  get implementedGetterDeclaredField() → core::String
+    return "";
+  get implementedGetterImplementedField() → core::String
+    return "";
+  get implementedGetterDeclaredSetter() → core::String
+    return "";
+  get implementedGetterImplementedSetter() → core::String
+    return "";
+  set implementedSetterDeclaredField(core::int value) → void {}
+  set implementedSetterImplementedField(core::int value) → void {}
+  set implementedSetterDeclaredGetter(core::int value) → void {}
+  set implementedSetterImplementedGetter(core::int value) → void {}
+}
+abstract class Interface2 extends core::Object {
+  field core::int implementedGetterImplementedField = 0;
+  final field core::String implementedSetterImplementedField = "";
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementedGetterImplementedSetter(core::int value) → void {}
+  set implementedFieldImplementedSetter(core::int value) → void {}
+  get implementedSetterImplementedGetter() → core::String
+    return "";
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInGetterDeclaredField() → core::String
+    return super.{self::Mixin::mixedInGetterDeclaredField};
+  mixin-super-stub set mixedInSetterDeclaredField(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredField} = value;
+  mixin-super-stub get mixedInGetterDeclaredSetter() → core::String
+    return super.{self::Mixin::mixedInGetterDeclaredSetter};
+  mixin-super-stub get mixedInFieldDeclaredSetter() → core::String
+    return super.{self::Mixin::mixedInFieldDeclaredSetter};
+  mixin-super-stub set extendedGetterMixedInField(core::int value) → void
+    return super.{self::Mixin::extendedGetterMixedInField} = value;
+  mixin-super-stub get extendedSetterMixedInField() → core::String
+    return super.{self::Mixin::extendedSetterMixedInField};
+  mixin-super-stub get extendedSetterMixedInGetter() → core::String
+    return super.{self::Mixin::extendedSetterMixedInGetter};
+  mixin-super-stub set extendedGetterMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedGetterMixedInSetter} = value;
+  mixin-super-stub set extendedFieldMixedInSetter(core::int value) → void
+    return super.{self::Mixin::extendedFieldMixedInSetter} = value;
+  mixin-super-stub set mixedInSetterDeclaredGetter(core::int value) → void
+    return super.{self::Mixin::mixedInSetterDeclaredGetter} = value;
+  mixin-super-stub get mixedInGetterImplementedField() → core::String
+    return super.{self::Mixin::mixedInGetterImplementedField};
+  mixin-super-stub get mixedInGetterImplementedSetter() → core::String
+    return super.{self::Mixin::mixedInGetterImplementedSetter};
+  mixin-super-stub get mixedInFieldImplementedSetter() → core::String
+    return super.{self::Mixin::mixedInFieldImplementedSetter};
+  mixin-super-stub set mixedInSetterImplementedField(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedField} = value;
+  mixin-super-stub set mixedInSetterImplementedGetter(core::int value) → void
+    return super.{self::Mixin::mixedInSetterImplementedGetter} = value;
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
+  field core::int extendedGetterDeclaredField = 0;
+  final field core::String extendedSetterDeclaredField = "";
+  field core::int mixedInGetterDeclaredField = 0;
+  final field core::String mixedInSetterDeclaredField = "";
+  field core::int implementedGetterDeclaredField = 0;
+  final field core::String implementedSetterDeclaredField = "";
+  final field core::String declaredFieldDeclaredSetter = "";
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  set extendedGetterDeclaredSetter(core::int value) → void {}
+  set extendedFieldDeclaredSetter(core::int value) → void {}
+  get extendedSetterDeclaredGetter() → core::String
+    return "";
+  set mixedInGetterDeclaredSetter(core::int value) → void {}
+  set mixedInFieldDeclaredSetter(core::int value) → void {}
+  get mixedInSetterDeclaredGetter() → core::String
+    return "";
+  set implementedGetterDeclaredSetter(core::int value) → void {}
+  set implementedFieldDeclaredSetter(core::int value) → void {}
+  get implementedSetterDeclaredGetter() → core::String
+    return "";
+  get declaredGetterDeclaredSetter() → core::String
+    return "";
+  set declaredGetterDeclaredSetter(core::int value) → void {}
+  set declaredFieldDeclaredSetter(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart
new file mode 100644
index 0000000..387a7b4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart
@@ -0,0 +1,35 @@
+// 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 {
+  int implementMultipleField = 0;
+
+  int declareConcreteImplementMultipleField = 0;
+
+  int declareAbstractImplementMultipleField = 0;
+}
+
+class Interface2 {
+  int implementMultipleField = 0;
+
+  int declareConcreteImplementMultipleField = 0;
+
+  int declareAbstractImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  int declareConcreteImplementMultipleField = 0;
+
+  abstract int declareAbstractImplementMultipleField;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  int declareConcreteImplementMultipleField = 0;
+
+  abstract int declareAbstractImplementMultipleField;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline.expect
new file mode 100644
index 0000000..21421e9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Interface1 {
+  int implementMultipleField = 0;
+  int declareConcreteImplementMultipleField = 0;
+  int declareAbstractImplementMultipleField = 0;
+}
+
+class Interface2 {
+  int implementMultipleField = 0;
+  int declareConcreteImplementMultipleField = 0;
+  int declareAbstractImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  int declareConcreteImplementMultipleField = 0;
+  abstract int declareAbstractImplementMultipleField;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  int declareConcreteImplementMultipleField = 0;
+  abstract int declareAbstractImplementMultipleField;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..6b7f513
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+abstract class AbstractClass implements Interface1, Interface2 {
+  abstract int declareAbstractImplementMultipleField;
+  int declareConcreteImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  abstract int declareAbstractImplementMultipleField;
+  int declareConcreteImplementMultipleField = 0;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  int declareAbstractImplementMultipleField = 0;
+  int declareConcreteImplementMultipleField = 0;
+  int implementMultipleField = 0;
+}
+
+class Interface2 {
+  int declareAbstractImplementMultipleField = 0;
+  int declareConcreteImplementMultipleField = 0;
+  int implementMultipleField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..46a2aa3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.expect
@@ -0,0 +1,97 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - ConcreteClass.declareAbstractImplementMultipleField=
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField=' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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=
+// 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 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..46a2aa3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart.weak.transformed.expect
@@ -0,0 +1,97 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - ConcreteClass.declareAbstractImplementMultipleField=
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_field.dart:24:16: Context: 'ConcreteClass.declareAbstractImplementMultipleField=' is defined here.
+//   abstract int declareAbstractImplementMultipleField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:7: Context: 'Interface2.implementMultipleField' is defined here.
+//   int implementMultipleField = 0;
+//       ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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=
+// 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 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;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  field core::int implementMultipleField = 0;
+  field core::int declareConcreteImplementMultipleField = 0;
+  field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+  abstract set declareAbstractImplementMultipleField(core::int #externalFieldValue) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart
new file mode 100644
index 0000000..3e8c0f1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart
@@ -0,0 +1,35 @@
+// 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 {
+  final int implementMultipleField = 0;
+
+  final int declareConcreteImplementMultipleField = 0;
+
+  final int declareAbstractImplementMultipleField = 0;
+}
+
+class Interface2 {
+  final int implementMultipleField = 0;
+
+  final int declareConcreteImplementMultipleField = 0;
+
+  final int declareAbstractImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  final int declareConcreteImplementMultipleField = 0;
+
+  abstract final int declareAbstractImplementMultipleField;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  final int declareConcreteImplementMultipleField = 0;
+
+  abstract final int declareAbstractImplementMultipleField;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..a8edcbd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Interface1 {
+  final int implementMultipleField = 0;
+  final int declareConcreteImplementMultipleField = 0;
+  final int declareAbstractImplementMultipleField = 0;
+}
+
+class Interface2 {
+  final int implementMultipleField = 0;
+  final int declareConcreteImplementMultipleField = 0;
+  final int declareAbstractImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  final int declareConcreteImplementMultipleField = 0;
+  abstract final int declareAbstractImplementMultipleField;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  final int declareConcreteImplementMultipleField = 0;
+  abstract final int declareAbstractImplementMultipleField;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c086ea9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+abstract class AbstractClass implements Interface1, Interface2 {
+  abstract final int declareAbstractImplementMultipleField;
+  final int declareConcreteImplementMultipleField = 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  abstract final int declareAbstractImplementMultipleField;
+  final int declareConcreteImplementMultipleField = 0;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  final int declareAbstractImplementMultipleField = 0;
+  final int declareConcreteImplementMultipleField = 0;
+  final int implementMultipleField = 0;
+}
+
+class Interface2 {
+  final int declareAbstractImplementMultipleField = 0;
+  final int declareConcreteImplementMultipleField = 0;
+  final int implementMultipleField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..eef1c6c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:24:22: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract final int declareAbstractImplementMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..eef1c6c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart.weak.transformed.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleField
+//  - Interface1.implementMultipleField
+//  - Interface2.implementMultipleField
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_final_field.dart:24:22: Context: 'ConcreteClass.declareAbstractImplementMultipleField' is defined here.
+//   abstract final int declareAbstractImplementMultipleField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:13: Context: 'Interface2.implementMultipleField' is defined here.
+//   final int implementMultipleField = 0;
+//             ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+}
+class Interface2 extends core::Object {
+  final field core::int implementMultipleField = 0;
+  final field core::int declareConcreteImplementMultipleField = 0;
+  final field core::int declareAbstractImplementMultipleField = 0;
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  final field core::int declareConcreteImplementMultipleField = 0;
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  abstract get declareAbstractImplementMultipleField() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart
new file mode 100644
index 0000000..45d0d3c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart
@@ -0,0 +1,35 @@
+// 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 {
+  int get implementMultipleGetter => 0;
+
+  int get declareConcreteImplementMultipleGetter => 0;
+
+  int get declareAbstractImplementMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get implementMultipleGetter => 0;
+
+  int get declareConcreteImplementMultipleGetter => 0;
+
+  int get declareAbstractImplementMultipleGetter => 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  int get declareConcreteImplementMultipleGetter => 0;
+
+  int get declareAbstractImplementMultipleGetter;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  int get declareConcreteImplementMultipleGetter => 0;
+
+  int get declareAbstractImplementMultipleGetter;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..4300f58
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Interface1 {
+  int get implementMultipleGetter => 0;
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get declareAbstractImplementMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get implementMultipleGetter => 0;
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get declareAbstractImplementMultipleGetter => 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get declareAbstractImplementMultipleGetter;
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get declareAbstractImplementMultipleGetter;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e805c06
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+abstract class AbstractClass implements Interface1, Interface2 {
+  int get declareAbstractImplementMultipleGetter;
+  int get declareConcreteImplementMultipleGetter => 0;
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  int get declareAbstractImplementMultipleGetter;
+  int get declareConcreteImplementMultipleGetter => 0;
+}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  int get declareAbstractImplementMultipleGetter => 0;
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get implementMultipleGetter => 0;
+}
+
+class Interface2 {
+  int get declareAbstractImplementMultipleGetter => 0;
+  int get declareConcreteImplementMultipleGetter => 0;
+  int get implementMultipleGetter => 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..0083177
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleGetter
+//  - Interface1.implementMultipleGetter
+//  - Interface2.implementMultipleGetter
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:24:11: Context: 'ConcreteClass.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..0083177
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart.weak.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleGetter
+//  - Interface1.implementMultipleGetter
+//  - Interface2.implementMultipleGetter
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_getter.dart:24:11: Context: 'ConcreteClass.declareAbstractImplementMultipleGetter' is defined here.
+//   int get declareAbstractImplementMultipleGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:14:11: Context: 'Interface2.implementMultipleGetter' is defined here.
+//   int get implementMultipleGetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  get implementMultipleGetter() → core::int
+    return 0;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  get declareAbstractImplementMultipleGetter() → core::int
+    return 0;
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  get declareConcreteImplementMultipleGetter() → core::int
+    return 0;
+  abstract get declareAbstractImplementMultipleGetter() → core::int;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart
new file mode 100644
index 0000000..87f4bd8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart
@@ -0,0 +1,35 @@
+// 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 {
+  void implementMultipleMethod() {}
+
+  void declareConcreteImplementMultipleMethod() {}
+
+  void declareAbstractImplementMultipleMethod() {}
+}
+
+class Interface2 {
+  void implementMultipleMethod() {}
+
+  void declareConcreteImplementMultipleMethod() {}
+
+  void declareAbstractImplementMultipleMethod() {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void declareConcreteImplementMultipleMethod() {}
+
+  void declareAbstractImplementMultipleMethod();
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  void declareConcreteImplementMultipleMethod() {}
+
+  void declareAbstractImplementMultipleMethod();
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline.expect
new file mode 100644
index 0000000..48b2bf4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Interface1 {
+  void implementMultipleMethod() {}
+  void declareConcreteImplementMultipleMethod() {}
+  void declareAbstractImplementMultipleMethod() {}
+}
+
+class Interface2 {
+  void implementMultipleMethod() {}
+  void declareConcreteImplementMultipleMethod() {}
+  void declareAbstractImplementMultipleMethod() {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void declareConcreteImplementMultipleMethod() {}
+  void declareAbstractImplementMultipleMethod();
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  void declareConcreteImplementMultipleMethod() {}
+  void declareAbstractImplementMultipleMethod();
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..40a8991
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+abstract class AbstractClass implements Interface1, Interface2 {
+  void declareAbstractImplementMultipleMethod();
+  void declareConcreteImplementMultipleMethod() {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void declareAbstractImplementMultipleMethod();
+  void declareConcreteImplementMultipleMethod() {}
+}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void declareAbstractImplementMultipleMethod() {}
+  void declareConcreteImplementMultipleMethod() {}
+  void implementMultipleMethod() {}
+}
+
+class Interface2 {
+  void declareAbstractImplementMultipleMethod() {}
+  void declareConcreteImplementMultipleMethod() {}
+  void implementMultipleMethod() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..3bbc542
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleMethod
+//  - Interface1.implementMultipleMethod
+//  - Interface2.implementMultipleMethod
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:24:8: Context: 'ConcreteClass.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:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..3bbc542
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart.weak.transformed.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleMethod
+//  - Interface1.implementMultipleMethod
+//  - Interface2.implementMultipleMethod
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_method.dart:24:8: Context: 'ConcreteClass.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:14:8: Context: 'Interface2.implementMultipleMethod' is defined here.
+//   void implementMultipleMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+// 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 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();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  method implementMultipleMethod() → void {}
+  method declareConcreteImplementMultipleMethod() → void {}
+  method declareAbstractImplementMultipleMethod() → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  method declareConcreteImplementMultipleMethod() → void {}
+  abstract method declareAbstractImplementMultipleMethod() → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart
new file mode 100644
index 0000000..8c92041
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart
@@ -0,0 +1,35 @@
+// 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 {
+  void set implementMultipleSetter(int i) {}
+
+  void set declareConcreteImplementMultipleSetter(int i) {}
+
+  void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+class Interface2 {
+  void set implementMultipleSetter(int i) {}
+
+  void set declareConcreteImplementMultipleSetter(int i) {}
+
+  void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void set declareConcreteImplementMultipleSetter(int i) {}
+
+  void set declareAbstractImplementMultipleSetter(int i);
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  void set declareConcreteImplementMultipleSetter(int i) {}
+
+  void set declareAbstractImplementMultipleSetter(int i);
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..d429c5f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline.expect
@@ -0,0 +1,25 @@
+class Interface1 {
+  void set implementMultipleSetter(int i) {}
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+class Interface2 {
+  void set implementMultipleSetter(int i) {}
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set declareAbstractImplementMultipleSetter(int i) {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set declareAbstractImplementMultipleSetter(int i);
+}
+
+abstract class AbstractClass implements Interface1, Interface2 {
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set declareAbstractImplementMultipleSetter(int i);
+}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d861905
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,25 @@
+abstract class AbstractClass implements Interface1, Interface2 {
+  void set declareAbstractImplementMultipleSetter(int i);
+  void set declareConcreteImplementMultipleSetter(int i) {}
+}
+
+class ConcreteClass implements Interface1, Interface2 {
+  void set declareAbstractImplementMultipleSetter(int i);
+  void set declareConcreteImplementMultipleSetter(int i) {}
+}
+
+class ConcreteSub extends AbstractClass {}
+
+class Interface1 {
+  void set declareAbstractImplementMultipleSetter(int i) {}
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set implementMultipleSetter(int i) {}
+}
+
+class Interface2 {
+  void set declareAbstractImplementMultipleSetter(int i) {}
+  void set declareConcreteImplementMultipleSetter(int i) {}
+  void set implementMultipleSetter(int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..773632f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleSetter=
+//  - Interface1.implementMultipleSetter=
+//  - Interface2.implementMultipleSetter=
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:24:12: Context: 'ConcreteClass.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:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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=
+// 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 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..773632f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart.weak.transformed.expect
@@ -0,0 +1,83 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - ConcreteClass.declareAbstractImplementMultipleSetter=
+//  - Interface1.implementMultipleSetter=
+//  - Interface2.implementMultipleSetter=
+// 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 ConcreteClass implements Interface1, Interface2 {
+//       ^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:24:12: Context: 'ConcreteClass.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:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
+//   void set implementMultipleSetter(int i) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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=
+// 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 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);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class Interface2 extends core::Object {
+  synthetic constructor •() → self::Interface2
+    : super core::Object::•()
+    ;
+  set implementMultipleSetter(core::int i) → void {}
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  set declareAbstractImplementMultipleSetter(core::int i) → void {}
+}
+class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::ConcreteClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
+  synthetic constructor •() → self::AbstractClass
+    : super core::Object::•()
+    ;
+  set declareConcreteImplementMultipleSetter(core::int i) → void {}
+  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub
+    : super self::AbstractClass::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart
new file mode 100644
index 0000000..1b3c5a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.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.
+
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+// Class doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class Class /* error */ extends LegacyClass implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyClass.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyClass.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyClass.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassQ /* error */ extends LegacyClassQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyClassQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyClassQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyClassQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedIn doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyMixedIn.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedIn.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyMixedIn.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedInQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyMixedInQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedInQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyMixedInQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline.expect
new file mode 100644
index 0000000..cb75a13
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ac77493
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..995b5ba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in.dart.weak.expect
@@ -0,0 +1,488 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// 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'.
+//   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.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'.
+//   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.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'.
+//   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.dart:59:7: Error: Class 'ClassMixedIn' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedIn'.
+// class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+//       ^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart:6:7: Context: This is one of the overridden members.
+//   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 one of the overridden members.
+//   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'.
+//   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.dart:84:7: Error: Class 'ClassMixedInQ' inherits multiple members named 'nullabilityMethod' with incompatible signatures.
+// Try adding a declaration of 'nullabilityMethod' to 'ClassMixedInQ'.
+// 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: This is one of the overridden members.
+//   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 one of the overridden members.
+//   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
+//                         ^
+//
+// 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
+//                               ^
+//
+// 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;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  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 = 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.
+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;
+  }
+  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
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  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 = 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.
+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.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  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.
+    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 = 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.
+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;
+  }
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  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 = 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.
+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;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::Super::nullabilityGetter
+  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 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 {}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  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
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super extends core::Object implements in_2::Super /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int
+    return 0;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int i) → core::int
+    return i;
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int value) → 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 LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ extends core::Object implements in_2::SuperQ /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilityGetter() → core::int?
+    return null;
+  method /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+  set /*isNonNullableByDefault, from org-dartlang-testcase:///in_out_in_lib1.dart */ nullabilitySetter(core::int? value) → 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 LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart
new file mode 100644
index 0000000..62e2d4d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib1.dart
@@ -0,0 +1,21 @@
+// 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 {
+  int nullabilityMethod(int i, {required int j}) => i;
+  int get nullabilityGetter => 0;
+  void set nullabilitySetter(int value) {}
+  int optionalArgumentsMethod(int i) => i;
+}
+
+abstract class SuperExtra {
+  int optionalArgumentsMethod(int i, [int? j]) => i;
+}
+
+abstract class SuperQ {
+  int? nullabilityMethod(int? i, {int? j}) => i;
+  int? get nullabilityGetter => null;
+  void set nullabilitySetter(int? value) {}
+  int? optionalArgumentsMethod(int? i) => i;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.dart
new file mode 100644
index 0000000..30166bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/in_out_in_lib2.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.
+
+// @dart=2.9
+
+import 'in_out_in_lib1.dart';
+
+abstract class LegacyClass extends Super implements SuperExtra {}
+
+abstract class LegacyClassQ extends SuperQ implements SuperExtra {}
+
+abstract class LegacyMixedIn with Super implements SuperExtra {}
+
+abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/test.options b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/test.options
new file mode 100644
index 0000000..c805a19
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_dill_out_in/test.options
@@ -0,0 +1,2 @@
+in_out_in_lib1.dart
+in_out_in_lib2.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart
new file mode 100644
index 0000000..1b3c5a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.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.
+
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+// Class doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class Class /* error */ extends LegacyClass implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyClass.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyClass.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyClass.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassQ /* error */ extends LegacyClassQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyClassQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyClassQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyClassQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedIn doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyMixedIn.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedIn.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyMixedIn.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedInQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyMixedInQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedInQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyMixedInQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline.expect
new file mode 100644
index 0000000..cb75a13
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ac77493
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..d8b7132
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in.dart.weak.expect
@@ -0,0 +1,351 @@
+library /*isNonNullableByDefault*/;
+//
+// 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: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: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
+//                         ^
+//
+// 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
+//                                  ^
+//
+// 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
+//                                  ^
+//
+// 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
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  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 = 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.
+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;
+  }
+  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
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  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 = 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.
+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.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null);
+    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.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i, {core::int? j}) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    this.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod}(null);
+    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.
+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.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  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 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 set nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  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
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super = core::Object with in_2::Super /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
+    return super.{in_2::Super::nullabilityMethod}(i, j: j);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    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
+  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 LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i, {core::int* j = #C1}) → core::int*
+    return super.{in_2::SuperQ::nullabilityMethod}(i, j: j);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    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
+  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 LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i, {required core::int j = #C1}) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i, {core::int? j = #C1}) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart
new file mode 100644
index 0000000..62e2d4d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib1.dart
@@ -0,0 +1,21 @@
+// 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 {
+  int nullabilityMethod(int i, {required int j}) => i;
+  int get nullabilityGetter => 0;
+  void set nullabilitySetter(int value) {}
+  int optionalArgumentsMethod(int i) => i;
+}
+
+abstract class SuperExtra {
+  int optionalArgumentsMethod(int i, [int? j]) => i;
+}
+
+abstract class SuperQ {
+  int? nullabilityMethod(int? i, {int? j}) => i;
+  int? get nullabilityGetter => null;
+  void set nullabilitySetter(int? value) {}
+  int? optionalArgumentsMethod(int? i) => i;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.dart
new file mode 100644
index 0000000..30166bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/in_out_in_lib2.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.
+
+// @dart=2.9
+
+import 'in_out_in_lib1.dart';
+
+abstract class LegacyClass extends Super implements SuperExtra {}
+
+abstract class LegacyClassQ extends SuperQ implements SuperExtra {}
+
+abstract class LegacyMixedIn with Super implements SuperExtra {}
+
+abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/test.options b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/test.options
new file mode 100644
index 0000000..75b6249
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_dill_in/test.options
@@ -0,0 +1 @@
+in_out_in_lib1.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart
new file mode 100644
index 0000000..1b3c5a2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.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.
+
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+// Class doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class Class /* error */ extends LegacyClass implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyClass.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyClass.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyClass.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassQ /* error */ extends LegacyClassQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyClassQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyClassQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyClassQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedIn doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedIn /* error */ extends LegacyMixedIn implements SuperQ {
+  test() {
+    int i;
+    // Valid call to `SuperQ.nullabilityMethod`, returns int?.
+    var v1 = nullabilityMethod(null); // ok
+    // Valid super call to `LegacyMixedIn.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `SuperQ.nullabilityGetter`, return int?.
+    var v2 = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedIn.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Valid write to `SuperQ.nullabilitySetter`.
+    nullabilitySetter = null; // ok
+    // Valid write to `LegacyMixedIn.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+// ClassMixedInQ doesn't implement `SuperExtra.optionalArgumentsMethod`.
+class ClassMixedInQ /* error */ extends LegacyMixedInQ implements Super {
+  test() {
+    int i;
+    // Invalid call to `Super.nullabilityMethod`, returns int!.
+    nullabilityMethod(null); // error
+    // Valid call to `LegacyMixedInQ.nullabilityMethod`, returns int*.
+    i = super.nullabilityMethod(null); // ok
+    // Valid call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = optionalArgumentsMethod(null, null); // ok
+    // Valid super call to `SuperExtra.optionalArgumentsMethod`, returns int*.
+    i = super.optionalArgumentsMethod(null); // ok
+    // Invalid super call to `SuperExtra.optionalArgumentsMethod`.
+    super.optionalArgumentsMethod(null, null); // error
+    // Read of `Super.nullabilityGetter`, return int.
+    i = nullabilityGetter; // ok
+    // Valid read of `LegacyMixedInQ.nullabilityGetter`, return int*.
+    i = super.nullabilityGetter; // ok
+    // Invalid write to `Super.nullabilitySetter`.
+    nullabilitySetter = null; // error
+    // Valid write to `LegacyMixedInQ.nullabilitySetter`.
+    super.nullabilitySetter = null; // ok
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline.expect
new file mode 100644
index 0000000..cb75a13
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ac77493
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.textual_outline_modelled.expect
@@ -0,0 +1,20 @@
+import 'in_out_in_lib1.dart';
+import 'in_out_in_lib2.dart';
+
+class Class extends LegacyClass implements SuperQ {
+  test() {}
+}
+
+class ClassMixedIn extends LegacyMixedIn implements SuperQ {
+  test() {}
+}
+
+class ClassMixedInQ extends LegacyMixedInQ implements Super {
+  test() {}
+}
+
+class ClassQ extends LegacyClassQ implements Super {
+  test() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..fac4e38
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.expect
@@ -0,0 +1,365 @@
+library /*isNonNullableByDefault*/;
+//
+// 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: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: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
+//                         ^
+//
+// 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
+//                                  ^
+//
+// 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
+//                       ^
+//
+// 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
+//                                  ^
+//
+// 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
+//                         ^
+//
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  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 = 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.
+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;
+  }
+  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
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_2::Super::nullabilitySetter
+}
+class ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  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.
+    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 = 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.
+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.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_2::SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_2::SuperQ::nullabilityGetter
+  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 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 set nullabilitySetter(core::int value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+class ClassMixedIn extends in_::LegacyMixedIn implements in_2::SuperQ {
+  synthetic constructor •() → self::ClassMixedIn
+    : super in_::LegacyMixedIn::•()
+    ;
+  method test() → dynamic {
+    core::int i;
+    core::int? v1 = this.{self::ClassMixedIn::nullabilityMethod}(null);
+    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.
+Try removing the extra positional arguments.
+    super.optionalArgumentsMethod(null, null); // error
+                                 ^" in super.{in_::_LegacyMixedIn&Object&Super::optionalArgumentsMethod}(null, null);
+    core::int? v2 = this.{self::ClassMixedIn::nullabilityGetter};
+    i = super.{in_::_LegacyMixedIn&Object&Super::nullabilityGetter};
+    this.{self::ClassMixedIn::nullabilitySetter} = null;
+    super.{in_::_LegacyMixedIn&Object&Super::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int? i) → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int?; -> in_::_LegacyMixedIn&Object&Super::nullabilityGetter
+  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 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 set nullabilitySetter(core::int? value) → void; -> in_::_LegacyMixedIn&Object&Super::nullabilitySetter
+}
+class ClassMixedInQ extends in_::LegacyMixedInQ implements in_2::Super {
+  synthetic constructor •() → self::ClassMixedInQ
+    : super in_::LegacyMixedInQ::•()
+    ;
+  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.
+    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.
+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.
+    nullabilitySetter = null; // error
+                        ^" in null as{TypeError,ForNonNullableByDefault} core::int;
+    super.{in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter} = null;
+  }
+  abstract member-signature method nullabilityMethod(core::int i) → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilityGetter
+  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 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 set nullabilitySetter(core::int value) → void; -> in_::_LegacyMixedInQ&Object&SuperQ::nullabilitySetter
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int i) → core::int
+    return i;
+  get nullabilityGetter() → core::int
+    return 0;
+  set nullabilitySetter(core::int value) → void {}
+  method optionalArgumentsMethod(core::int i) → core::int
+    return i;
+}
+abstract class SuperExtra extends core::Object {
+  synthetic constructor •() → in_2::SuperExtra
+    : super core::Object::•()
+    ;
+  method optionalArgumentsMethod(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method nullabilityMethod(core::int? i) → core::int?
+    return i;
+  get nullabilityGetter() → core::int?
+    return null;
+  set nullabilitySetter(core::int? value) → void {}
+  method optionalArgumentsMethod(core::int? i) → core::int?
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+abstract class LegacyClass extends in_2::Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  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
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::Super::nullabilitySetter
+}
+abstract class LegacyClassQ extends in_2::SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method nullabilityMethod(core::int* i) → core::int*; -> in_2::SuperQ::nullabilityMethod
+  abstract member-signature get nullabilityGetter() → core::int*; -> in_2::SuperQ::nullabilityGetter
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+  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 set nullabilitySetter(core::int* value) → void; -> in_2::SuperQ::nullabilitySetter
+}
+abstract class _LegacyMixedIn&Object&Super = core::Object with in_2::Super /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedIn&Object&Super*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i) → core::int*
+    return super.{in_2::Super::nullabilityMethod}(i);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    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
+  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 LegacyMixedIn extends in_::_LegacyMixedIn&Object&Super implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedIn*
+    : super in_::_LegacyMixedIn&Object&Super::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+abstract class _LegacyMixedInQ&Object&SuperQ = core::Object with in_2::SuperQ /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → in_::_LegacyMixedInQ&Object&SuperQ*
+    : super core::Object::•()
+    ;
+  mixin-super-stub method nullabilityMethod(core::int* i) → core::int*
+    return super.{in_2::SuperQ::nullabilityMethod}(i);
+  mixin-super-stub get nullabilityGetter() → core::int*
+    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
+  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 LegacyMixedInQ extends in_::_LegacyMixedInQ&Object&SuperQ implements in_2::SuperExtra {
+  synthetic constructor •() → in_::LegacyMixedInQ*
+    : super in_::_LegacyMixedInQ&Object&SuperQ::•()
+    ;
+  abstract member-signature method optionalArgumentsMethod(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperExtra::optionalArgumentsMethod
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect
new file mode 100644
index 0000000..551f480
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in.dart.weak.transformed.expect
@@ -0,0 +1,112 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "in_out_in_lib2.dart" as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+import "org-dartlang-testcase:///in_out_in_lib2.dart";
+
+class Class extends in_::LegacyClass implements in_2::SuperQ {
+  synthetic constructor •() → self::Class
+    : super in_::LegacyClass::•()
+    ;
+  abstract member-signature method method(core::int? i) → core::int?; -> in_2::Super::method
+  abstract member-signature method method2(core::int i, [core::int? j = #C1]) → core::int; -> in_2::SuperQ::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
+  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 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 ClassQ extends in_::LegacyClassQ implements in_2::Super {
+  synthetic constructor •() → self::ClassQ
+    : super in_::LegacyClassQ::•()
+    ;
+  abstract member-signature method method(core::int i) → core::int; -> in_2::SuperQ::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
+  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 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 {
+  new self::Class::•().{self::Class::method2}(0, 0);
+}
+
+library /*isNonNullableByDefault*/;
+import self as in_2;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → in_2::Super
+    : super core::Object::•()
+    ;
+  method method(core::int i) → core::int
+    return i;
+  method method2(core::int i) → core::int
+    return i;
+}
+abstract class SuperQ extends core::Object {
+  synthetic constructor •() → in_2::SuperQ
+    : super core::Object::•()
+    ;
+  method method(core::int? i) → core::int?
+    return i;
+  method method2(core::int i, [core::int? j = #C1]) → core::int
+    return i;
+}
+
+library;
+import self as in_;
+import "in_out_in_lib1.dart" as in_2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///in_out_in_lib1.dart";
+
+class LegacyClass extends in_2::Super {
+  synthetic constructor •() → in_::LegacyClass*
+    : super in_2::Super::•()
+    ;
+  abstract member-signature method method(core::int* i) → core::int*; -> in_2::Super::method
+  abstract member-signature method method2(core::int* i) → core::int*; -> in_2::Super::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
+  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 LegacyClassQ extends in_2::SuperQ {
+  synthetic constructor •() → in_::LegacyClassQ*
+    : super in_2::SuperQ::•()
+    ;
+  abstract member-signature method method(core::int* i) → core::int*; -> in_2::SuperQ::method
+  abstract member-signature method method2(core::int* i, [core::int* j = #C1]) → core::int*; -> in_2::SuperQ::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
+  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 = null
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart
new file mode 100644
index 0000000..b182a1b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib1.dart
@@ -0,0 +1,21 @@
+// 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 {
+  int nullabilityMethod(int i) => i;
+  int get nullabilityGetter => 0;
+  void set nullabilitySetter(int value) {}
+  int optionalArgumentsMethod(int i) => i;
+}
+
+abstract class SuperExtra {
+  int optionalArgumentsMethod(int i, [int? j]) => i;
+}
+
+abstract class SuperQ {
+  int? nullabilityMethod(int? i) => i;
+  int? get nullabilityGetter => null;
+  void set nullabilitySetter(int? value) {}
+  int? optionalArgumentsMethod(int? i) => i;
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.dart
new file mode 100644
index 0000000..30166bf
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/in_out_in_lib2.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.
+
+// @dart=2.9
+
+import 'in_out_in_lib1.dart';
+
+abstract class LegacyClass extends Super implements SuperExtra {}
+
+abstract class LegacyClassQ extends SuperQ implements SuperExtra {}
+
+abstract class LegacyMixedIn with Super implements SuperExtra {}
+
+abstract class LegacyMixedInQ with SuperQ implements SuperExtra {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart
new file mode 100644
index 0000000..1a5a9c2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart
@@ -0,0 +1,68 @@
+// 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 {
+  num extendedMethod() => 0;
+}
+
+class Mixin {
+  num mixedInMethod() => 0;
+}
+
+abstract class Interface1 {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+abstract class Interface2 extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassExtends extends Super with Mixin implements Interface1 {}
+
+class ClassExtendsWithNoSuchMethod extends Super
+    with Mixin
+    implements Interface1 {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+}
+
+class ClassImplements implements Interface2 {}
+
+class ClassImplementsWithNoSuchMethod implements Interface2 {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+}
+
+class ClassDeclaresExtends extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresImplementsWithNoSuchMethod implements Super, Mixin {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return super.noSuchMethod(invocation);
+  }
+
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline.expect
new file mode 100644
index 0000000..37ad3f0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline.expect
@@ -0,0 +1,54 @@
+class Super {
+  num extendedMethod() => 0;
+}
+
+class Mixin {
+  num mixedInMethod() => 0;
+}
+
+abstract class Interface1 {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+abstract class Interface2 extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassExtends extends Super with Mixin implements Interface1 {}
+
+class ClassExtendsWithNoSuchMethod extends Super
+    with Mixin
+    implements Interface1 {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class ClassImplements implements Interface2 {}
+
+class ClassImplementsWithNoSuchMethod implements Interface2 {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class ClassDeclaresExtends extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+  @override
+  noSuchMethod(Invocation invocation) {}
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresImplementsWithNoSuchMethod implements Super, Mixin {
+  @override
+  noSuchMethod(Invocation invocation) {}
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..47ed758
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.textual_outline_modelled.expect
@@ -0,0 +1,54 @@
+abstract class Interface1 {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+abstract class Interface2 extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresExtends extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+}
+
+class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class ClassDeclaresImplementsWithNoSuchMethod implements Super, Mixin {
+  int extendedMethod();
+  int mixedInMethod();
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class ClassExtends extends Super with Mixin implements Interface1 {}
+
+class ClassExtendsWithNoSuchMethod extends Super
+    with Mixin
+    implements Interface1 {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class ClassImplements implements Interface2 {}
+
+class ClassImplementsWithNoSuchMethod implements Interface2 {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class Mixin {
+  num mixedInMethod() => 0;
+}
+
+class Super {
+  num extendedMethod() => 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..d5e1037
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.expect
@@ -0,0 +1,253 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+// 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 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: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 {
+//       ^^^^^^^^^^^^^^^^^^^^
+// 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, 'ClassDeclaresExtends.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:44: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 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43: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, 'ClassDeclaresExtends.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:45:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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, 'ClassDeclaresExtendsWithNoSuchMethod.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:54:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48: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, 'ClassDeclaresExtendsWithNoSuchMethod.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:55: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 '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;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethod() → core::num
+    return 0;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _Interface2&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Interface2&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+abstract class Interface2 extends self::_Interface2&Super&Mixin {
+  synthetic constructor •() → self::Interface2
+    : super self::_Interface2&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassExtends extends self::_ClassExtends&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtends
+    : super self::_ClassExtends&Super&Mixin::•()
+    ;
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+abstract class _ClassExtendsWithNoSuchMethod&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassExtendsWithNoSuchMethod extends self::_ClassExtendsWithNoSuchMethod&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtendsWithNoSuchMethod
+    : super self::_ClassExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+class ClassImplements extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplements
+    : super core::Object::•()
+    ;
+}
+class ClassImplementsWithNoSuchMethod extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+abstract class _ClassDeclaresExtends&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassDeclaresExtends extends self::_ClassDeclaresExtends&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtends
+    : super self::_ClassDeclaresExtends&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInMethod() → core::num
+    return super.{self::Mixin::mixedInMethod}();
+}
+class ClassDeclaresExtendsWithNoSuchMethod extends self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtendsWithNoSuchMethod
+    : super self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+class ClassDeclaresImplementsWithNoSuchMethod extends core::Object implements self::Super, self::Mixin {
+  synthetic constructor •() → self::ClassDeclaresImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #mixedInMethod
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C6 = #extendedMethod
+}
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
new file mode 100644
index 0000000..92e7e34
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart.weak.transformed.expect
@@ -0,0 +1,253 @@
+library /*isNonNullableByDefault*/;
+//
+// 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
+// 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 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: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 {
+//       ^^^^^^^^^^^^^^^^^^^^
+// 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, 'ClassDeclaresExtends.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:44: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 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtends' does not conform to its interface.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:43: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, 'ClassDeclaresExtends.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtends extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:45:7: Context: This is the overridden method ('mixedInMethod').
+//   int mixedInMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'extendedMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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, 'ClassDeclaresExtendsWithNoSuchMethod.extendedMethod'.
+// Change to a subtype of 'int'.
+//   num extendedMethod() => 0;
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:54:7: Context: This is the overridden method ('extendedMethod').
+//   int extendedMethod();
+//       ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48:7: Error: The implementation of 'mixedInMethod' in the non-abstract class 'ClassDeclaresExtendsWithNoSuchMethod' does not conform to its interface.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:48: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, 'ClassDeclaresExtendsWithNoSuchMethod.mixedInMethod'.
+// Change to a subtype of 'int'.
+// class ClassDeclaresExtendsWithNoSuchMethod extends Super with Mixin {
+//       ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/inherited_implements.dart:55: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 '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;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethod() → core::num
+    return 0;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → self::Interface1
+    : super core::Object::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _Interface2&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Interface2&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+abstract class Interface2 extends self::_Interface2&Super&Mixin {
+  synthetic constructor •() → self::Interface2
+    : super self::_Interface2&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassExtends&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+class ClassExtends extends self::_ClassExtends&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtends
+    : super self::_ClassExtends&Super&Mixin::•()
+    ;
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+abstract class _ClassExtendsWithNoSuchMethod&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+class ClassExtendsWithNoSuchMethod extends self::_ClassExtendsWithNoSuchMethod&Super&Mixin implements self::Interface1 {
+  synthetic constructor •() → self::ClassExtendsWithNoSuchMethod
+    : super self::_ClassExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract member-signature method mixedInMethod() → core::int; -> self::Interface1::mixedInMethod
+  abstract member-signature method extendedMethod() → core::int; -> self::Interface1::extendedMethod
+}
+class ClassImplements extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplements
+    : super core::Object::•()
+    ;
+}
+class ClassImplementsWithNoSuchMethod extends core::Object implements self::Interface2 {
+  synthetic constructor •() → self::ClassImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+abstract class _ClassDeclaresExtends&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtends&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+class ClassDeclaresExtends extends self::_ClassDeclaresExtends&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtends
+    : super self::_ClassDeclaresExtends&Super&Mixin::•()
+    ;
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+abstract class _ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInMethod() → core::num
+    return 0;
+}
+class ClassDeclaresExtendsWithNoSuchMethod extends self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin {
+  synthetic constructor •() → self::ClassDeclaresExtendsWithNoSuchMethod
+    : super self::_ClassDeclaresExtendsWithNoSuchMethod&Super&Mixin::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  abstract method extendedMethod() → core::int;
+  abstract method mixedInMethod() → core::int;
+}
+class ClassDeclaresImplementsWithNoSuchMethod extends core::Object implements self::Super, self::Mixin {
+  synthetic constructor •() → self::ClassDeclaresImplementsWithNoSuchMethod
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return super.{core::Object::noSuchMethod}(invocation);
+  }
+  no-such-method-forwarder method extendedMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  no-such-method-forwarder method mixedInMethod() → core::int
+    return this.{self::ClassDeclaresImplementsWithNoSuchMethod::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, #C4, core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #mixedInMethod
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C6 = #extendedMethod
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart
new file mode 100644
index 0000000..82718e4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart
@@ -0,0 +1,19 @@
+// 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 'member_signature_lib.dart';
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+abstract class OptOutInterface {}
+
+abstract class ClassImplementsOptOut implements OptOutInterface {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline.expect
new file mode 100644
index 0000000..5c3366c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+// @dart = 2.9
+import 'member_signature_lib.dart';
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+abstract class OptOutInterface {}
+
+abstract class ClassImplementsOptOut implements OptOutInterface {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cbc81d7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.textual_outline_modelled.expect
@@ -0,0 +1,14 @@
+// @dart = 2.9
+import 'member_signature_lib.dart';
+
+abstract class AbstractClass extends Super implements Interface1, Interface2 {}
+
+abstract class ClassImplementsOptOut implements OptOutInterface {}
+
+abstract class OptOutInterface {}
+
+class ConcreteClass extends Super implements Interface1, Interface2 {}
+
+class ConcreteSub extends AbstractClass {}
+
+main() {}
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
new file mode 100644
index 0000000..b334412
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.expect
@@ -0,0 +1,173 @@
+library;
+//
+// 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
+// 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 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.dart:13:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.implementedMethod
+//  - Interface1.implementedMultipleMethod
+//  - Interface2.implementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractMethod
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "member_signature_lib.dart" as mem;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///member_signature_lib.dart";
+
+abstract class AbstractClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::AbstractClass*
+    : 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
+  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 implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub*
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::ConcreteClass*
+    : 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
+  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 implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+abstract class OptOutInterface extends core::Object {
+  synthetic constructor •() → self::OptOutInterface*
+    : 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 ClassImplementsOptOut extends core::Object implements self::OptOutInterface {
+  synthetic constructor •() → self::ClassImplementsOptOut*
+    : 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
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mem;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → mem::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod(core::int i) → void {}
+  abstract method extendedAbstractMethod(core::int i) → void;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedMethod(core::int i) → void;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → mem::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  method extendedAbstractImplementedMethod(core::int i) → void {}
+  method implementedMethod(core::int i) → void {}
+  method implementedMultipleMethod(core::int i) → void {}
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → mem::Interface2
+    : super core::Object::•()
+    ;
+  method implementedMultipleMethod(core::int i) → void {}
+}
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
new file mode 100644
index 0000000..b334412
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature.dart.weak.transformed.expect
@@ -0,0 +1,173 @@
+library;
+//
+// 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
+// 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 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.dart:13:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
+//  - Interface1.implementedMethod
+//  - Interface1.implementedMultipleMethod
+//  - Interface2.implementedMultipleMethod
+//  - Super.extendedAbstractImplementedMethod
+//  - Super.extendedAbstractMethod
+// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
+//       ^^^^^^^^^^^^^
+// 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);
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "member_signature_lib.dart" as mem;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///member_signature_lib.dart";
+
+abstract class AbstractClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::AbstractClass*
+    : 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
+  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 implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+class ConcreteSub extends self::AbstractClass {
+  synthetic constructor •() → self::ConcreteSub*
+    : super self::AbstractClass::•()
+    ;
+}
+class ConcreteClass extends mem::Super implements mem::Interface1, mem::Interface2 {
+  synthetic constructor •() → self::ConcreteClass*
+    : 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
+  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 implementedMethod(core::int* i) → void; -> mem::Interface1::implementedMethod
+  abstract member-signature method implementedMultipleMethod(core::int* i) → void; -> mem::Interface1::implementedMultipleMethod
+}
+abstract class OptOutInterface extends core::Object {
+  synthetic constructor •() → self::OptOutInterface*
+    : 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 ClassImplementsOptOut extends core::Object implements self::OptOutInterface {
+  synthetic constructor •() → self::ClassImplementsOptOut*
+    : 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
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mem;
+import "dart:core" as core;
+
+abstract class Super extends core::Object {
+  synthetic constructor •() → mem::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod(core::int i) → void {}
+  abstract method extendedAbstractMethod(core::int i) → void;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  abstract method extendedAbstractImplementedMethod(core::int i) → void;
+}
+abstract class Interface1 extends core::Object {
+  synthetic constructor •() → mem::Interface1
+    : super core::Object::•()
+    ;
+  method extendedConcreteImplementedMethod(core::int i) → void {}
+  method extendedAbstractImplementedMethod(core::int i) → void {}
+  method implementedMethod(core::int i) → void {}
+  method implementedMultipleMethod(core::int i) → void {}
+}
+abstract class Interface2 extends core::Object {
+  synthetic constructor •() → mem::Interface2
+    : super core::Object::•()
+    ;
+  method implementedMultipleMethod(core::int i) → void {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.dart
new file mode 100644
index 0000000..536d4d1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/member_signature_lib.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.
+
+abstract class Super {
+  void extendedConcreteMethod(int i) {}
+
+  void extendedAbstractMethod(int i);
+
+  void extendedConcreteImplementedMethod(int i) {}
+
+  void extendedAbstractImplementedMethod(int i);
+}
+
+abstract class Interface1 {
+  void extendedConcreteImplementedMethod(int i) {}
+
+  void extendedAbstractImplementedMethod(int i) {}
+
+  void implementedMethod(int i) {}
+
+  void implementedMultipleMethod(int i) {}
+}
+
+abstract class Interface2 {
+  void implementedMultipleMethod(int i) {}
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart
new file mode 100644
index 0000000..a302ec1
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.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 {
+  int extendedConcreteField = 0;
+
+  abstract int extendedAbstractField;
+
+  int extendedConcreteMixedInConcreteField = 0;
+
+  abstract int extendedAbstractMixedInConcreteField;
+
+  int extendedConcreteMixedInAbstractField = 0;
+
+  abstract int extendedAbstractMixedInAbstractField;
+}
+
+class Mixin {
+  int mixedInConcreteField = 0;
+
+  abstract int mixedInAbstractField;
+
+  int extendedConcreteMixedInConcreteField = 0;
+
+  int extendedAbstractMixedInConcreteField = 0;
+
+  abstract int extendedConcreteMixedInAbstractField;
+
+  abstract int extendedAbstractMixedInAbstractField;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline.expect
new file mode 100644
index 0000000..e0858b6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  int extendedConcreteField = 0;
+  abstract int extendedAbstractField;
+  int extendedConcreteMixedInConcreteField = 0;
+  abstract int extendedAbstractMixedInConcreteField;
+  int extendedConcreteMixedInAbstractField = 0;
+  abstract int extendedAbstractMixedInAbstractField;
+}
+
+class Mixin {
+  int mixedInConcreteField = 0;
+  abstract int mixedInAbstractField;
+  int extendedConcreteMixedInConcreteField = 0;
+  int extendedAbstractMixedInConcreteField = 0;
+  abstract int extendedConcreteMixedInAbstractField;
+  abstract int extendedAbstractMixedInAbstractField;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9c90c6f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  abstract int extendedAbstractMixedInAbstractField;
+  abstract int extendedConcreteMixedInAbstractField;
+  abstract int mixedInAbstractField;
+  int extendedAbstractMixedInConcreteField = 0;
+  int extendedConcreteMixedInConcreteField = 0;
+  int mixedInConcreteField = 0;
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  abstract int extendedAbstractField;
+  abstract int extendedAbstractMixedInAbstractField;
+  abstract int extendedAbstractMixedInConcreteField;
+  int extendedConcreteField = 0;
+  int extendedConcreteMixedInAbstractField = 0;
+  int extendedConcreteMixedInConcreteField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..31f91b2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.expect
@@ -0,0 +1,211 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInAbstractField=
+//  - Super.extendedAbstractMixedInConcreteField
+//  - Super.extendedAbstractMixedInConcreteField=
+// 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 Super {
+//       ^^^^^
+// 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: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:12:16: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:12:16: Context: 'Super.extendedAbstractMixedInConcreteField=' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField=' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// 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:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// 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:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract set extendedAbstractMixedInConcreteField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+  abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+class Mixin extends core::Object {
+  field core::int mixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  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 extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub set mixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::mixedInConcreteField} = value;
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField} = value;
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub set mixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::mixedInConcreteField} = value;
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub set extendedConcreteMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField} = value;
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+  mixin-super-stub set extendedAbstractMixedInConcreteField(core::int value) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField} = value;
+}
+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
new file mode 100644
index 0000000..54bbe20
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart.weak.transformed.expect
@@ -0,0 +1,205 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInAbstractField=
+//  - Super.extendedAbstractMixedInConcreteField
+//  - Super.extendedAbstractMixedInConcreteField=
+// 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 Super {
+//       ^^^^^
+// 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: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:12:16: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:12:16: Context: 'Super.extendedAbstractMixedInConcreteField=' is defined here.
+//   abstract int extendedAbstractMixedInConcreteField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:28:16: Context: 'Mixin.extendedConcreteMixedInAbstractField=' is defined here.
+//   abstract int extendedConcreteMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// 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:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+// 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
+//  - Mixin.extendedAbstractMixedInAbstractField=
+//  - Mixin.mixedInAbstractField
+//  - Mixin.mixedInAbstractField=
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractField=
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:30:16: Context: 'Mixin.extendedAbstractMixedInAbstractField=' is defined here.
+//   abstract int extendedAbstractMixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_field.dart:22:16: Context: 'Mixin.mixedInAbstractField=' is defined here.
+//   abstract int mixedInAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^
+// 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:8:16: Context: 'Super.extendedAbstractField=' is defined here.
+//   abstract int extendedAbstractField;
+//                ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  field core::int extendedConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract set extendedAbstractField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract set extendedAbstractMixedInConcreteField(core::int #externalFieldValue) → void;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+  abstract set extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+class Mixin extends core::Object {
+  field core::int mixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  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 extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int mixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : 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 extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  field core::int mixedInConcreteField = 0;
+  field core::int extendedConcreteMixedInConcreteField = 0;
+  field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::NamedMixin
+    : 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 extendedAbstractMixedInAbstractField(core::int #externalFieldValue) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart
new file mode 100644
index 0000000..a2ece5f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.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 {
+  final int extendedConcreteField = 0;
+
+  abstract final int extendedAbstractField;
+
+  final int extendedConcreteMixedInConcreteField = 0;
+
+  abstract final int extendedAbstractMixedInConcreteField;
+
+  final int extendedConcreteMixedInAbstractField = 0;
+
+  abstract final int extendedAbstractMixedInAbstractField;
+}
+
+class Mixin {
+  final int mixedInConcreteField = 0;
+
+  abstract final int mixedInAbstractField;
+
+  final int extendedConcreteMixedInConcreteField = 0;
+
+  final int extendedAbstractMixedInConcreteField = 0;
+
+  abstract final int extendedConcreteMixedInAbstractField;
+
+  abstract final int extendedAbstractMixedInAbstractField;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline.expect
new file mode 100644
index 0000000..e4fbdca
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  final int extendedConcreteField = 0;
+  abstract final int extendedAbstractField;
+  final int extendedConcreteMixedInConcreteField = 0;
+  abstract final int extendedAbstractMixedInConcreteField;
+  final int extendedConcreteMixedInAbstractField = 0;
+  abstract final int extendedAbstractMixedInAbstractField;
+}
+
+class Mixin {
+  final int mixedInConcreteField = 0;
+  abstract final int mixedInAbstractField;
+  final int extendedConcreteMixedInConcreteField = 0;
+  final int extendedAbstractMixedInConcreteField = 0;
+  abstract final int extendedConcreteMixedInAbstractField;
+  abstract final int extendedAbstractMixedInAbstractField;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a8220b4
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  abstract final int extendedAbstractMixedInAbstractField;
+  abstract final int extendedConcreteMixedInAbstractField;
+  abstract final int mixedInAbstractField;
+  final int extendedAbstractMixedInConcreteField = 0;
+  final int extendedConcreteMixedInConcreteField = 0;
+  final int mixedInConcreteField = 0;
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  abstract final int extendedAbstractField;
+  abstract final int extendedAbstractMixedInAbstractField;
+  abstract final int extendedAbstractMixedInConcreteField;
+  final int extendedConcreteField = 0;
+  final int extendedConcreteMixedInAbstractField = 0;
+  final int extendedConcreteMixedInConcreteField = 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..b40e865
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInConcreteField
+// 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 Super {
+//       ^^^^^
+// 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:12:22: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract final int extendedAbstractMixedInConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:28:22: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract final int extendedConcreteMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+class Mixin extends core::Object {
+  final field core::int mixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract get extendedConcreteMixedInAbstractField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteField() → core::int
+    return super.{self::Mixin::mixedInConcreteField};
+  mixin-super-stub get extendedConcreteMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteField};
+  mixin-super-stub get extendedAbstractMixedInConcreteField() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteField};
+}
+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
new file mode 100644
index 0000000..4b2a25d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart.weak.transformed.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractField
+//  - Super.extendedAbstractMixedInAbstractField
+//  - Super.extendedAbstractMixedInConcreteField
+// 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 Super {
+//       ^^^^^
+// 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:12:22: Context: 'Super.extendedAbstractMixedInConcreteField' is defined here.
+//   abstract final int extendedAbstractMixedInConcreteField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.extendedConcreteMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:28:22: Context: 'Mixin.extendedConcreteMixedInAbstractField' is defined here.
+//   abstract final int extendedConcreteMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractField
+//  - Mixin.mixedInAbstractField
+//  - Super.extendedAbstractField
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:30:22: Context: 'Mixin.extendedAbstractMixedInAbstractField' is defined here.
+//   abstract final int extendedAbstractMixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:22:22: Context: 'Mixin.mixedInAbstractField' is defined here.
+//   abstract final int mixedInAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_final_field.dart:8:22: Context: 'Super.extendedAbstractField' is defined here.
+//   abstract final int extendedAbstractField;
+//                      ^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  final field core::int extendedConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInAbstractField = 0;
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  abstract get extendedAbstractField() → core::int;
+  abstract get extendedAbstractMixedInConcreteField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+class Mixin extends core::Object {
+  final field core::int mixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract get extendedConcreteMixedInAbstractField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  final field core::int mixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract get extendedConcreteMixedInAbstractField() → core::int;
+  abstract get extendedAbstractMixedInAbstractField() → core::int;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  final field core::int mixedInConcreteField = 0;
+  final field core::int extendedConcreteMixedInConcreteField = 0;
+  final field core::int extendedAbstractMixedInConcreteField = 0;
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  abstract get mixedInAbstractField() → core::int;
+  abstract get extendedConcreteMixedInAbstractField() → 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 b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart
new file mode 100644
index 0000000..748e722
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.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 {
+  int get extendedConcreteGetter => 0;
+
+  int get extendedAbstractGetter;
+
+  int get extendedConcreteMixedInConcreteGetter => 0;
+
+  int get extendedAbstractMixedInConcreteGetter;
+
+  int get extendedConcreteMixedInAbstractGetter => 0;
+
+  int get extendedAbstractMixedInAbstractGetter;
+}
+
+class Mixin {
+  int get mixedInConcreteGetter => 0;
+
+  int get mixedInAbstractGetter;
+
+  int get extendedConcreteMixedInConcreteGetter => 0;
+
+  int get extendedAbstractMixedInConcreteGetter => 0;
+
+  int get extendedConcreteMixedInAbstractGetter;
+
+  int get extendedAbstractMixedInAbstractGetter;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline.expect
new file mode 100644
index 0000000..df3e488
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  int get extendedConcreteGetter => 0;
+  int get extendedAbstractGetter;
+  int get extendedConcreteMixedInConcreteGetter => 0;
+  int get extendedAbstractMixedInConcreteGetter;
+  int get extendedConcreteMixedInAbstractGetter => 0;
+  int get extendedAbstractMixedInAbstractGetter;
+}
+
+class Mixin {
+  int get mixedInConcreteGetter => 0;
+  int get mixedInAbstractGetter;
+  int get extendedConcreteMixedInConcreteGetter => 0;
+  int get extendedAbstractMixedInConcreteGetter => 0;
+  int get extendedConcreteMixedInAbstractGetter;
+  int get extendedAbstractMixedInAbstractGetter;
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e489b9d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  int get extendedAbstractMixedInAbstractGetter;
+  int get extendedAbstractMixedInConcreteGetter => 0;
+  int get extendedConcreteMixedInAbstractGetter;
+  int get extendedConcreteMixedInConcreteGetter => 0;
+  int get mixedInAbstractGetter;
+  int get mixedInConcreteGetter => 0;
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  int get extendedAbstractGetter;
+  int get extendedAbstractMixedInAbstractGetter;
+  int get extendedAbstractMixedInConcreteGetter;
+  int get extendedConcreteGetter => 0;
+  int get extendedConcreteMixedInAbstractGetter => 0;
+  int get extendedConcreteMixedInConcreteGetter => 0;
+}
+
+main() {}
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
new file mode 100644
index 0000000..36afe4a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.expect
@@ -0,0 +1,151 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractMixedInAbstractGetter
+//  - Super.extendedAbstractMixedInConcreteGetter
+// 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 Super {
+//       ^^^^^
+// 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:12:11: Context: 'Super.extendedAbstractMixedInConcreteGetter' is defined here.
+//   int get extendedAbstractMixedInConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.extendedConcreteMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:28:11: Context: 'Mixin.extendedConcreteMixedInAbstractGetter' is defined here.
+//   int get extendedConcreteMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInConcreteGetter() → core::int;
+  get extendedConcreteMixedInAbstractGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  get mixedInConcreteGetter() → core::int
+    return 0;
+  abstract get mixedInAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  get extendedAbstractMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteGetter() → core::int
+    return super.{self::Mixin::mixedInConcreteGetter};
+  mixin-super-stub get extendedConcreteMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
+  mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub get mixedInConcreteGetter() → core::int
+    return super.{self::Mixin::mixedInConcreteGetter};
+  mixin-super-stub get extendedConcreteMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedConcreteMixedInConcreteGetter};
+  mixin-super-stub get extendedAbstractMixedInConcreteGetter() → core::int
+    return super.{self::Mixin::extendedAbstractMixedInConcreteGetter};
+}
+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
new file mode 100644
index 0000000..78a254e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart.weak.transformed.expect
@@ -0,0 +1,157 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractGetter
+//  - Super.extendedAbstractMixedInAbstractGetter
+//  - Super.extendedAbstractMixedInConcreteGetter
+// 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 Super {
+//       ^^^^^
+// 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:12:11: Context: 'Super.extendedAbstractMixedInConcreteGetter' is defined here.
+//   int get extendedAbstractMixedInConcreteGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.extendedConcreteMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:28:11: Context: 'Mixin.extendedConcreteMixedInAbstractGetter' is defined here.
+//   int get extendedConcreteMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractGetter
+//  - Mixin.mixedInAbstractGetter
+//  - Super.extendedAbstractGetter
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
+//   int get extendedAbstractMixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
+//   int get mixedInAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
+//   int get extendedAbstractGetter;
+//           ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  get extendedConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInConcreteGetter() → core::int;
+  get extendedConcreteMixedInAbstractGetter() → core::int
+    return 0;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  get mixedInConcreteGetter() → core::int
+    return 0;
+  abstract get mixedInAbstractGetter() → core::int;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  get extendedAbstractMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  get mixedInConcreteGetter() → core::int
+    return 0;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  get extendedAbstractMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get mixedInAbstractGetter() → core::int;
+  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
+  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  get mixedInConcreteGetter() → core::int
+    return 0;
+  get extendedConcreteMixedInConcreteGetter() → core::int
+    return 0;
+  get extendedAbstractMixedInConcreteGetter() → core::int
+    return 0;
+  abstract get mixedInAbstractGetter() → core::int;
+  abstract get extendedConcreteMixedInAbstractGetter() → 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 b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart
new file mode 100644
index 0000000..89e649d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.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 {
+  void extendedConcreteMethod() {}
+
+  void extendedAbstractMethod();
+
+  void extendedConcreteMixedInConcreteMethod() {}
+
+  void extendedAbstractMixedInConcreteMethod();
+
+  void extendedConcreteMixedInAbstractMethod() {}
+
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class Mixin {
+  void mixedInConcreteMethod() {}
+
+  void mixedInAbstractMethod();
+
+  void extendedConcreteMixedInConcreteMethod() {}
+
+  void extendedAbstractMixedInConcreteMethod() {}
+
+  void extendedConcreteMixedInAbstractMethod();
+
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline.expect
new file mode 100644
index 0000000..e43b692
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  void extendedConcreteMethod() {}
+  void extendedAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedAbstractMixedInConcreteMethod();
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class Mixin {
+  void mixedInConcreteMethod() {}
+  void mixedInAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedAbstractMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractMethod();
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b27951c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  void extendedAbstractMixedInAbstractMethod();
+  void extendedAbstractMixedInConcreteMethod() {}
+  void extendedConcreteMixedInAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void mixedInAbstractMethod();
+  void mixedInConcreteMethod() {}
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  void extendedAbstractMethod();
+  void extendedAbstractMixedInAbstractMethod();
+  void extendedAbstractMixedInConcreteMethod();
+  void extendedConcreteMethod() {}
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedConcreteMixedInConcreteMethod() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..0c88f5c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+//  - Super.extendedAbstractMixedInConcreteMethod
+// 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 Super {
+//       ^^^^^
+// 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:12:8: Context: 'Super.extendedAbstractMixedInConcreteMethod' is defined here.
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.extendedConcreteMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:28:8: Context: 'Mixin.extendedConcreteMixedInAbstractMethod' is defined here.
+//   void extendedConcreteMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedAbstractMixedInConcreteMethod() → void;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInConcreteMethod() → void {}
+  abstract method mixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedAbstractMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod() → void
+    return super.{self::Mixin::mixedInConcreteMethod}();
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod() → void
+    return super.{self::Mixin::mixedInConcreteMethod}();
+  mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
+  mixin-super-stub method extendedAbstractMixedInConcreteMethod() → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteMethod}();
+}
+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
new file mode 100644
index 0000000..2d2295c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart.weak.transformed.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+//  - Super.extendedAbstractMixedInConcreteMethod
+// 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 Super {
+//       ^^^^^
+// 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:12:8: Context: 'Super.extendedAbstractMixedInConcreteMethod' is defined here.
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.extendedConcreteMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:28:8: Context: 'Mixin.extendedConcreteMixedInAbstractMethod' is defined here.
+//   void extendedConcreteMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_method.dart:8:8: Context: 'Super.extendedAbstractMethod' is defined here.
+//   void extendedAbstractMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedAbstractMixedInConcreteMethod() → void;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInConcreteMethod() → void {}
+  abstract method mixedInAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedAbstractMixedInConcreteMethod() → void {}
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInConcreteMethod() → void {}
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedAbstractMixedInConcreteMethod() → void {}
+  abstract method mixedInAbstractMethod() → void;
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  method mixedInConcreteMethod() → void {}
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  method extendedAbstractMixedInConcreteMethod() → void {}
+  abstract method mixedInAbstractMethod() → void;
+  abstract method extendedConcreteMixedInAbstractMethod() → void;
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart
new file mode 100644
index 0000000..c841e04
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.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 {
+  void extendedConcreteMethod() {}
+
+  void extendedAbstractMethod();
+
+  void extendedConcreteMixedInConcreteMethod() {}
+
+  void extendedAbstractMixedInConcreteMethod();
+
+  void extendedConcreteMixedInAbstractMethod() {}
+
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class Mixin {
+  void mixedInConcreteMethod(int i) {}
+
+  void mixedInAbstractMethod(int i);
+
+  void extendedConcreteMixedInConcreteMethod(int i) {}
+
+  void extendedAbstractMixedInConcreteMethod(int i) {}
+
+  void extendedConcreteMixedInAbstractMethod(int i);
+
+  void extendedAbstractMixedInAbstractMethod(int i);
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline.expect
new file mode 100644
index 0000000..00840cb
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  void extendedConcreteMethod() {}
+  void extendedAbstractMethod();
+  void extendedConcreteMixedInConcreteMethod() {}
+  void extendedAbstractMixedInConcreteMethod();
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedAbstractMixedInAbstractMethod();
+}
+
+class Mixin {
+  void mixedInConcreteMethod(int i) {}
+  void mixedInAbstractMethod(int i);
+  void extendedConcreteMixedInConcreteMethod(int i) {}
+  void extendedAbstractMixedInConcreteMethod(int i) {}
+  void extendedConcreteMixedInAbstractMethod(int i);
+  void extendedAbstractMixedInAbstractMethod(int i);
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..7e10520
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  void extendedAbstractMixedInAbstractMethod(int i);
+  void extendedAbstractMixedInConcreteMethod(int i) {}
+  void extendedConcreteMixedInAbstractMethod(int i);
+  void extendedConcreteMixedInConcreteMethod(int i) {}
+  void mixedInAbstractMethod(int i);
+  void mixedInConcreteMethod(int i) {}
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  void extendedAbstractMethod();
+  void extendedAbstractMixedInAbstractMethod();
+  void extendedAbstractMixedInConcreteMethod();
+  void extendedConcreteMethod() {}
+  void extendedConcreteMixedInAbstractMethod() {}
+  void extendedConcreteMixedInConcreteMethod() {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..57d2af3
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart.weak.expect
@@ -0,0 +1,271 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMethod
+//  - Super.extendedAbstractMixedInAbstractMethod
+//  - Super.extendedAbstractMixedInConcreteMethod
+// 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 Super {
+//       ^^^^^
+// 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:12:8: Context: 'Super.extendedAbstractMixedInConcreteMethod' is defined here.
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.extendedConcreteMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: 'Mixin.extendedConcreteMixedInAbstractMethod' is defined here.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+// 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:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractMethod
+//  - Mixin.mixedInAbstractMethod
+//  - Super.extendedAbstractMethod
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: 'Mixin.extendedAbstractMixedInAbstractMethod' is defined here.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:22:8: Context: 'Mixin.mixedInAbstractMethod' is defined here.
+//   void mixedInAbstractMethod(int i);
+//        ^^^^^^^^^^^^^^^^^^^^^
+// 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:33:7: Error: Applying the mixin 'Mixin' to 'Super' introduces an erroneous override of 'extendedConcreteMixedInConcreteMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: The method 'Mixin.extendedConcreteMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInConcreteMethod'.
+//   void extendedConcreteMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is the overridden method ('extendedConcreteMixedInConcreteMethod').
+//   void extendedConcreteMixedInConcreteMethod() {}
+//        ^
+//
+// 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 'extendedAbstractMixedInConcreteMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: The method 'Mixin.extendedAbstractMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInConcreteMethod'.
+//   void extendedAbstractMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is the overridden method ('extendedAbstractMixedInConcreteMethod').
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^
+//
+// 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 'extendedConcreteMixedInAbstractMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: The method 'Mixin.extendedConcreteMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInAbstractMethod'.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+//   void extendedConcreteMixedInAbstractMethod() {}
+//        ^
+//
+// 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 'extendedAbstractMixedInAbstractMethod'.
+// class ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: The method 'Mixin.extendedAbstractMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInAbstractMethod'.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: This is the overridden method ('extendedAbstractMixedInAbstractMethod').
+//   void extendedAbstractMixedInAbstractMethod();
+//        ^
+//
+// 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;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:24:8: Context: The method 'Mixin.extendedConcreteMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInConcreteMethod'.
+//   void extendedConcreteMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:10:8: Context: This is the overridden method ('extendedConcreteMixedInConcreteMethod').
+//   void extendedConcreteMixedInConcreteMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedAbstractMixedInConcreteMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:26:8: Context: The method 'Mixin.extendedAbstractMixedInConcreteMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInConcreteMethod'.
+//   void extendedAbstractMixedInConcreteMethod(int i) {}
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:12:8: Context: This is the overridden method ('extendedAbstractMixedInConcreteMethod').
+//   void extendedAbstractMixedInConcreteMethod();
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedConcreteMixedInAbstractMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:28:8: Context: The method 'Mixin.extendedConcreteMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedConcreteMixedInAbstractMethod'.
+//   void extendedConcreteMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:14:8: Context: This is the overridden method ('extendedConcreteMixedInAbstractMethod').
+//   void extendedConcreteMixedInAbstractMethod() {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:35:7: Error: The mixin application class 'NamedMixin' introduces an erroneous override of 'extendedAbstractMixedInAbstractMethod'.
+// class NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:30:8: Context: The method 'Mixin.extendedAbstractMixedInAbstractMethod' has more required arguments than those of overridden method 'Super.extendedAbstractMixedInAbstractMethod'.
+//   void extendedAbstractMixedInAbstractMethod(int i);
+//        ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_override.dart:16:8: Context: This is the overridden method ('extendedAbstractMixedInAbstractMethod').
+//   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;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedConcreteMethod() → void {}
+  abstract method extendedAbstractMethod() → void;
+  method extendedConcreteMixedInConcreteMethod() → void {}
+  abstract method extendedAbstractMixedInConcreteMethod() → void;
+  method extendedConcreteMixedInAbstractMethod() → void {}
+  abstract method extendedAbstractMixedInAbstractMethod() → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  method mixedInConcreteMethod(core::int i) → void {}
+  abstract method mixedInAbstractMethod(core::int i) → void;
+  method extendedConcreteMixedInConcreteMethod(core::int i) → void {}
+  method extendedAbstractMixedInConcreteMethod(core::int i) → void {}
+  abstract method extendedConcreteMixedInAbstractMethod(core::int i) → void;
+  abstract method extendedAbstractMixedInAbstractMethod(core::int i) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteMethod}(i);
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInConcreteMethod(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteMethod}(i);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart
new file mode 100644
index 0000000..3a6cf3f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.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 {
+  void set extendedConcreteSetter(int i) {}
+
+  void set extendedAbstractSetter(int i);
+
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+
+  void set extendedAbstractMixedInConcreteSetter(int i);
+
+  void set extendedConcreteMixedInAbstractSetter(int i) {}
+
+  void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+class Mixin {
+  void set mixedInConcreteSetter(int i) {}
+
+  void set mixedInAbstractSetter(int i);
+
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+
+  void set extendedAbstractMixedInConcreteSetter(int i) {}
+
+  void set extendedConcreteMixedInAbstractSetter(int i);
+
+  void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline.expect
new file mode 100644
index 0000000..92bb982
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline.expect
@@ -0,0 +1,22 @@
+class Super {
+  void set extendedConcreteSetter(int i) {}
+  void set extendedAbstractSetter(int i);
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+  void set extendedAbstractMixedInConcreteSetter(int i);
+  void set extendedConcreteMixedInAbstractSetter(int i) {}
+  void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+class Mixin {
+  void set mixedInConcreteSetter(int i) {}
+  void set mixedInAbstractSetter(int i);
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+  void set extendedAbstractMixedInConcreteSetter(int i) {}
+  void set extendedConcreteMixedInAbstractSetter(int i);
+  void set extendedAbstractMixedInAbstractSetter(int i);
+}
+
+class ClassMixin extends Super with Mixin {}
+
+class NamedMixin = Super with Mixin;
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1cb957d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class ClassMixin extends Super with Mixin {}
+
+class Mixin {
+  void set extendedAbstractMixedInAbstractSetter(int i);
+  void set extendedAbstractMixedInConcreteSetter(int i) {}
+  void set extendedConcreteMixedInAbstractSetter(int i);
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+  void set mixedInAbstractSetter(int i);
+  void set mixedInConcreteSetter(int i) {}
+}
+
+class NamedMixin = Super with Mixin;
+
+class Super {
+  void set extendedAbstractMixedInAbstractSetter(int i);
+  void set extendedAbstractMixedInConcreteSetter(int i);
+  void set extendedAbstractSetter(int i);
+  void set extendedConcreteMixedInAbstractSetter(int i) {}
+  void set extendedConcreteMixedInConcreteSetter(int i) {}
+  void set extendedConcreteSetter(int i) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..a61aba7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMixedInAbstractSetter=
+//  - Super.extendedAbstractMixedInConcreteSetter=
+//  - Super.extendedAbstractSetter=
+// 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 Super {
+//       ^^^^^
+// 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:12:12: Context: 'Super.extendedAbstractMixedInConcreteSetter=' is defined here.
+//   void set extendedAbstractMixedInConcreteSetter(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);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.extendedConcreteMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:28:12: Context: 'Mixin.extendedConcreteMixedInAbstractSetter=' is defined here.
+//   void set extendedConcreteMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+//  - Super.extendedAbstractSetter=
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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.extendedAbstractSetter=
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInConcreteSetter(core::int i) → void;
+  set extendedConcreteMixedInAbstractSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  set mixedInConcreteSetter(core::int i) → void {}
+  abstract set mixedInAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  set extendedAbstractMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedConcreteMixedInAbstractSetter(core::int i) → void;
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+abstract class _ClassMixin&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub set mixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteSetter} = i;
+  mixin-super-stub set extendedConcreteMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
+  mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin = self::Super with self::Mixin {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub set mixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::mixedInConcreteSetter} = i;
+  mixin-super-stub set extendedConcreteMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedConcreteMixedInConcreteSetter} = i;
+  mixin-super-stub set extendedAbstractMixedInConcreteSetter(core::int i) → void
+    return super.{self::Mixin::extendedAbstractMixedInConcreteSetter} = i;
+}
+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
new file mode 100644
index 0000000..d17ef57
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart.weak.transformed.expect
@@ -0,0 +1,145 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
+//  - Super.extendedAbstractMixedInAbstractSetter=
+//  - Super.extendedAbstractMixedInConcreteSetter=
+//  - Super.extendedAbstractSetter=
+// 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 Super {
+//       ^^^^^
+// 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:12:12: Context: 'Super.extendedAbstractMixedInConcreteSetter=' is defined here.
+//   void set extendedAbstractMixedInConcreteSetter(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);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.extendedConcreteMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+// 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 Mixin {
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:28:12: Context: 'Mixin.extendedConcreteMixedInAbstractSetter=' is defined here.
+//   void set extendedConcreteMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
+//  - Mixin.extendedAbstractMixedInAbstractSetter=
+//  - Mixin.mixedInAbstractSetter=
+//  - Super.extendedAbstractSetter=
+// 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 ClassMixin extends Super with Mixin {}
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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.extendedAbstractSetter=
+// 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 NamedMixin = Super with Mixin;
+//       ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_setter.dart:30:12: Context: 'Mixin.extendedAbstractMixedInAbstractSetter=' is defined here.
+//   void set extendedAbstractMixedInAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// 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:8:12: Context: 'Super.extendedAbstractSetter=' is defined here.
+//   void set extendedAbstractSetter(int i);
+//            ^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  set extendedConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInConcreteSetter(core::int i) → void;
+  set extendedConcreteMixedInAbstractSetter(core::int i) → void {}
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  set mixedInConcreteSetter(core::int i) → void {}
+  abstract set mixedInAbstractSetter(core::int i) → void;
+  set extendedConcreteMixedInConcreteSetter(core::int i) → void {}
+  set extendedAbstractMixedInConcreteSetter(core::int i) → void {}
+  abstract set extendedConcreteMixedInAbstractSetter(core::int i) → void;
+  abstract set extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_ClassMixin&Super&Mixin
+    : super self::Super::•()
+    ;
+  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 extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+class ClassMixin extends self::_ClassMixin&Super&Mixin {
+  synthetic constructor •() → self::ClassMixin
+    : super self::_ClassMixin&Super&Mixin::•()
+    ;
+}
+class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
+  synthetic constructor •() → self::NamedMixin
+    : super self::Super::•()
+    ;
+  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 extendedAbstractMixedInAbstractSetter(core::int i) → void;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart
new file mode 100644
index 0000000..f1e2e06
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart
@@ -0,0 +1,76 @@
+// 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.
+
+abstract class Interface {
+  void method();
+  int get getter;
+  void set setter(int value);
+  int field;
+  final int finalField;
+}
+
+class SuperAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromSuperAbstract extends SuperAbstract implements Interface {}
+
+class SuperConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return null;
+  }
+}
+
+class FromSuperConcrete extends SuperConcrete implements Interface {}
+
+class FromSuperConcreteAbstract extends SuperConcrete
+    implements SuperAbstract, Interface {}
+
+class MixinAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromMixinAbstract extends MixinAbstract implements Interface {}
+
+class MixinConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return null;
+  }
+}
+
+class FromMixinConcrete with MixinConcrete implements Interface {}
+
+class FromMixinConcreteAbstract
+    with MixinConcrete, MixinAbstract
+    implements Interface {}
+
+class InterfaceAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+
+class InterfaceConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return null;
+  }
+}
+
+class FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+
+class DeclaredAbstract implements Interface {
+  noSuchMethod(Invocation invocation);
+}
+
+class DeclaredConcrete implements Interface {
+  @override
+  noSuchMethod(Invocation invocation) {
+    return null;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline.expect
new file mode 100644
index 0000000..1093cfd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline.expect
@@ -0,0 +1,64 @@
+abstract class Interface {
+  void method();
+  int get getter;
+  void set setter(int value);
+  int field;
+  final int finalField;
+}
+
+class SuperAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromSuperAbstract extends SuperAbstract implements Interface {}
+
+class SuperConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class FromSuperConcrete extends SuperConcrete implements Interface {}
+
+class FromSuperConcreteAbstract extends SuperConcrete
+    implements SuperAbstract, Interface {}
+
+class MixinAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromMixinAbstract extends MixinAbstract implements Interface {}
+
+class MixinConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class FromMixinConcrete with MixinConcrete implements Interface {}
+
+class FromMixinConcreteAbstract
+    with MixinConcrete, MixinAbstract
+    implements Interface {}
+
+class InterfaceAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+
+class InterfaceConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+
+class DeclaredAbstract implements Interface {
+  noSuchMethod(Invocation invocation);
+}
+
+class DeclaredConcrete implements Interface {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..27e9d70
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.textual_outline_modelled.expect
@@ -0,0 +1,64 @@
+abstract class Interface {
+  final int finalField;
+  int field;
+  int get getter;
+  void method();
+  void set setter(int value);
+}
+
+class DeclaredAbstract implements Interface {
+  noSuchMethod(Invocation invocation);
+}
+
+class DeclaredConcrete implements Interface {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+
+class FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+
+class FromMixinAbstract extends MixinAbstract implements Interface {}
+
+class FromMixinConcrete with MixinConcrete implements Interface {}
+
+class FromMixinConcreteAbstract
+    with MixinConcrete, MixinAbstract
+    implements Interface {}
+
+class FromSuperAbstract extends SuperAbstract implements Interface {}
+
+class FromSuperConcrete extends SuperConcrete implements Interface {}
+
+class FromSuperConcreteAbstract extends SuperConcrete
+    implements SuperAbstract, Interface {}
+
+class InterfaceAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class InterfaceConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class MixinAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class MixinConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+class SuperAbstract {
+  noSuchMethod(Invocation invocation);
+}
+
+class SuperConcrete {
+  @override
+  noSuchMethod(Invocation invocation) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..197d429
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.expect
@@ -0,0 +1,369 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:17:7: Error: The non-abstract class 'FromSuperAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromSuperAbstract extends SuperAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:35:7: Error: The non-abstract class 'FromMixinAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromMixinAbstract extends MixinAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:54:7: Error: The non-abstract class 'FromInterfaceAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:63:7: Error: The non-abstract class 'FromInterfaceConcrete' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:65:7: Error: The non-abstract class 'DeclaredAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 DeclaredAbstract implements Interface {
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Error: Final field 'finalField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int finalField;
+//             ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int field = null;
+  final field core::int finalField = null;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract method method() → void;
+  abstract get getter() → core::int;
+  abstract set setter(core::int value) → void;
+}
+class SuperAbstract extends core::Object {
+  synthetic constructor •() → self::SuperAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromSuperAbstract extends self::SuperAbstract implements self::Interface {
+  synthetic constructor •() → self::FromSuperAbstract
+    : super self::SuperAbstract::•()
+    ;
+}
+class SuperConcrete extends core::Object {
+  synthetic constructor •() → self::SuperConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromSuperConcrete extends self::SuperConcrete implements self::Interface {
+  synthetic constructor •() → self::FromSuperConcrete
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
+  synthetic constructor •() → self::FromSuperConcreteAbstract
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+class MixinAbstract extends core::Object {
+  synthetic constructor •() → self::MixinAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromMixinAbstract extends self::MixinAbstract implements self::Interface {
+  synthetic constructor •() → self::FromMixinAbstract
+    : super self::MixinAbstract::•()
+    ;
+}
+class MixinConcrete extends core::Object {
+  synthetic constructor •() → self::MixinConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+abstract class _FromMixinConcrete&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcrete&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{self::MixinConcrete::noSuchMethod}(invocation);
+}
+class FromMixinConcrete extends self::_FromMixinConcrete&Object&MixinConcrete implements self::Interface {
+  synthetic constructor •() → self::FromMixinConcrete
+    : super self::_FromMixinConcrete&Object&MixinConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete = core::Object with self::MixinConcrete /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  mixin-super-stub method noSuchMethod(core::Invocation invocation) → dynamic
+    return super.{self::MixinConcrete::noSuchMethod}(invocation);
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract = self::_FromMixinConcreteAbstract&Object&MixinConcrete with self::MixinAbstract /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract
+    : super self::_FromMixinConcreteAbstract&Object&MixinConcrete::•()
+    ;
+}
+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;
+  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;
+  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)));
+  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;
+  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)));
+  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)));
+}
+class InterfaceAbstract extends core::Object {
+  synthetic constructor •() → self::InterfaceAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromInterfaceAbstract extends core::Object implements self::InterfaceAbstract, self::Interface {
+  synthetic constructor •() → self::FromInterfaceAbstract
+    : super core::Object::•()
+    ;
+}
+class InterfaceConcrete extends core::Object {
+  synthetic constructor •() → self::InterfaceConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromInterfaceConcrete extends core::Object implements self::InterfaceConcrete, self::Interface {
+  synthetic constructor •() → self::FromInterfaceConcrete
+    : super core::Object::•()
+    ;
+}
+class DeclaredAbstract extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class DeclaredConcrete extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #getter
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C6 = #field
+  #C7 = #method
+  #C8 = #finalField
+  #C9 = #setter=
+  #C10 = #field=
+}
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
new file mode 100644
index 0000000..2955bef
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart.weak.transformed.expect
@@ -0,0 +1,374 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:17:7: Error: The non-abstract class 'FromSuperAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromSuperAbstract extends SuperAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:35:7: Error: The non-abstract class 'FromMixinAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromMixinAbstract extends MixinAbstract implements Interface {}
+//       ^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:54:7: Error: The non-abstract class 'FromInterfaceAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromInterfaceAbstract implements InterfaceAbstract, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:63:7: Error: The non-abstract class 'FromInterfaceConcrete' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 FromInterfaceConcrete implements InterfaceConcrete, Interface {}
+//       ^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:65:7: Error: The non-abstract class 'DeclaredAbstract' is missing implementations for these members:
+//  - Interface.field
+//  - Interface.finalField
+//  - Interface.getter
+//  - Interface.method
+//  - Interface.setter=
+// 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 DeclaredAbstract implements Interface {
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Context: 'Interface.field' is defined here.
+//   int field;
+//       ^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Context: 'Interface.finalField' is defined here.
+//   final int finalField;
+//             ^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:7:11: Context: 'Interface.getter' is defined here.
+//   int get getter;
+//           ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:6:8: Context: 'Interface.method' is defined here.
+//   void method();
+//        ^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:8:12: Context: 'Interface.setter=' is defined here.
+//   void set setter(int value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:9:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
+//   int field;
+//       ^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/no_such_method.dart:10:13: Error: Final field 'finalField' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int finalField;
+//             ^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class Interface extends core::Object {
+  field core::int field = null;
+  final field core::int finalField = null;
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  abstract method method() → void;
+  abstract get getter() → core::int;
+  abstract set setter(core::int value) → void;
+}
+class SuperAbstract extends core::Object {
+  synthetic constructor •() → self::SuperAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromSuperAbstract extends self::SuperAbstract implements self::Interface {
+  synthetic constructor •() → self::FromSuperAbstract
+    : super self::SuperAbstract::•()
+    ;
+}
+class SuperConcrete extends core::Object {
+  synthetic constructor •() → self::SuperConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromSuperConcrete extends self::SuperConcrete implements self::Interface {
+  synthetic constructor •() → self::FromSuperConcrete
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+class FromSuperConcreteAbstract extends self::SuperConcrete implements self::SuperAbstract, self::Interface {
+  synthetic constructor •() → self::FromSuperConcreteAbstract
+    : super self::SuperConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::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::SuperConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+class MixinAbstract extends core::Object {
+  synthetic constructor •() → self::MixinAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromMixinAbstract extends self::MixinAbstract implements self::Interface {
+  synthetic constructor •() → self::FromMixinAbstract
+    : super self::MixinAbstract::•()
+    ;
+}
+class MixinConcrete extends core::Object {
+  synthetic constructor •() → self::MixinConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+abstract class _FromMixinConcrete&Object&MixinConcrete extends core::Object implements self::MixinConcrete /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcrete&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromMixinConcrete extends self::_FromMixinConcrete&Object&MixinConcrete implements self::Interface {
+  synthetic constructor •() → self::FromMixinConcrete
+    : super self::_FromMixinConcrete&Object&MixinConcrete::•()
+    ;
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::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::_FromMixinConcrete&Object&MixinConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete extends core::Object implements self::MixinConcrete /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+abstract class _FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract extends self::_FromMixinConcreteAbstract&Object&MixinConcrete implements self::MixinAbstract /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_FromMixinConcreteAbstract&Object&MixinConcrete&MixinAbstract
+    : super self::_FromMixinConcreteAbstract&Object&MixinConcrete::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+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;
+  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;
+  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)));
+  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;
+  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)));
+  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)));
+}
+class InterfaceAbstract extends core::Object {
+  synthetic constructor •() → self::InterfaceAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class FromInterfaceAbstract extends core::Object implements self::InterfaceAbstract, self::Interface {
+  synthetic constructor •() → self::FromInterfaceAbstract
+    : super core::Object::•()
+    ;
+}
+class InterfaceConcrete extends core::Object {
+  synthetic constructor •() → self::InterfaceConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+}
+class FromInterfaceConcrete extends core::Object implements self::InterfaceConcrete, self::Interface {
+  synthetic constructor •() → self::FromInterfaceConcrete
+    : super core::Object::•()
+    ;
+}
+class DeclaredAbstract extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredAbstract
+    : super core::Object::•()
+    ;
+  abstract method noSuchMethod(core::Invocation invocation) → dynamic;
+}
+class DeclaredConcrete extends core::Object implements self::Interface {
+  synthetic constructor •() → self::DeclaredConcrete
+    : super core::Object::•()
+    ;
+  @#C1
+  method noSuchMethod(core::Invocation invocation) → dynamic {
+    return null;
+  }
+  no-such-method-forwarder get getter() → core::int
+    return this.{self::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::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::DeclaredConcrete::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 2, #C3, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5)));
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = core::_Override {}
+  #C2 = #getter
+  #C3 = <core::Type*>[]
+  #C4 = <dynamic>[]
+  #C5 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C4}
+  #C6 = #field
+  #C7 = #method
+  #C8 = #finalField
+  #C9 = #setter=
+  #C10 = #field=
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart
new file mode 100644
index 0000000..0231dd6
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart
@@ -0,0 +1,11 @@
+// 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 {}
+
+class B extends A {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline.expect
new file mode 100644
index 0000000..354d426
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+// @dart = 2.9
+class A {}
+
+class B extends A {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..354d426
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+// @dart = 2.9
+class A {}
+
+class B extends A {}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.expect
new file mode 100644
index 0000000..2bfc463
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : 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 B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.transformed.expect
new file mode 100644
index 0000000..2bfc463
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/opt_out.dart.weak.transformed.expect
@@ -0,0 +1,25 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : 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 B extends self::A {
+  synthetic constructor •() → self::B*
+    : super self::A::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart
new file mode 100644
index 0000000..2e1972e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart
@@ -0,0 +1,30 @@
+// 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 {
+  // Not a valid implementation.
+  void extendedMethod1(int i) {}
+
+  // Valid implementation.
+  void extendedMethod2(num i) {}
+
+  void overriddenMethod1(int i) {}
+  void overriddenMethod2(num n) {}
+}
+
+class Class extends Super {
+  // Valid override.
+  void extendedMethod1(num n);
+
+  // Not a valid override.
+  void extendedMethod2(int i);
+
+  // Valid override
+  void overriddenMethod1(num n) {}
+
+  // Not a valid override
+  void overriddenMethod2(int n) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline.expect
new file mode 100644
index 0000000..6c67ae9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class Super {
+  void extendedMethod1(int i) {}
+  void extendedMethod2(num i) {}
+  void overriddenMethod1(int i) {}
+  void overriddenMethod2(num n) {}
+}
+
+class Class extends Super {
+  void extendedMethod1(num n);
+  void extendedMethod2(int i);
+  void overriddenMethod1(num n) {}
+  void overriddenMethod2(int n) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4a6783b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Class extends Super {
+  void extendedMethod1(num n);
+  void extendedMethod2(int i);
+  void overriddenMethod1(num n) {}
+  void overriddenMethod2(int n) {}
+}
+
+class Super {
+  void extendedMethod1(int i) {}
+  void extendedMethod2(num i) {}
+  void overriddenMethod1(int i) {}
+  void overriddenMethod2(num n) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..eda0257
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart.weak.expect
@@ -0,0 +1,53 @@
+library /*isNonNullableByDefault*/;
+//
+// 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);
+//                            ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:10:8: Context: This is the overridden method ('extendedMethod2').
+//   void extendedMethod2(num i) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:27:30: Error: The parameter 'n' of the method 'Class.overriddenMethod2' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'Super.overriddenMethod2'.
+// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
+//   void overriddenMethod2(int n) {}
+//                              ^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/override.dart:13:8: Context: This is the overridden method ('overriddenMethod2').
+//   void overriddenMethod2(num n) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  method extendedMethod1(core::int i) → void {}
+  method extendedMethod2(core::num i) → void {}
+  method overriddenMethod1(core::int i) → void {}
+  method overriddenMethod2(core::num n) → void {}
+}
+class Class extends self::Super {
+  synthetic constructor •() → self::Class
+    : super self::Super::•()
+    ;
+  abstract method extendedMethod1(core::num n) → void;
+  abstract method extendedMethod2(core::int i) → void;
+  method overriddenMethod1(core::num n) → void {}
+  method overriddenMethod2(core::int n) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart
new file mode 100644
index 0000000..7fcd70b
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart
@@ -0,0 +1,14 @@
+// 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.
+
+// Redirecting factories are encoded using static fields that need to be
+// handled by the class hierarchy builder.
+
+class Class {
+  factory Class.redirect() = Class;
+
+  Class();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline.expect
new file mode 100644
index 0000000..29149af
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+class Class {
+  factory Class.redirect() = Class;
+  Class();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1862a83
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class Class {
+  Class();
+  factory Class.redirect() = Class;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
new file mode 100644
index 0000000..03c441d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect() → self::Class
+    let dynamic #redirecting_factory = self::Class::• in invalid-expression;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
new file mode 100644
index 0000000..0c7726a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/redirecting_factory.dart.weak.transformed.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+  constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  static factory redirect() → self::Class
+    let<BottomType> #redirecting_factory = self::Class::• in invalid-expression;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart
new file mode 100644
index 0000000..3f86658
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart
@@ -0,0 +1,85 @@
+// 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 {
+  static void extendedStaticDeclaredInstanceMethod() {}
+  void extendedInstanceDeclaredStaticMethod() {}
+
+  static void set extendedStaticDeclaredInstanceSetter(int value) {}
+  void set extendedInstanceDeclaredStaticSetter(int value) {}
+
+  static int get extendedStaticGetterDeclaredInstanceSetter => 0;
+  int get extendedInstanceGetterDeclaredStaticSetter => 0;
+
+  static void set extendedStaticSetterDeclaredInstanceGetter(int value) {}
+  void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+
+  static void extendedStaticMixedInInstanceMethod() {}
+  void extendedInstanceMixedInStaticMethod() {}
+
+  static void extendedStaticImplementedInstanceMethod() {}
+  void extendedInstanceImplementedStaticMethod() {}
+}
+
+class Mixin {
+  static void mixedInStaticDeclaredInstanceMethod() {}
+  void mixedInInstanceDeclaredStaticMethod() {}
+
+  static void mixedInStaticImplementedInstanceMethod() {}
+  void mixedInInstanceImplementedStaticMethod() {}
+
+  void extendedStaticMixedInInstanceMethod() {}
+  static void extendedInstanceMixedInStaticMethod() {}
+}
+
+class Interface {
+  static void implementedStaticDeclaredInstanceMethod() {}
+  void implementedInstanceDeclaredStaticMethod() {}
+
+  static void set implementedStaticDeclaredInstanceSetter(int value) {}
+  void set implementedInstanceDeclaredStaticSetter(int value) {}
+
+  static int get implementedStaticGetterDeclaredInstanceSetter => 0;
+  int get implementedInstanceGetterDeclaredStaticSetter => 0;
+
+  static void set implementedStaticSetterDeclaredInstanceGetter(int value) {}
+  void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+
+  void extendedStaticImplementedInstanceMethod() {}
+  static void extendedInstanceImplementedStaticMethod() {}
+
+  void mixedInStaticImplementedInstanceMethod() {}
+  static void mixedInInstanceImplementedStaticMethod() {}
+}
+
+abstract class Class extends Super with Mixin implements Interface {
+  void extendedStaticDeclaredInstanceMethod() {}
+  static void extendedInstanceDeclaredStaticMethod() {}
+
+  void set extendedStaticDeclaredInstanceSetter(int value) {}
+  static void set extendedInstanceDeclaredStaticSetter(int value) {}
+
+  void set extendedStaticGetterDeclaredInstanceSetter(int value) {}
+  static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+
+  int get extendedStaticSetterDeclaredInstanceGetter => 0;
+  static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+
+  void mixedInStaticDeclaredInstanceMethod() {}
+  static void mixedInInstanceDeclaredStaticMethod() {}
+
+  void implementedStaticDeclaredInstanceMethod() {}
+  static void implementedInstanceDeclaredStaticMethod() {}
+
+  void set implementedStaticDeclaredInstanceSetter(int value) {}
+  static void set implementedInstanceDeclaredStaticSetter(int value) {}
+
+  void set implementedStaticGetterDeclaredInstanceSetter(int value) {}
+  static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+
+  int get implementedStaticSetterDeclaredInstanceGetter => 0;
+  static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline.expect
new file mode 100644
index 0000000..fb0f36e
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline.expect
@@ -0,0 +1,61 @@
+class Super {
+  static void extendedStaticDeclaredInstanceMethod() {}
+  void extendedInstanceDeclaredStaticMethod() {}
+  static void set extendedStaticDeclaredInstanceSetter(int value) {}
+  void set extendedInstanceDeclaredStaticSetter(int value) {}
+  static int get extendedStaticGetterDeclaredInstanceSetter => 0;
+  int get extendedInstanceGetterDeclaredStaticSetter => 0;
+  static void set extendedStaticSetterDeclaredInstanceGetter(int value) {}
+  void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+  static void extendedStaticMixedInInstanceMethod() {}
+  void extendedInstanceMixedInStaticMethod() {}
+  static void extendedStaticImplementedInstanceMethod() {}
+  void extendedInstanceImplementedStaticMethod() {}
+}
+
+class Mixin {
+  static void mixedInStaticDeclaredInstanceMethod() {}
+  void mixedInInstanceDeclaredStaticMethod() {}
+  static void mixedInStaticImplementedInstanceMethod() {}
+  void mixedInInstanceImplementedStaticMethod() {}
+  void extendedStaticMixedInInstanceMethod() {}
+  static void extendedInstanceMixedInStaticMethod() {}
+}
+
+class Interface {
+  static void implementedStaticDeclaredInstanceMethod() {}
+  void implementedInstanceDeclaredStaticMethod() {}
+  static void set implementedStaticDeclaredInstanceSetter(int value) {}
+  void set implementedInstanceDeclaredStaticSetter(int value) {}
+  static int get implementedStaticGetterDeclaredInstanceSetter => 0;
+  int get implementedInstanceGetterDeclaredStaticSetter => 0;
+  static void set implementedStaticSetterDeclaredInstanceGetter(int value) {}
+  void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+  void extendedStaticImplementedInstanceMethod() {}
+  static void extendedInstanceImplementedStaticMethod() {}
+  void mixedInStaticImplementedInstanceMethod() {}
+  static void mixedInInstanceImplementedStaticMethod() {}
+}
+
+abstract class Class extends Super with Mixin implements Interface {
+  void extendedStaticDeclaredInstanceMethod() {}
+  static void extendedInstanceDeclaredStaticMethod() {}
+  void set extendedStaticDeclaredInstanceSetter(int value) {}
+  static void set extendedInstanceDeclaredStaticSetter(int value) {}
+  void set extendedStaticGetterDeclaredInstanceSetter(int value) {}
+  static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+  int get extendedStaticSetterDeclaredInstanceGetter => 0;
+  static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+  void mixedInStaticDeclaredInstanceMethod() {}
+  static void mixedInInstanceDeclaredStaticMethod() {}
+  void implementedStaticDeclaredInstanceMethod() {}
+  static void implementedInstanceDeclaredStaticMethod() {}
+  void set implementedStaticDeclaredInstanceSetter(int value) {}
+  static void set implementedInstanceDeclaredStaticSetter(int value) {}
+  void set implementedStaticGetterDeclaredInstanceSetter(int value) {}
+  static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+  int get implementedStaticSetterDeclaredInstanceGetter => 0;
+  static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c1f3a13
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.textual_outline_modelled.expect
@@ -0,0 +1,61 @@
+abstract class Class extends Super with Mixin implements Interface {
+  int get extendedStaticSetterDeclaredInstanceGetter => 0;
+  int get implementedStaticSetterDeclaredInstanceGetter => 0;
+  static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+  static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+  static void extendedInstanceDeclaredStaticMethod() {}
+  static void implementedInstanceDeclaredStaticMethod() {}
+  static void mixedInInstanceDeclaredStaticMethod() {}
+  static void set extendedInstanceDeclaredStaticSetter(int value) {}
+  static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+  static void set implementedInstanceDeclaredStaticSetter(int value) {}
+  static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+  void extendedStaticDeclaredInstanceMethod() {}
+  void implementedStaticDeclaredInstanceMethod() {}
+  void mixedInStaticDeclaredInstanceMethod() {}
+  void set extendedStaticDeclaredInstanceSetter(int value) {}
+  void set extendedStaticGetterDeclaredInstanceSetter(int value) {}
+  void set implementedStaticDeclaredInstanceSetter(int value) {}
+  void set implementedStaticGetterDeclaredInstanceSetter(int value) {}
+}
+
+class Interface {
+  int get implementedInstanceGetterDeclaredStaticSetter => 0;
+  static int get implementedStaticGetterDeclaredInstanceSetter => 0;
+  static void extendedInstanceImplementedStaticMethod() {}
+  static void implementedStaticDeclaredInstanceMethod() {}
+  static void mixedInInstanceImplementedStaticMethod() {}
+  static void set implementedStaticDeclaredInstanceSetter(int value) {}
+  static void set implementedStaticSetterDeclaredInstanceGetter(int value) {}
+  void extendedStaticImplementedInstanceMethod() {}
+  void implementedInstanceDeclaredStaticMethod() {}
+  void mixedInStaticImplementedInstanceMethod() {}
+  void set implementedInstanceDeclaredStaticSetter(int value) {}
+  void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+}
+
+class Mixin {
+  static void extendedInstanceMixedInStaticMethod() {}
+  static void mixedInStaticDeclaredInstanceMethod() {}
+  static void mixedInStaticImplementedInstanceMethod() {}
+  void extendedStaticMixedInInstanceMethod() {}
+  void mixedInInstanceDeclaredStaticMethod() {}
+  void mixedInInstanceImplementedStaticMethod() {}
+}
+
+class Super {
+  int get extendedInstanceGetterDeclaredStaticSetter => 0;
+  static int get extendedStaticGetterDeclaredInstanceSetter => 0;
+  static void extendedStaticDeclaredInstanceMethod() {}
+  static void extendedStaticImplementedInstanceMethod() {}
+  static void extendedStaticMixedInInstanceMethod() {}
+  static void set extendedStaticDeclaredInstanceSetter(int value) {}
+  static void set extendedStaticSetterDeclaredInstanceGetter(int value) {}
+  void extendedInstanceDeclaredStaticMethod() {}
+  void extendedInstanceImplementedStaticMethod() {}
+  void extendedInstanceMixedInStaticMethod() {}
+  void set extendedInstanceDeclaredStaticSetter(int value) {}
+  void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+}
+
+main() {}
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
new file mode 100644
index 0000000..d73e778
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.expect
@@ -0,0 +1,158 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:58:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void extendedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:7:8: Context: This is the inherited member.
+//   void extendedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:67:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:16:12: Context: This is the inherited member.
+//   void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:73:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void implementedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:38:8: Context: This is the inherited member.
+//   void implementedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:82:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:47:12: Context: This is the inherited member.
+//   void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:61:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:10:12: Context: This is the inherited member.
+//   void set extendedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:64:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:13:11: Context: This is the inherited member.
+//   int get extendedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:76:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:41:12: Context: This is the inherited member.
+//   void set implementedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:79:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:44:11: Context: This is the inherited member.
+//   int get implementedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  static method extendedStaticDeclaredInstanceMethod() → void {}
+  method extendedInstanceDeclaredStaticMethod() → void {}
+  static set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get extendedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get extendedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set extendedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set extendedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  static method extendedStaticMixedInInstanceMethod() → void {}
+  method extendedInstanceMixedInStaticMethod() → void {}
+  static method extendedStaticImplementedInstanceMethod() → void {}
+  method extendedInstanceImplementedStaticMethod() → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  static method mixedInStaticDeclaredInstanceMethod() → void {}
+  method mixedInInstanceDeclaredStaticMethod() → void {}
+  static method mixedInStaticImplementedInstanceMethod() → void {}
+  method mixedInInstanceImplementedStaticMethod() → void {}
+  method extendedStaticMixedInInstanceMethod() → void {}
+  static method extendedInstanceMixedInStaticMethod() → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  static method implementedStaticDeclaredInstanceMethod() → void {}
+  method implementedInstanceDeclaredStaticMethod() → void {}
+  static set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get implementedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get implementedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set implementedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set implementedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  method extendedStaticImplementedInstanceMethod() → void {}
+  static method extendedInstanceImplementedStaticMethod() → void {}
+  method mixedInStaticImplementedInstanceMethod() → void {}
+  static method mixedInInstanceImplementedStaticMethod() → void {}
+}
+abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  mixin-super-stub method mixedInInstanceDeclaredStaticMethod() → void
+    return super.{self::Mixin::mixedInInstanceDeclaredStaticMethod}();
+  mixin-super-stub method mixedInInstanceImplementedStaticMethod() → void
+    return super.{self::Mixin::mixedInInstanceImplementedStaticMethod}();
+  mixin-super-stub method extendedStaticMixedInInstanceMethod() → void
+    return super.{self::Mixin::extendedStaticMixedInInstanceMethod}();
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  method extendedStaticDeclaredInstanceMethod() → void {}
+  static method extendedInstanceDeclaredStaticMethod() → void {}
+  set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set extendedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get extendedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get extendedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+  method mixedInStaticDeclaredInstanceMethod() → void {}
+  static method mixedInInstanceDeclaredStaticMethod() → void {}
+  method implementedStaticDeclaredInstanceMethod() → void {}
+  static method implementedInstanceDeclaredStaticMethod() → void {}
+  set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set implementedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get implementedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get implementedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+}
+static method main() → dynamic {}
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
new file mode 100644
index 0000000..e5cd1f8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart.weak.transformed.expect
@@ -0,0 +1,158 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:58:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void extendedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:7:8: Context: This is the inherited member.
+//   void extendedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:67:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get extendedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:16:12: Context: This is the inherited member.
+//   void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// 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:73:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void implementedInstanceDeclaredStaticMethod() {}
+//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:38:8: Context: This is the inherited member.
+//   void implementedInstanceDeclaredStaticMethod() {}
+//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:82:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static int get implementedInstanceSetterDeclaredStaticGetter => 0;
+//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:47:12: Context: This is the inherited member.
+//   void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:61:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:10:12: Context: This is the inherited member.
+//   void set extendedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:64:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:13:11: Context: This is the inherited member.
+//   int get extendedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:76:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:41:12: Context: This is the inherited member.
+//   void set implementedInstanceDeclaredStaticSetter(int value) {}
+//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:79:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
+//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/nnbd_mixed/hierarchy/static.dart:44:11: Context: This is the inherited member.
+//   int get implementedInstanceGetterDeclaredStaticSetter => 0;
+//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  synthetic constructor •() → self::Super
+    : super core::Object::•()
+    ;
+  static method extendedStaticDeclaredInstanceMethod() → void {}
+  method extendedInstanceDeclaredStaticMethod() → void {}
+  static set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get extendedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get extendedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set extendedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set extendedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  static method extendedStaticMixedInInstanceMethod() → void {}
+  method extendedInstanceMixedInStaticMethod() → void {}
+  static method extendedStaticImplementedInstanceMethod() → void {}
+  method extendedInstanceImplementedStaticMethod() → void {}
+}
+class Mixin extends core::Object {
+  synthetic constructor •() → self::Mixin
+    : super core::Object::•()
+    ;
+  static method mixedInStaticDeclaredInstanceMethod() → void {}
+  method mixedInInstanceDeclaredStaticMethod() → void {}
+  static method mixedInStaticImplementedInstanceMethod() → void {}
+  method mixedInInstanceImplementedStaticMethod() → void {}
+  method extendedStaticMixedInInstanceMethod() → void {}
+  static method extendedInstanceMixedInStaticMethod() → void {}
+}
+class Interface extends core::Object {
+  synthetic constructor •() → self::Interface
+    : super core::Object::•()
+    ;
+  static method implementedStaticDeclaredInstanceMethod() → void {}
+  method implementedInstanceDeclaredStaticMethod() → void {}
+  static set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  static get implementedStaticGetterDeclaredInstanceSetter() → core::int
+    return 0;
+  get implementedInstanceGetterDeclaredStaticSetter() → core::int
+    return 0;
+  static set implementedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
+  set implementedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
+  method extendedStaticImplementedInstanceMethod() → void {}
+  static method extendedInstanceImplementedStaticMethod() → void {}
+  method mixedInStaticImplementedInstanceMethod() → void {}
+  static method mixedInInstanceImplementedStaticMethod() → void {}
+}
+abstract class _Class&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_Class&Super&Mixin
+    : super self::Super::•()
+    ;
+  method mixedInInstanceDeclaredStaticMethod() → void {}
+  method mixedInInstanceImplementedStaticMethod() → void {}
+  method extendedStaticMixedInInstanceMethod() → void {}
+  static method mixedInStaticDeclaredInstanceMethod() → void {}
+  static method mixedInStaticImplementedInstanceMethod() → void {}
+  static method extendedInstanceMixedInStaticMethod() → void {}
+}
+abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
+  synthetic constructor •() → self::Class
+    : super self::_Class&Super&Mixin::•()
+    ;
+  method extendedStaticDeclaredInstanceMethod() → void {}
+  static method extendedInstanceDeclaredStaticMethod() → void {}
+  set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set extendedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set extendedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get extendedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get extendedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+  method mixedInStaticDeclaredInstanceMethod() → void {}
+  static method mixedInInstanceDeclaredStaticMethod() → void {}
+  method implementedStaticDeclaredInstanceMethod() → void {}
+  static method implementedInstanceDeclaredStaticMethod() → void {}
+  set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
+  set implementedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
+  static set implementedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
+  get implementedStaticSetterDeclaredInstanceGetter() → core::int
+    return 0;
+  static get implementedInstanceSetterDeclaredStaticGetter() → core::int
+    return 0;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 3fa89df..a382980 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -66,6 +66,17 @@
 nnbd/potentially_nullable_access: TypeCheckError
 nnbd_mixed/bad_mixins: TypeCheckError
 nnbd_mixed/covariant_from_opt_in: TypeCheckError
+nnbd_mixed/hierarchy/conflict: TypeCheckError
+nnbd_mixed/hierarchy/duplicates: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_field: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_method: TypeCheckError
+nnbd_mixed/hierarchy/forwarding_semi_stub_setter: TypeCheckError
+nnbd_mixed/hierarchy/getter_setter: TypeCheckError
+nnbd_mixed/hierarchy/in_dill_out_in/in_out_in: TypeCheckError
+nnbd_mixed/hierarchy/in_out_dill_in/in_out_in: TypeCheckError
+nnbd_mixed/hierarchy/in_out_in: TypeCheckError
+nnbd_mixed/hierarchy/mix_in_override: TypeCheckError
+nnbd_mixed/hierarchy/override: TypeCheckError
 nnbd_mixed/inheritance_from_opt_in: TypeCheckError
 nnbd_mixed/issue41567: TypeCheckError
 nnbd_mixed/messages_with_types_opt_in: TypeCheckError
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index 3e152d2..c68cace 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -261,15 +261,9 @@
 // Bound Algorithm.
 // TODO(dmitryas):  Remove [typedefInstantiations] when type arguments passed to
 // typedefs are preserved in the Kernel output.
-List<TypeArgumentIssue> findTypeArgumentIssues(
-    Library library,
-    DartType type,
-    TypeEnvironment typeEnvironment,
-    SubtypeCheckMode subtypeCheckMode,
-    DartType bottomType,
+List<TypeArgumentIssue> findTypeArgumentIssues(Library library, DartType type,
+    TypeEnvironment typeEnvironment, SubtypeCheckMode subtypeCheckMode,
     {bool allowSuperBounded = false}) {
-  assert(bottomType == const NeverType(Nullability.nonNullable) ||
-      bottomType is NullType);
   List<TypeParameter> variables;
   List<DartType> arguments;
   List<TypeArgumentIssue> typedefRhsResult;
@@ -287,7 +281,7 @@
         requiredParameterCount: functionType.requiredParameterCount,
         typedefType: null);
     typedefRhsResult = findTypeArgumentIssues(
-        library, cloned, typeEnvironment, subtypeCheckMode, bottomType,
+        library, cloned, typeEnvironment, subtypeCheckMode,
         allowSuperBounded: true);
     type = functionType.typedefType;
   }
@@ -301,25 +295,25 @@
   } else if (type is FunctionType) {
     List<TypeArgumentIssue> result = <TypeArgumentIssue>[];
     for (TypeParameter parameter in type.typeParameters) {
-      result.addAll(findTypeArgumentIssues(library, parameter.bound,
-              typeEnvironment, subtypeCheckMode, bottomType,
+      result.addAll(findTypeArgumentIssues(
+              library, parameter.bound, typeEnvironment, subtypeCheckMode,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
     for (DartType formal in type.positionalParameters) {
       result.addAll(findTypeArgumentIssues(
-              library, formal, typeEnvironment, subtypeCheckMode, bottomType,
+              library, formal, typeEnvironment, subtypeCheckMode,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
     for (NamedType named in type.namedParameters) {
-      result.addAll(findTypeArgumentIssues(library, named.type, typeEnvironment,
-              subtypeCheckMode, bottomType,
+      result.addAll(findTypeArgumentIssues(
+              library, named.type, typeEnvironment, subtypeCheckMode,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
-    result.addAll(findTypeArgumentIssues(library, type.returnType,
-            typeEnvironment, subtypeCheckMode, bottomType,
+    result.addAll(findTypeArgumentIssues(
+            library, type.returnType, typeEnvironment, subtypeCheckMode,
             allowSuperBounded: true) ??
         const <TypeArgumentIssue>[]);
     return result.isEmpty ? null : result;
@@ -339,7 +333,7 @@
       new Map<TypeParameter, DartType>.fromIterables(variables, arguments);
   for (int i = 0; i < arguments.length; ++i) {
     DartType argument = arguments[i];
-    if (argument is FunctionType && argument.typeParameters.length > 0) {
+    if (isGenericFunctionTypeOrAlias(argument)) {
       // Generic function types aren't allowed as type arguments either.
       result ??= <TypeArgumentIssue>[];
       result.add(new TypeArgumentIssue(i, argument, variables[i], type));
@@ -357,7 +351,7 @@
     }
 
     List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-        library, argument, typeEnvironment, subtypeCheckMode, bottomType,
+        library, argument, typeEnvironment, subtypeCheckMode,
         allowSuperBounded: true);
     if (issues != null) {
       argumentsResult ??= <TypeArgumentIssue>[];
@@ -377,9 +371,8 @@
   if (result == null) return null;
   if (!allowSuperBounded) return result;
 
-  result = null;
-  type = convertSuperBoundedToRegularBounded(
-      library, typeEnvironment, type, bottomType);
+  List<TypeArgumentIssue> convertedResult = null;
+  type = convertSuperBoundedToRegularBounded(library, typeEnvironment, type);
   List<DartType> argumentsToReport = arguments.toList();
   if (type is InterfaceType) {
     variables = type.classNode.typeParameters;
@@ -395,27 +388,27 @@
       new Map<TypeParameter, DartType>.fromIterables(variables, arguments);
   for (int i = 0; i < arguments.length; ++i) {
     DartType argument = arguments[i];
-    if (argument is FunctionType && argument.typeParameters.length > 0) {
+    if (isGenericFunctionTypeOrAlias(argument)) {
       // Generic function types aren't allowed as type arguments either.
-      result ??= <TypeArgumentIssue>[];
-      result.add(
+      convertedResult ??= <TypeArgumentIssue>[];
+      convertedResult.add(
           new TypeArgumentIssue(i, argumentsToReport[i], variables[i], type));
     } else if (!typeEnvironment.isSubtypeOf(argument,
         substitute(variables[i].bound, substitutionMap), subtypeCheckMode)) {
-      result ??= <TypeArgumentIssue>[];
-      result.add(
+      convertedResult ??= <TypeArgumentIssue>[];
+      convertedResult.add(
           new TypeArgumentIssue(i, argumentsToReport[i], variables[i], type));
     }
   }
   if (argumentsResult != null) {
-    result ??= <TypeArgumentIssue>[];
-    result.addAll(argumentsResult);
+    convertedResult ??= <TypeArgumentIssue>[];
+    convertedResult.addAll(argumentsResult);
   }
   if (typedefRhsResult != null) {
-    result ??= <TypeArgumentIssue>[];
-    result.addAll(typedefRhsResult);
+    convertedResult ??= <TypeArgumentIssue>[];
+    convertedResult.addAll(typedefRhsResult);
   }
-  return result;
+  return convertedResult == null || convertedResult.isEmpty ? null : result;
 }
 
 // Finds type arguments that don't follow the rules of well-boundness.
@@ -448,7 +441,7 @@
     if (argument is TypeParameterType && argument.promotedBound != null) {
       result ??= <TypeArgumentIssue>[];
       result.add(new TypeArgumentIssue(i, argument, parameters[i], null));
-    } else if (argument is FunctionType && argument.typeParameters.length > 0) {
+    } else if (isGenericFunctionTypeOrAlias(argument)) {
       // Generic function types aren't allowed as type arguments either.
       result ??= <TypeArgumentIssue>[];
       result.add(new TypeArgumentIssue(i, argument, parameters[i], null));
@@ -464,7 +457,7 @@
     }
 
     List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-        library, argument, typeEnvironment, subtypeCheckMode, bottomType,
+        library, argument, typeEnvironment, subtypeCheckMode,
         allowSuperBounded: true);
     if (issues != null) {
       result ??= <TypeArgumentIssue>[];
@@ -486,61 +479,91 @@
 /// Replaces all covariant occurrences of `dynamic`, `Object`, and `void` with
 /// [BottomType] and all contravariant occurrences of `Null` and [BottomType]
 /// with `Object`.
-DartType convertSuperBoundedToRegularBounded(Library clientLibrary,
-    TypeEnvironment typeEnvironment, DartType type, DartType bottomType,
-    {bool isCovariant = true}) {
-  bool isTop = clientLibrary.isNonNullableByDefault
-      ? typeEnvironment.coreTypes.isTop(type)
-      : type is DynamicType ||
-          type is VoidType ||
-          type is InterfaceType &&
-              type.classNode == typeEnvironment.coreTypes.objectClass;
-  if (isTop && isCovariant) {
+DartType convertSuperBoundedToRegularBounded(
+    Library clientLibrary, TypeEnvironment typeEnvironment, DartType type,
+    {int variance = Variance.covariant}) {
+  bool flipTop;
+  bool flipBottom;
+  DartType topType;
+  DartType bottomType;
+  bool isTop;
+  bool isBottom;
+  if (clientLibrary.isNonNullableByDefault) {
+    flipTop = variance != Variance.contravariant;
+    flipBottom = variance == Variance.contravariant;
+    topType = typeEnvironment.coreTypes.objectNullableRawType;
+    bottomType = const NeverType(Nullability.nonNullable);
+    isTop = typeEnvironment.coreTypes.isTop(type);
+    isBottom = typeEnvironment.coreTypes.isBottom(type);
+  } else {
+    flipTop = variance == Variance.covariant;
+    flipBottom = variance != Variance.covariant;
+    topType = const DynamicType();
+    bottomType = const NullType();
+    isTop = type is DynamicType ||
+        type is VoidType ||
+        type is InterfaceType &&
+            type.classNode == typeEnvironment.coreTypes.objectClass;
+    isBottom = type is NullType || type is BottomType;
+  }
+
+  if (isTop && flipTop) {
     return bottomType;
-  } else if ((type == bottomType || type is BottomType) && !isCovariant) {
-    return typeEnvironment.coreTypes.objectLegacyRawType;
-  } else if (type is InterfaceType && type.classNode.typeParameters != null) {
-    List<DartType> replacedTypeArguments =
-        new List<DartType>.filled(type.typeArguments.length, null);
-    for (int i = 0; i < replacedTypeArguments.length; i++) {
-      replacedTypeArguments[i] = convertSuperBoundedToRegularBounded(
-          clientLibrary, typeEnvironment, type.typeArguments[i], bottomType,
-          isCovariant: isCovariant);
+  } else if (isBottom && flipBottom) {
+    return topType;
+  } else if (type is InterfaceType &&
+      type.classNode.typeParameters.isNotEmpty) {
+    assert(type.classNode.typeParameters.length == type.typeArguments.length);
+
+    List<DartType> replacedTypeArguments = <DartType>[];
+    for (int i = 0; i < type.typeArguments.length; ++i) {
+      replacedTypeArguments.add(convertSuperBoundedToRegularBounded(
+          clientLibrary, typeEnvironment, type.typeArguments[i],
+          variance: variance));
     }
     return new InterfaceType(
         type.classNode, type.nullability, replacedTypeArguments);
-  } else if (type is TypedefType && type.typedefNode.typeParameters != null) {
-    List<DartType> replacedTypeArguments =
-        new List<DartType>.filled(type.typeArguments.length, null);
-    for (int i = 0; i < replacedTypeArguments.length; i++) {
-      replacedTypeArguments[i] = convertSuperBoundedToRegularBounded(
-          clientLibrary, typeEnvironment, type.typeArguments[i], bottomType,
-          isCovariant: isCovariant);
+  } else if (type is TypedefType &&
+      type.typedefNode.typeParameters.isNotEmpty) {
+    assert(type.typedefNode.typeParameters.length == type.typeArguments.length);
+
+    List<DartType> replacedTypeArguments = <DartType>[];
+    for (int i = 0; i < type.typeArguments.length; i++) {
+      // The implementation of instantiate-to-bound in legacy mode ignored the
+      // variance of type parameters of the typedef.  This behavior is preserved
+      // here in passing the 'variance' parameter unchanged in for legacy
+      // libraries.
+      replacedTypeArguments.add(convertSuperBoundedToRegularBounded(
+          clientLibrary, typeEnvironment, type.typeArguments[i],
+          variance: clientLibrary.isNonNullableByDefault
+              ? Variance.combine(
+                  variance, type.typedefNode.typeParameters[i].variance)
+              : variance));
     }
     return new TypedefType(
         type.typedefNode, type.nullability, replacedTypeArguments);
   } else if (type is FunctionType) {
-    DartType replacedReturnType = convertSuperBoundedToRegularBounded(
-        clientLibrary, typeEnvironment, type.returnType, bottomType,
-        isCovariant: isCovariant);
-    List<DartType> replacedPositionalParameters =
-        new List<DartType>.filled(type.positionalParameters.length, null);
-    for (int i = 0; i < replacedPositionalParameters.length; i++) {
-      replacedPositionalParameters[i] = convertSuperBoundedToRegularBounded(
-          clientLibrary,
-          typeEnvironment,
-          type.positionalParameters[i],
-          bottomType,
-          isCovariant: !isCovariant);
+    if (clientLibrary.isNonNullableByDefault && type.typedefType != null) {
+      return convertSuperBoundedToRegularBounded(
+          clientLibrary, typeEnvironment, type.typedefType,
+          variance: variance);
     }
-    List<NamedType> replacedNamedParameters =
-        new List<NamedType>.filled(type.namedParameters.length, null);
-    for (int i = 0; i < replacedNamedParameters.length; i++) {
-      replacedNamedParameters[i] = new NamedType(
+    DartType replacedReturnType = convertSuperBoundedToRegularBounded(
+        clientLibrary, typeEnvironment, type.returnType,
+        variance: variance);
+    List<DartType> replacedPositionalParameters = <DartType>[];
+    for (int i = 0; i < type.positionalParameters.length; i++) {
+      replacedPositionalParameters.add(convertSuperBoundedToRegularBounded(
+          clientLibrary, typeEnvironment, type.positionalParameters[i],
+          variance: Variance.combine(variance, Variance.contravariant)));
+    }
+    List<NamedType> replacedNamedParameters = <NamedType>[];
+    for (int i = 0; i < type.namedParameters.length; i++) {
+      replacedNamedParameters.add(new NamedType(
           type.namedParameters[i].name,
-          convertSuperBoundedToRegularBounded(clientLibrary, typeEnvironment,
-              type.namedParameters[i].type, bottomType,
-              isCovariant: !isCovariant));
+          convertSuperBoundedToRegularBounded(
+              clientLibrary, typeEnvironment, type.namedParameters[i].type,
+              variance: Variance.combine(variance, Variance.contravariant))));
     }
     return new FunctionType(
         replacedPositionalParameters, replacedReturnType, type.nullability,
@@ -551,7 +574,8 @@
   } else if (type is FutureOrType) {
     return new FutureOrType(
         convertSuperBoundedToRegularBounded(
-            clientLibrary, typeEnvironment, type.typeArgument, bottomType),
+            clientLibrary, typeEnvironment, type.typeArgument,
+            variance: variance),
         type.declaredNullability);
   }
   return type;
@@ -713,3 +737,8 @@
     return Variance.unrelated;
   }
 }
+
+bool isGenericFunctionTypeOrAlias(DartType type) {
+  if (type is TypedefType) type = type.unalias;
+  return type is FunctionType && type.typeParameters.isNotEmpty;
+}
diff --git a/tools/VERSION b/tools/VERSION
index 7b3ba46..9d970ca 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 205
+PRERELEASE 206
 PRERELEASE_PATCH 0
\ No newline at end of file