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