[Fasta] Additional override checks
Checks override on fields and for methods with type parameters.
Bug: 32613
Change-Id: Ia32d1080959bc706fd72a075fb6ba724fa93fd58
Reviewed-on: https://dart-review.googlesource.com/64542
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index 7359ca5b..8240c6c 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -37,18 +37,12 @@
bool get useCFE => true;
@override
- @failingTest
test_overrideOnNonOverridingField_inInterface() {
- // Expected 1 errors of type
- // StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
return super.test_overrideOnNonOverridingField_inInterface();
}
@override
- @failingTest
test_overrideOnNonOverridingField_inSuperclass() {
- // Expected 1 errors of type
- // StrongModeCode.STRONG_MODE_INVALID_METHOD_OVERRIDE, found 0
return super.test_overrideOnNonOverridingField_inSuperclass();
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index 3ac31ab..cecffd7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -311,6 +311,22 @@
checkSetterOverride(
hierarchy, typeEnvironment, declaredMember, interfaceMember);
}
+ } else {
+ bool declaredMemberHasGetter = declaredMember is Field ||
+ declaredMember is Procedure && declaredMember.isGetter;
+ bool interfaceMemberHasGetter = interfaceMember is Field ||
+ interfaceMember is Procedure && interfaceMember.isGetter;
+ bool declaredMemberHasSetter = declaredMember is Field ||
+ declaredMember is Procedure && declaredMember.isSetter;
+ bool interfaceMemberHasSetter = interfaceMember is Field ||
+ interfaceMember is Procedure && interfaceMember.isSetter;
+ if (declaredMemberHasGetter && interfaceMemberHasGetter) {
+ checkGetterOverride(
+ hierarchy, typeEnvironment, declaredMember, interfaceMember);
+ } else if (declaredMemberHasSetter && interfaceMemberHasSetter) {
+ checkSetterOverride(
+ hierarchy, typeEnvironment, declaredMember, interfaceMember);
+ }
}
// TODO(ahe): Handle other cases: accessors, operators, and fields.
});
@@ -621,8 +637,32 @@
declaredFunction?.typeParameters != null) {
var substitution = <TypeParameter, DartType>{};
for (int i = 0; i < declaredFunction.typeParameters.length; ++i) {
- var declaredParameter = declaredFunction.typeParameters[i];
- var interfaceParameter = interfaceFunction.typeParameters[i];
+ TypeParameter declaredParameter = declaredFunction.typeParameters[i];
+ TypeParameter interfaceParameter = interfaceFunction.typeParameters[i];
+ if (!interfaceParameter.isGenericCovariantImpl) {
+ DartType declaredBound = declaredParameter.bound;
+ DartType interfaceBound = interfaceParameter.bound;
+ if (interfaceSubstitution != null) {
+ declaredBound = interfaceSubstitution.substituteType(declaredBound);
+ interfaceBound =
+ interfaceSubstitution.substituteType(interfaceBound);
+ }
+ if (declaredBound != interfaceBound) {
+ addProblem(
+ templateOverrideTypeVariablesMismatch.withArguments(
+ "$name::${declaredMember.name.name}",
+ "${interfaceMember.enclosingClass.name}::"
+ "${interfaceMember.name.name}"),
+ declaredMember.fileOffset,
+ noLength,
+ context: [
+ templateOverriddenMethodCause
+ .withArguments(interfaceMember.name.name)
+ .withLocation(_getMemberUri(interfaceMember),
+ interfaceMember.fileOffset, noLength)
+ ]);
+ }
+ }
substitution[interfaceParameter] =
new TypeParameterType(declaredParameter);
}
@@ -642,14 +682,15 @@
DartType declaredType,
DartType interfaceType,
bool isCovariant,
- VariableDeclaration declaredParameter) {
+ VariableDeclaration declaredParameter,
+ {bool asIfDeclaredParameter = false}) {
if (!library.loader.target.backendTarget.strongMode) return false;
if (interfaceSubstitution != null) {
interfaceType = interfaceSubstitution.substituteType(interfaceType);
}
- bool inParameter = declaredParameter != null;
+ bool inParameter = declaredParameter != null || asIfDeclaredParameter;
DartType subtype = inParameter ? interfaceType : declaredType;
DartType supertype = inParameter ? declaredType : interfaceType;
@@ -840,8 +881,8 @@
void checkGetterOverride(
ClassHierarchy hierarchy,
TypeEnvironment typeEnvironment,
- Procedure declaredMember,
- Procedure interfaceMember) {
+ Member declaredMember,
+ Member interfaceMember) {
if (declaredMember.enclosingClass != cls) {
// TODO(paulberry): Include these checks as well, but the message needs to
// explain that [declaredMember] is inherited.
@@ -858,8 +899,8 @@
void checkSetterOverride(
ClassHierarchy hierarchy,
TypeEnvironment typeEnvironment,
- Procedure declaredMember,
- Procedure interfaceMember) {
+ Member declaredMember,
+ Member interfaceMember) {
if (declaredMember.enclosingClass != cls) {
// TODO(paulberry): Include these checks as well, but the message needs to
// explain that [declaredMember] is inherited.
@@ -869,8 +910,10 @@
hierarchy, declaredMember, interfaceMember, null, null);
var declaredType = declaredMember.setterType;
var interfaceType = interfaceMember.setterType;
- var declaredParameter = declaredMember.function.positionalParameters[0];
- bool isCovariant = declaredParameter.isCovariant;
+ var declaredParameter =
+ declaredMember.function?.positionalParameters?.elementAt(0);
+ bool isCovariant = declaredParameter?.isCovariant ?? false;
+ if (declaredMember is Field) isCovariant = declaredMember.isCovariant;
_checkTypes(
typeEnvironment,
interfaceSubstitution,
@@ -879,7 +922,8 @@
declaredType,
interfaceType,
isCovariant,
- declaredParameter);
+ declaredParameter,
+ asIfDeclaredParameter: true);
}
String get fullNameForErrors {
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart b/pkg/front_end/testcases/inference/conflicts_can_happen.dart
index aaebf32..ce73f69 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart
@@ -22,13 +22,13 @@
}
class C1 implements A, B {
- get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
null;
}
// Still ambiguous
class C2 implements B, A {
- get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
null;
}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index 9cc64f9..c37d0e9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -1,14 +1,34 @@
// Errors:
//
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
// Specify the type explicitly.
-// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
-// ^
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
//
-// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
// Specify the type explicitly.
-// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
-// ^
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: The return type of the method 'C1::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:163: Error: The return type of the method 'C1::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
library test;
import self as self;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
index 85e0bd5..150baa5 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart
@@ -31,7 +31,7 @@
}
class C2 implements A, B {
- get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+ get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
null;
}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 69d9cd1..746541f 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -1,9 +1,19 @@
// Errors:
//
-// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: Can't infer the type of 'a': overridden members must all have the same type.
// Specify the type explicitly.
-// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
-// ^
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I1).
+// Change to a subtype of test::I1.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:163: Error: The return type of the method 'C2::a' is dynamic, which does not match the return type of the overridden method (test::I2).
+// Change to a subtype of test::I2.
+// get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ a =>
+// ^
library test;
import self as self;
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
index fcd76d6..d3420e5 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
@@ -1,3 +1,10 @@
+// Errors:
+//
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+// /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+// ^
+
library test;
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
index a7484f4..8b6336a 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart
@@ -29,15 +29,15 @@
// Superclasses don't have a consistent type for `x` so inference fails, even if
// the types are related.
class F extends A implements C {
- var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
}
class G extends A implements D {
- var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
}
class H extends C implements D {
- var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+ var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
}
main() {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index e636683..ec15c8d 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -1,19 +1,49 @@
// Errors:
//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
// Specify the type explicitly.
-// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
-// ^
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
// Specify the type explicitly.
-// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
-// ^
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
//
-// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: Can't infer the type of 'x': overridden members must all have the same type.
// Specify the type explicitly.
-// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
-// ^
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: The return type of the method 'F::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:163: Error: The return type of the method 'F::x' is dynamic, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: The return type of the method 'G::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:163: Error: The return type of the method 'G::x' is dynamic, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: The return type of the method 'H::x' is dynamic, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
+//
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:163: Error: The return type of the method 'H::x' is dynamic, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ /*@error=OverrideTypeMismatchReturnType*/ /*@error=OverrideTypeMismatchReturnType*/ x;
+// ^
library test;
import self as self;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index 615fcf8..9b83615 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -1,3 +1,10 @@
+// Errors:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B::x' is dynamic, which does not match the return type of the overridden method (dart.core::int).
+// Change to a subtype of dart.core::int.
+// /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+// ^
+
library test;
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
index ad2a9c8..dcef35c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
@@ -1,3 +1,10 @@
+// Errors:
+//
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:16:24: Error: The return type of the method 'B::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::double).
+// Change to a subtype of dart.core::double.
+// var /*@topType=int*/ x;
+// ^
+
library test;
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
index 85d23e6..d765039 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
@@ -1,3 +1,10 @@
+// Errors:
+//
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:19:24: Error: The return type of the method 'C::x' is dart.core::int, which does not match the return type of the overridden method (dart.core::num).
+// Change to a subtype of dart.core::num.
+// var /*@topType=int*/ x;
+// ^
+
library test;
import self as self;
import "dart:core" as core;
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index df66ba2..a716a8e 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -3,9 +3,13 @@
# BSD-style license that can be found in the LICENSE file.
[ $compiler == fasta ]
+Language/Classes/Getters/override_t02: CompileTimeError
+Language/Classes/Getters/override_t03: CompileTimeError
+Language/Classes/Setters/override_t02: CompileTimeError
Language/Classes/definition_t24: MissingCompileTimeError
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
+Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError
Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
LayoutTests/*: Skip # TODO(ahe): Make dart:html available.
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 245b238..ab8f393 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -40,8 +40,6 @@
Language/Classes/Getters/instance_getter_t04: MissingCompileTimeError
Language/Classes/Getters/instance_getter_t05: MissingCompileTimeError
Language/Classes/Getters/instance_getter_t06: MissingCompileTimeError
-Language/Classes/Getters/override_t02: MissingCompileTimeError
-Language/Classes/Getters/override_t03: MissingCompileTimeError
Language/Classes/Getters/type_object_t01: CompileTimeError
Language/Classes/Getters/type_object_t02: CompileTimeError
Language/Classes/Instance_Methods/override_different_default_values_t01: MissingCompileTimeError
@@ -62,7 +60,6 @@
Language/Classes/Setters/instance_setter_t06: MissingCompileTimeError
Language/Classes/Setters/name_t06: CompileTimeError
Language/Classes/Setters/name_t07: CompileTimeError
-Language/Classes/Setters/override_t02: MissingCompileTimeError
Language/Classes/Static_Methods/same_name_method_and_setter_t01: CompileTimeError
Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
@@ -160,6 +157,7 @@
Language/Metadata/compilation_t03: MissingCompileTimeError
Language/Mixins/Mixin_Application/deferred_t01: MissingCompileTimeError
Language/Mixins/Mixin_Application/static_warning_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # The test even says in the comment it should be a compile time error
Language/Mixins/declaring_constructor_t05: MissingCompileTimeError
Language/Mixins/declaring_constructor_t06: MissingCompileTimeError
Language/Overview/Privacy/private_and_public_t11: CompileTimeError
diff --git a/tests/language_2/check_member_static_test.dart b/tests/language_2/check_member_static_test.dart
index 7f662eb..90aba31 100644
--- a/tests/language_2/check_member_static_test.dart
+++ b/tests/language_2/check_member_static_test.dart
@@ -10,7 +10,7 @@
class B extends A {}
class C extends B {
- var a; //# 01: compile-time error
+ var a; //# 01: ok
static var b; //# 02: compile-time error
}
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 84e6cba..1f82933 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -70,6 +70,7 @@
bad_initializer2_negative_test: Fail # Issue 14880
built_in_identifier_prefix_test: CompileTimeError
built_in_identifier_type_annotation_test/dynamic-gen: MissingCompileTimeError # Issue 28813
+check_member_static_test/01: CompileTimeError
config_import_corelib_test: StaticWarning, OK
conflicting_type_variable_and_setter_test: CompileTimeError # Issue 25525
const_cast2_test/01: CompileTimeError
@@ -416,10 +417,6 @@
override_inheritance_field_test/26: CompileTimeError
override_inheritance_field_test/29: CompileTimeError
override_inheritance_field_test/42: CompileTimeError
-override_inheritance_field_test/43: CompileTimeError
-override_inheritance_field_test/45: CompileTimeError
-override_inheritance_field_test/49: CompileTimeError
-override_inheritance_field_test/50: CompileTimeError
override_inheritance_generic_test/02: CompileTimeError
override_inheritance_method_test/28: CompileTimeError
override_inheritance_method_test/29: CompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 36b3ae9..2e158a0 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -569,7 +569,6 @@
await_not_started_immediately_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
call_non_method_field_test/01: MissingCompileTimeError
call_non_method_field_test/02: MissingCompileTimeError
-check_member_static_test/01: MissingCompileTimeError
class_literal_static_test/01: MissingCompileTimeError
class_literal_static_test/03: MissingCompileTimeError
class_literal_static_test/07: MissingCompileTimeError
@@ -590,10 +589,7 @@
f_bounded_quantification_test/02: MissingCompileTimeError
factory4_test/00: MissingCompileTimeError
field3_test/01: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_overriding_test/01: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
generic_methods_unused_parameter_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
identical_const_test/01: MissingCompileTimeError
@@ -655,11 +651,6 @@
named_constructor_test/01: MissingCompileTimeError
override_field_test/02: MissingCompileTimeError
override_field_test/03: MissingCompileTimeError
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
partial_tearoff_instantiation_test/05: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
partial_tearoff_instantiation_test/06: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
partial_tearoff_instantiation_test/07: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
@@ -771,7 +762,6 @@
call_non_method_field_test/01: MissingCompileTimeError
call_non_method_field_test/02: MissingCompileTimeError
call_with_no_such_method_test: RuntimeError
-check_member_static_test/01: MissingCompileTimeError
class_literal_static_test/01: MissingCompileTimeError
class_literal_static_test/03: MissingCompileTimeError
class_literal_static_test/07: MissingCompileTimeError
@@ -791,10 +781,7 @@
f_bounded_quantification_test/02: MissingCompileTimeError
factory4_test/00: MissingCompileTimeError
field3_test/01: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_overriding_test/01: MissingCompileTimeError
generic_methods_recursive_bound_test/02: MissingCompileTimeError
identical_const_test/01: MissingCompileTimeError
identical_const_test/02: MissingCompileTimeError
@@ -863,11 +850,6 @@
overridden_no_such_method_test: RuntimeError
override_field_test/02: MissingCompileTimeError
override_field_test/03: MissingCompileTimeError
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
recursive_generic_test: RuntimeError
redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
redirecting_factory_malbounded_test/01: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index e74d513..9935e31 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -28,6 +28,7 @@
built_in_identifier_type_annotation_test/dynamic-list: RuntimeError # Issue 28816
cascaded_forwarding_stubs_generic_test: RuntimeError
cascaded_forwarding_stubs_test: CompileTimeError
+check_member_static_test/01: CompileTimeError
conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
conflicting_generic_interfaces_simple_test: MissingCompileTimeError
conflicting_type_variable_and_setter_test: CompileTimeError
@@ -133,10 +134,6 @@
override_inheritance_field_test/26: CompileTimeError
override_inheritance_field_test/29: CompileTimeError
override_inheritance_field_test/42: CompileTimeError
-override_inheritance_field_test/43: CompileTimeError
-override_inheritance_field_test/45: CompileTimeError
-override_inheritance_field_test/49: CompileTimeError
-override_inheritance_field_test/50: CompileTimeError
override_inheritance_generic_test/02: CompileTimeError
override_inheritance_method_test/28: CompileTimeError
override_inheritance_method_test/29: CompileTimeError
@@ -315,7 +312,6 @@
call_method_must_not_be_getter_test/06: RuntimeError # Kernel does not distinguish `d()` from `d.call()`
call_non_method_field_test/01: MissingCompileTimeError
call_non_method_field_test/02: MissingCompileTimeError
-check_member_static_test/01: MissingCompileTimeError
class_cycle_test/02: MissingCompileTimeError
class_cycle_test/03: MissingCompileTimeError
compile_time_constant_c_test/02: MissingCompileTimeError
@@ -373,8 +369,6 @@
f_bounded_quantification_test/02: MissingCompileTimeError
factory4_test/00: MissingCompileTimeError
field_initialization_order_test/01: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
function_propagation_test: RuntimeError
function_type_parameter2_negative_test: Fail
function_type_parameter_negative_test: Fail
@@ -382,7 +376,6 @@
generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 29920
generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 29920
generic_methods_generic_function_result_test/01: MissingCompileTimeError
-generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
generic_methods_recursive_bound_test/02: MissingCompileTimeError
generic_no_such_method_dispatcher_simple_test: CompileTimeError # Warning: Superclass has no method named 'foo'.
generic_no_such_method_dispatcher_test: CompileTimeError # Issue 31533
@@ -516,11 +509,6 @@
override_inheritance_field_test/06: CompileTimeError # Issue 31616
override_inheritance_field_test/26: CompileTimeError # Issue 31616
override_inheritance_field_test/29: CompileTimeError # Issue 31616
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
override_inheritance_generic_test/02: CompileTimeError # Issue 31616
override_inheritance_method_test/28: CompileTimeError # Issue 31616
override_inheritance_method_test/29: CompileTimeError # Issue 31616
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index f0225c8..351c684 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -228,7 +228,6 @@
async_return_types_test/wrongReturnType: MissingCompileTimeError # Issue 33068
call_non_method_field_test/01: MissingCompileTimeError # Issue 32975
call_non_method_field_test/02: MissingCompileTimeError # Issue 32975
-check_member_static_test/01: MissingCompileTimeError # Issue 32613
const_cast2_test/01: CompileTimeError # Issue 32517
const_cast2_test/none: CompileTimeError # Issue 32517
const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field. Issue 32326.
@@ -254,10 +253,7 @@
factory4_test/00: MissingCompileTimeError # Issue 32988
field3_test/01: MissingCompileTimeError # Issue 33022
field3_test/02: MissingCompileTimeError # Issue 33022
-field_override_test/00: MissingCompileTimeError # Issue 32613
-field_override_test/01: MissingCompileTimeError # Issue 32613
generic_methods_bounds_test/01: MissingCompileTimeError # Issue 33018
-generic_methods_overriding_test/01: MissingCompileTimeError # Issue 32613
generic_methods_recursive_bound_test/02: MissingCompileTimeError # Issue 33018
issue31596_override_test/07: MissingCompileTimeError
issue31596_override_test/08: MissingCompileTimeError
@@ -315,11 +311,6 @@
named_parameters_default_eq_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
override_field_test/02: MissingCompileTimeError
override_field_test/03: MissingCompileTimeError
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
partial_tearoff_instantiation_test/05: MissingCompileTimeError
partial_tearoff_instantiation_test/06: MissingCompileTimeError
partial_tearoff_instantiation_test/07: MissingCompileTimeError
@@ -364,7 +355,6 @@
void_type_function_types_test/08: MissingCompileTimeError # Issue 32804
void_type_override_test/00: MissingCompileTimeError # Issue 32804
void_type_override_test/00b: MissingCompileTimeError # Issue 32804
-void_type_override_test/00c: MissingCompileTimeError # Issue 32804
void_type_override_test/01: MissingCompileTimeError # Issue 32804
void_type_override_test/03: MissingCompileTimeError # Issue 32804
void_type_usage_test/call_argument: MissingCompileTimeError # Issue 32804
diff --git a/tests/language_2/override_inheritance_field_test.dart b/tests/language_2/override_inheritance_field_test.dart
index d2c6872..bd04da0 100644
--- a/tests/language_2/override_inheritance_field_test.dart
+++ b/tests/language_2/override_inheritance_field_test.dart
@@ -28,18 +28,19 @@
@virtual int field1; //# 41: ok
num field2; //# 42: ok
- int field3; //# 43: ok
+ int field3; //# 43: compile-time error
int field4; //# 44: compile-time error
- int field5; //# 45: ok
+ int field5; //# 45: compile-time error
@virtual num field6; //# 46: ok
num field7; //# 47: compile-time error
num get field8 => null; //# 48: compile-time error
- num field9; //# 49: ok
- num field10; //# 50: ok
+ num field9; //# 49: compile-time error
+ num field10; //# 50: compile-time error
set field11(int _) {} //# 51: ok
void set field12(int _) {} //# 52: ok
num field13; //# 53: compile-time error
set field14(num _) {} //# 54: compile-time error
+ num field15; //# 55: ok
}
class B extends A {
@@ -110,6 +111,7 @@
num field12; //# 52: continued
set field13(String _) {} //# 53: continued
String field14; //# 54: continued
+ set field15(covariant int _) {} //# 55: continued
}
class SubClass extends Class {