Index: pkg/analyzer/test/src/task/strong/checker_test.dart |
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart |
index 2819766276cd08b015b0f8dcb115ae12739202b8..a0ef7e35e3c32aff4f6550b6dfd1e5b0584001ff 100644 |
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart |
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart |
@@ -2478,6 +2478,63 @@ dynamic y1 = (<dynamic>[])[0]; |
await check(implicitDynamic: false); |
} |
+ test_interfaceOverridesAreAllChecked() { |
+ // Regression test for https://github.com/dart-lang/sdk/issues/29766 |
+ return checkFile(r''' |
+class B { |
+ set x(int y) {} |
+} |
+class C { |
+ set x(Object y) {} |
+} |
+class D implements B, C { |
+ /*error:INVALID_METHOD_OVERRIDE*/int x; |
+} |
+ '''); |
+ } |
+ |
+ test_interfacesFromMixinsAreChecked() { |
+ // Regression test for https://github.com/dart-lang/sdk/issues/29782 |
+ return checkFile(r''' |
+abstract class I { |
+ set x(int v); |
+} |
+abstract class M implements I {} |
+ |
+class C extends Object with M { |
+ /*error:INVALID_METHOD_OVERRIDE*/String x; |
+} |
+ |
+abstract class M2 = Object with M; |
+ |
+class C2 extends Object with M2 { |
+ /*error:INVALID_METHOD_OVERRIDE*/String x; |
+} |
+ '''); |
+ } |
+ |
+ test_interfacesFromMixinsUsedTwiceAreChecked() { |
+ // Regression test for https://github.com/dart-lang/sdk/issues/29782 |
+ return checkFile(r''' |
+abstract class I<E> { |
+ set x(E v); |
+} |
+abstract class M<E> implements I<E> {} |
+ |
+class C extends Object with M<int> { |
+ /*error:INVALID_METHOD_OVERRIDE*/String x; |
+} |
+ |
+abstract class D extends Object with M<num> {} |
+class E extends D with M<int> { |
+ /*error:INVALID_METHOD_OVERRIDE*/int x; |
+} |
+class F extends D with M<int> { |
+ num x; |
+} |
+ '''); |
+ } |
+ |
test_invalidOverrides_baseClassOverrideToChildInterface() async { |
await checkFile(''' |
class A {} |
@@ -3324,21 +3381,24 @@ class D extends B implements A { } |
'''); |
} |
- test_overrideNarrowsType_noDuplicateError() async { |
+ test_overrideNarrowsType_noDuplicateError() { |
// Regression test for https://github.com/dart-lang/sdk/issues/25232 |
- _addMetaLibrary(); |
- await checkFile(r''' |
-import 'meta.dart'; |
+ return checkFile(r''' |
abstract class A { void test(A arg) { } } |
abstract class B extends A { |
/*error:INVALID_METHOD_OVERRIDE*/void test(B arg) { } |
} |
abstract class X implements A { } |
-class C extends B with X { } |
+ |
+class C extends B {} |
+ |
+// We treat "with X" as asking for another check. |
+// This feels inconsistent. |
+class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B with X { } |
// We treat "implements A" as asking for another check. |
-// This feels inconsistent to me. |
-class D /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { } |
+// This feels inconsistent. |
+class E /*error:INVALID_METHOD_OVERRIDE_FROM_BASE*/extends B implements A { } |
'''); |
} |