Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: pkg/analyzer/test/src/task/strong/checker_test.dart

Issue 1921823007: Make types concrete when checking overrides. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 9a7b128a5e556098782b417bbecdbd6b4cad6da8..28ab23aa81a90a172b1a8dbc7725a5d356d6de3b 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -229,10 +229,8 @@ void main() {
test('dynamic invocation', () {
checkFile('''
- class A {
- dynamic call(dynamic x) => x;
- }
- class B extends A {
+ typedef dynamic A(dynamic x);
+ class B {
int call(int x) => x;
double col(double x) => x;
}
@@ -276,7 +274,6 @@ void main() {
/*info:DYNAMIC_INVOKE*/g.foo(42.0);
/*info:DYNAMIC_INVOKE*/g./*info:UNDEFINED_GETTER*/x;
A f = new B();
- f.call(/*info:ARGUMENT_TYPE_NOT_ASSIGNABLE*/32.0);
/*info:DYNAMIC_INVOKE*/f.col(42.0);
/*info:DYNAMIC_INVOKE*/f.foo(42.0);
/*info:DYNAMIC_INVOKE*/f./*warning:UNDEFINED_GETTER*/x;
@@ -2002,6 +1999,99 @@ void main() {
''');
});
+ test('method override, fuzzy arrows', () {
+ checkFile('''
+ abstract class A {
+ bool operator ==(Object object);
+ }
+
+ class B implements A {}
+
+
+ class F {
+ void f(x) {}
+ void g(int x) {}
+ }
+
+ class G extends F {
+ /*severe:INVALID_METHOD_OVERRIDE*/void f(int x) {}
+ void g(dynamic x) {}
+ }
+
+ class H implements F {
+ /*severe:INVALID_METHOD_OVERRIDE*/void f(int x) {}
+ void g(dynamic x) {}
+ }
+
+ ''');
+ });
+
+ test('getter override, fuzzy arrows', () {
+ checkFile('''
+ typedef void ToVoid<T>(T x);
+ class F {
+ ToVoid<dynamic> get f => null;
+ ToVoid<int> get g => null;
+ }
+
+ class G extends F {
+ ToVoid<int> get f => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/ToVoid<dynamic> get g => null;
+ }
+
+ class H implements F {
+ ToVoid<int> get f => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/ToVoid<dynamic> get g => null;
+ }
+ ''');
+ });
+
+ test('setter override, fuzzy arrows', () {
+ checkFile('''
+ typedef void ToVoid<T>(T x);
+ class F {
+ void set f(ToVoid<dynamic> x) {}
+ void set g(ToVoid<int> x) {}
+ void set h(dynamic x) {}
+ void set i(int x) {}
+ }
+
+ class G extends F {
+ /*severe:INVALID_METHOD_OVERRIDE*/void set f(ToVoid<int> x) {}
+ void set g(ToVoid<dynamic> x) {}
+ void set h(int x) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/void set i(dynamic x) {}
+ }
+
+ class H implements F {
+ /*severe:INVALID_METHOD_OVERRIDE*/void set f(ToVoid<int> x) {}
+ void set g(ToVoid<dynamic> x) {}
+ void set h(int x) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/void set i(dynamic x) {}
+ }
+ ''');
+ });
+
+ test('field override, fuzzy arrows', () {
+ checkFile('''
+ typedef void ToVoid<T>(T x);
+ class F {
+ final ToVoid<dynamic> f = null;
+ final ToVoid<int> g = null;
+ }
+
+ class G extends F {
+ /*severe:INVALID_FIELD_OVERRIDE*/final ToVoid<int> f = null;
+ /*severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/final ToVoid<dynamic> g = null;
+ }
+
+ class H implements F {
+ final ToVoid<int> f = null;
+ /*severe:INVALID_METHOD_OVERRIDE*/final ToVoid<dynamic> g = null;
+ }
+ ''');
+ });
+
test('generic class method override', () {
checkFile('''
class A {}
@@ -2631,7 +2721,7 @@ void main() {
implements I1 {}
class T2 extends Base implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/m(a) {}
+ m(a) {}
}
class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T3
@@ -2639,7 +2729,7 @@ void main() {
implements I1 {}
class T4 extends Object with Base implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/m(a) {}
+ m(a) {}
}
''');
});
« no previous file with comments | « pkg/analyzer/lib/src/task/strong/checker.dart ('k') | pkg/analyzer/test/src/task/strong/inferred_type_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698