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

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

Issue 1780783002: Don't report redundant type errors in strong mode. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Stop type propagation in test. Created 4 years, 9 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 a87577ccd9cc157a9a4f06e6d44678088088dc0d..09738bd19cc465d46b5df8ec364984d366c1ef7a 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -49,7 +49,7 @@ void main() {
int i = 42;
// Check the boolean conversion of the condition.
- print((/*severe:STATIC_TYPE_ERROR*/i) ? false : true);
+ print(/*warning:NON_BOOL_CONDITION*/i ? false : true);
print((/*info:DOWN_CAST_IMPLICIT*/obj) ? false : true);
print((/*info:DYNAMIC_CAST*/dyn) ? false : true);
}
@@ -67,29 +67,28 @@ void main() {
if (b) {}
if (/*info:DYNAMIC_CAST*/dyn) {}
if (/*info:DOWN_CAST_IMPLICIT*/obj) {}
- if (/*severe:STATIC_TYPE_ERROR*/i) {}
+ if (/*warning:NON_BOOL_CONDITION*/i) {}
while (b) {}
while (/*info:DYNAMIC_CAST*/dyn) {}
while (/*info:DOWN_CAST_IMPLICIT*/obj) {}
- while (/*severe:STATIC_TYPE_ERROR*/i) {}
+ while (/*warning:NON_BOOL_CONDITION*/i) {}
do {} while (b);
do {} while (/*info:DYNAMIC_CAST*/dyn);
do {} while (/*info:DOWN_CAST_IMPLICIT*/obj);
- do {} while (/*severe:STATIC_TYPE_ERROR*/i);
+ do {} while (/*warning:NON_BOOL_CONDITION*/i);
for (;b;) {}
for (;/*info:DYNAMIC_CAST*/dyn;) {}
for (;/*info:DOWN_CAST_IMPLICIT*/obj;) {}
- for (;/*severe:STATIC_TYPE_ERROR*/i;) {}
+ for (;/*warning:NON_BOOL_CONDITION*/i;) {}
}
''');
});
test('dynamic invocation', () {
checkFile('''
-
class A {
dynamic call(dynamic x) => x;
}
@@ -103,22 +102,24 @@ void main() {
int x;
double y;
x = f(3);
- x = /*severe:STATIC_TYPE_ERROR*/f.col(3.0);
- y = /*severe:STATIC_TYPE_ERROR*/f(3);
+ x = /*warning:INVALID_ASSIGNMENT*/f.col(3.0);
+ y = /*warning:INVALID_ASSIGNMENT*/f(3);
y = f.col(3.0);
- f(/*severe:STATIC_TYPE_ERROR*/3.0);
- f.col(/*severe:STATIC_TYPE_ERROR*/3);
+ f(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3.0);
+ f.col(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
}
{
Function f = new B();
int x;
double y;
x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
- x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0);
+ x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE, info:INVALID_ASSIGNMENT*/f.col(3.0);
y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f.col(3.0);
- (/*info:DYNAMIC_INVOKE*/f(3.0));
- (/*info:DYNAMIC_INVOKE*/f.col(3));
+ /*info:DYNAMIC_INVOKE*/f(3.0);
+ // Through type propagation, we know f is actually a B, hence the
+ // hint.
+ /*info:DYNAMIC_INVOKE*/f.col(/*info:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
}
{
A f = new B();
@@ -126,19 +127,19 @@ void main() {
double y;
x = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
y = /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/f(3);
- (/*info:DYNAMIC_INVOKE*/f(3.0));
+ /*info:DYNAMIC_INVOKE*/f(3.0);
}
{
dynamic g = new B();
- (/*info:DYNAMIC_INVOKE*/g.call(32.0));
- (/*info:DYNAMIC_INVOKE*/g.col(42.0));
- (/*info:DYNAMIC_INVOKE*/g.foo(42.0));
- (/*info:DYNAMIC_INVOKE*/g./*info:UNDEFINED_GETTER*/x);
+ /*info:DYNAMIC_INVOKE*/g.call(/*info:ARGUMENT_TYPE_NOT_ASSIGNABLE*/32.0);
+ /*info:DYNAMIC_INVOKE*/g.col(42.0);
+ /*info:DYNAMIC_INVOKE*/g.foo(42.0);
+ /*info:DYNAMIC_INVOKE*/g./*info:UNDEFINED_GETTER*/x;
A f = new B();
- f.call(32.0);
- (/*info:DYNAMIC_INVOKE*/f.col(42.0));
- (/*info:DYNAMIC_INVOKE*/f.foo(42.0));
- (/*info:DYNAMIC_INVOKE*/f./*warning:UNDEFINED_GETTER*/x);
+ 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;
}
}
''');
@@ -157,7 +158,7 @@ void main() {
class A {
String x = "hello world";
- void baz1(y) => x + /*info:DYNAMIC_CAST*/y;
+ void baz1(y) { x + /*info:DYNAMIC_CAST*/y; }
static baz2(y) => /*info:DYNAMIC_INVOKE*/y + y;
}
@@ -235,7 +236,7 @@ void main() {
int x;
String y;
- A(this.x) : this.y = /*severe:STATIC_TYPE_ERROR*/42;
+ A(this.x) : this.y = /*warning:FIELD_INITIALIZER_NOT_ASSIGNABLE*/42;
A.c1(p): this.x = /*info:DOWN_CAST_IMPLICIT*/z, this.y = /*info:DYNAMIC_CAST*/p;
@@ -245,17 +246,17 @@ void main() {
}
class B extends A {
- B() : super(/*severe:STATIC_TYPE_ERROR*/"hello");
+ B() : super(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
- B.c2(int x, String y) : super.c2(/*severe:STATIC_TYPE_ERROR*/y,
- /*severe:STATIC_TYPE_ERROR*/x);
+ B.c2(int x, String y) : super.c2(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y,
+ /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/x);
B.c3(num x, Object y) : super.c3(x, /*info:DOWN_CAST_IMPLICIT*/y);
}
void main() {
- A a = new A.c2(/*info:DOWN_CAST_IMPLICIT*/z, /*severe:STATIC_TYPE_ERROR*/z);
- var b = new B.c2(/*severe:STATIC_TYPE_ERROR*/"hello", /*info:DOWN_CAST_IMPLICIT*/obj);
+ A a = new A.c2(/*info:DOWN_CAST_IMPLICIT*/z, /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z);
+ var b = new B.c2(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*info:DOWN_CAST_IMPLICIT*/obj);
}
''');
});
@@ -282,7 +283,7 @@ void main() {
typedef int Foo();
void foo() {}
void main () {
- Foo x = /*severe:STATIC_TYPE_ERROR*/foo();
+ Foo x = /*warning:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo();
}
''');
});
@@ -352,9 +353,9 @@ void main() {
B b;
y = a;
o = a;
- i = /*severe:STATIC_TYPE_ERROR*/a;
- d = /*severe:STATIC_TYPE_ERROR*/a;
- n = /*severe:STATIC_TYPE_ERROR*/a;
+ i = /*warning:INVALID_ASSIGNMENT*/a;
+ d = /*warning:INVALID_ASSIGNMENT*/a;
+ n = /*warning:INVALID_ASSIGNMENT*/a;
a = a;
b = /*info:DOWN_CAST_IMPLICIT*/a;
}
@@ -379,12 +380,12 @@ void main() {
C c;
y = b;
o = b;
- i = /*severe:STATIC_TYPE_ERROR*/b;
- d = /*severe:STATIC_TYPE_ERROR*/b;
- n = /*severe:STATIC_TYPE_ERROR*/b;
+ i = /*warning:INVALID_ASSIGNMENT*/b;
+ d = /*warning:INVALID_ASSIGNMENT*/b;
+ n = /*warning:INVALID_ASSIGNMENT*/b;
a = b;
b = b;
- c = /*severe:STATIC_TYPE_ERROR*/b;
+ c = /*warning:INVALID_ASSIGNMENT*/b;
}
''');
});
@@ -411,12 +412,12 @@ void main() {
{
left = /*info:DOWN_CAST_IMPLICIT*/top;
left = left;
- left = /*severe:STATIC_TYPE_ERROR*/right;
+ left = /*warning:INVALID_ASSIGNMENT*/right;
left = bot;
}
{
right = /*info:DOWN_CAST_IMPLICIT*/top;
- right = /*severe:STATIC_TYPE_ERROR*/left;
+ right = /*warning:INVALID_ASSIGNMENT*/left;
right = right;
right = bot;
}
@@ -444,7 +445,7 @@ void main() {
Object globalTop(int x) => x;
int globalLeft(int x) => x;
Object globalRight(Object x) => x;
- int _bot(Object x) => /*info:DOWN_CAST_IMPLICIT*/x;
+ int bot_(Object x) => /*info:DOWN_CAST_IMPLICIT*/x;
int globalBot(Object x) => x as int;
void main() {
@@ -504,7 +505,7 @@ void main() {
typedef B Bot(A x); // Bottom of the lattice
B left(B x) => x;
- B _bot(A x) => /*info:DOWN_CAST_IMPLICIT*/x;
+ B bot_(A x) => /*info:DOWN_CAST_IMPLICIT*/x;
B bot(A x) => x as B;
A top(B x) => x;
A right(A x) => x;
@@ -866,7 +867,7 @@ void main() {
BToA top(AToB f) => f;
AToB left(AToB f) => f;
BToA right(BToA f) => f;
- AToB _bot(BToA f) => /*warning:DOWN_CAST_COMPOSITE*/f;
+ AToB bot_(BToA f) => /*warning:DOWN_CAST_COMPOSITE*/f;
AToB bot(BToA f) => f as AToB;
void main() {
@@ -916,7 +917,7 @@ void main() {
Function2<B, A> top(AToB f) => f;
Function2<A, B> left(AToB f) => f;
Function2<B, A> right(BToA f) => f;
- Function2<A, B> _bot(BToA f) => /*warning:DOWN_CAST_COMPOSITE*/f;
+ Function2<A, B> bot_(BToA f) => /*warning:DOWN_CAST_COMPOSITE*/f;
Function2<A, B> bot(BToA f) => f as Function2<A, B>;
void main() {
@@ -966,7 +967,7 @@ void main() {
BToA top(Function2<A, B> f) => f;
AToB left(Function2<A, B> f) => f;
BToA right(Function2<B, A> f) => f;
- AToB _bot(Function2<B, A> f) => /*warning:DOWN_CAST_COMPOSITE*/f;
+ AToB bot_(Function2<B, A> f) => /*warning:DOWN_CAST_COMPOSITE*/f;
AToB bot(Function2<B, A> f) => f as AToB;
void main() {
@@ -1071,91 +1072,91 @@ void main() {
r = r;
r = o;
- r = /*severe:STATIC_TYPE_ERROR*/n;
- r = /*severe:STATIC_TYPE_ERROR*/rr;
+ r = /*warning:INVALID_ASSIGNMENT*/n;
+ r = /*warning:INVALID_ASSIGNMENT*/rr;
r = ro;
r = rn;
r = oo;
- r = /*severe:STATIC_TYPE_ERROR*/nn;
- r = /*severe:STATIC_TYPE_ERROR*/nnn;
+ r = /*warning:INVALID_ASSIGNMENT*/nn;
+ r = /*warning:INVALID_ASSIGNMENT*/nnn;
o = /*warning:DOWN_CAST_COMPOSITE*/r;
o = o;
- o = /*severe:STATIC_TYPE_ERROR*/n;
- o = /*severe:STATIC_TYPE_ERROR*/rr;
- o = /*severe:STATIC_TYPE_ERROR*/ro;
- o = /*severe:STATIC_TYPE_ERROR*/rn;
+ o = /*warning:INVALID_ASSIGNMENT*/n;
+ o = /*warning:INVALID_ASSIGNMENT*/rr;
+ o = /*warning:INVALID_ASSIGNMENT*/ro;
+ o = /*warning:INVALID_ASSIGNMENT*/rn;
o = oo;
- o = /*severe:STATIC_TYPE_ERROR*/nn;
- o = /*severe:STATIC_TYPE_ERROR*/nnn;
+ o = /*warning:INVALID_ASSIGNMENT*/nn;
+ o = /*warning:INVALID_ASSIGNMENT*/nnn;
- n = /*severe:STATIC_TYPE_ERROR*/r;
- n = /*severe:STATIC_TYPE_ERROR*/o;
+ n = /*warning:INVALID_ASSIGNMENT*/r;
+ n = /*warning:INVALID_ASSIGNMENT*/o;
n = n;
- n = /*severe:STATIC_TYPE_ERROR*/rr;
- n = /*severe:STATIC_TYPE_ERROR*/ro;
- n = /*severe:STATIC_TYPE_ERROR*/rn;
- n = /*severe:STATIC_TYPE_ERROR*/oo;
+ n = /*warning:INVALID_ASSIGNMENT*/rr;
+ n = /*warning:INVALID_ASSIGNMENT*/ro;
+ n = /*warning:INVALID_ASSIGNMENT*/rn;
+ n = /*warning:INVALID_ASSIGNMENT*/oo;
n = nn;
n = nnn;
- rr = /*severe:STATIC_TYPE_ERROR*/r;
- rr = /*severe:STATIC_TYPE_ERROR*/o;
- rr = /*severe:STATIC_TYPE_ERROR*/n;
+ rr = /*warning:INVALID_ASSIGNMENT*/r;
+ rr = /*warning:INVALID_ASSIGNMENT*/o;
+ rr = /*warning:INVALID_ASSIGNMENT*/n;
rr = rr;
rr = ro;
- rr = /*severe:STATIC_TYPE_ERROR*/rn;
+ rr = /*warning:INVALID_ASSIGNMENT*/rn;
rr = oo;
- rr = /*severe:STATIC_TYPE_ERROR*/nn;
- rr = /*severe:STATIC_TYPE_ERROR*/nnn;
+ rr = /*warning:INVALID_ASSIGNMENT*/nn;
+ rr = /*warning:INVALID_ASSIGNMENT*/nnn;
ro = /*warning:DOWN_CAST_COMPOSITE*/r;
- ro = /*severe:STATIC_TYPE_ERROR*/o;
- ro = /*severe:STATIC_TYPE_ERROR*/n;
+ ro = /*warning:INVALID_ASSIGNMENT*/o;
+ ro = /*warning:INVALID_ASSIGNMENT*/n;
ro = /*warning:DOWN_CAST_COMPOSITE*/rr;
ro = ro;
- ro = /*severe:STATIC_TYPE_ERROR*/rn;
+ ro = /*warning:INVALID_ASSIGNMENT*/rn;
ro = oo;
- ro = /*severe:STATIC_TYPE_ERROR*/nn;
- ro = /*severe:STATIC_TYPE_ERROR*/nnn;
+ ro = /*warning:INVALID_ASSIGNMENT*/nn;
+ ro = /*warning:INVALID_ASSIGNMENT*/nnn;
rn = /*warning:DOWN_CAST_COMPOSITE*/r;
- rn = /*severe:STATIC_TYPE_ERROR*/o;
- rn = /*severe:STATIC_TYPE_ERROR*/n;
- rn = /*severe:STATIC_TYPE_ERROR*/rr;
- rn = /*severe:STATIC_TYPE_ERROR*/ro;
+ rn = /*warning:INVALID_ASSIGNMENT*/o;
+ rn = /*warning:INVALID_ASSIGNMENT*/n;
+ rn = /*warning:INVALID_ASSIGNMENT*/rr;
+ rn = /*warning:INVALID_ASSIGNMENT*/ro;
rn = rn;
- rn = /*severe:STATIC_TYPE_ERROR*/oo;
- rn = /*severe:STATIC_TYPE_ERROR*/nn;
- rn = /*severe:STATIC_TYPE_ERROR*/nnn;
+ rn = /*warning:INVALID_ASSIGNMENT*/oo;
+ rn = /*warning:INVALID_ASSIGNMENT*/nn;
+ rn = /*warning:INVALID_ASSIGNMENT*/nnn;
oo = /*warning:DOWN_CAST_COMPOSITE*/r;
oo = /*warning:DOWN_CAST_COMPOSITE*/o;
- oo = /*severe:STATIC_TYPE_ERROR*/n;
+ oo = /*warning:INVALID_ASSIGNMENT*/n;
oo = /*warning:DOWN_CAST_COMPOSITE*/rr;
oo = /*warning:DOWN_CAST_COMPOSITE*/ro;
- oo = /*severe:STATIC_TYPE_ERROR*/rn;
+ oo = /*warning:INVALID_ASSIGNMENT*/rn;
oo = oo;
- oo = /*severe:STATIC_TYPE_ERROR*/nn;
- oo = /*severe:STATIC_TYPE_ERROR*/nnn;
+ oo = /*warning:INVALID_ASSIGNMENT*/nn;
+ oo = /*warning:INVALID_ASSIGNMENT*/nnn;
- nn = /*severe:STATIC_TYPE_ERROR*/r;
- nn = /*severe:STATIC_TYPE_ERROR*/o;
+ nn = /*warning:INVALID_ASSIGNMENT*/r;
+ nn = /*warning:INVALID_ASSIGNMENT*/o;
nn = /*warning:DOWN_CAST_COMPOSITE*/n;
- nn = /*severe:STATIC_TYPE_ERROR*/rr;
- nn = /*severe:STATIC_TYPE_ERROR*/ro;
- nn = /*severe:STATIC_TYPE_ERROR*/rn;
- nn = /*severe:STATIC_TYPE_ERROR*/oo;
+ nn = /*warning:INVALID_ASSIGNMENT*/rr;
+ nn = /*warning:INVALID_ASSIGNMENT*/ro;
+ nn = /*warning:INVALID_ASSIGNMENT*/rn;
+ nn = /*warning:INVALID_ASSIGNMENT*/oo;
nn = nn;
nn = nnn;
- nnn = /*severe:STATIC_TYPE_ERROR*/r;
- nnn = /*severe:STATIC_TYPE_ERROR*/o;
+ nnn = /*warning:INVALID_ASSIGNMENT*/r;
+ nnn = /*warning:INVALID_ASSIGNMENT*/o;
nnn = /*warning:DOWN_CAST_COMPOSITE*/n;
- nnn = /*severe:STATIC_TYPE_ERROR*/rr;
- nnn = /*severe:STATIC_TYPE_ERROR*/ro;
- nnn = /*severe:STATIC_TYPE_ERROR*/rn;
- nnn = /*severe:STATIC_TYPE_ERROR*/oo;
+ nnn = /*warning:INVALID_ASSIGNMENT*/rr;
+ nnn = /*warning:INVALID_ASSIGNMENT*/ro;
+ nnn = /*warning:INVALID_ASSIGNMENT*/rn;
+ nnn = /*warning:INVALID_ASSIGNMENT*/oo;
nnn = /*warning:DOWN_CAST_COMPOSITE*/nn;
nnn = nnn;
}
@@ -1179,7 +1180,7 @@ void main() {
{
I2I f;
f = new A();
- f = /*severe:STATIC_TYPE_ERROR*/new B();
+ f = /*warning:INVALID_ASSIGNMENT*/new B();
f = i2i;
f = /*severe:STATIC_TYPE_ERROR*/n2n;
f = /*warning:DOWN_CAST_COMPOSITE*/i2i as Object;
@@ -1187,7 +1188,7 @@ void main() {
}
{
N2N f;
- f = /*severe:STATIC_TYPE_ERROR*/new A();
+ f = /*warning:INVALID_ASSIGNMENT*/new A();
f = new B();
f = /*severe:STATIC_TYPE_ERROR*/i2i;
f = n2n;
@@ -1197,18 +1198,18 @@ void main() {
{
A f;
f = new A();
- f = /*severe:STATIC_TYPE_ERROR*/new B();
- f = /*severe:STATIC_TYPE_ERROR*/i2i;
- f = /*severe:STATIC_TYPE_ERROR*/n2n;
+ f = /*warning:INVALID_ASSIGNMENT*/new B();
+ f = /*warning:INVALID_ASSIGNMENT*/i2i;
+ f = /*warning:INVALID_ASSIGNMENT*/n2n;
f = /*info:DOWN_CAST_IMPLICIT*/i2i as Object;
f = /*info:DOWN_CAST_IMPLICIT*/n2n as Function;
}
{
B f;
- f = /*severe:STATIC_TYPE_ERROR*/new A();
+ f = /*warning:INVALID_ASSIGNMENT*/new A();
f = new B();
- f = /*severe:STATIC_TYPE_ERROR*/i2i;
- f = /*severe:STATIC_TYPE_ERROR*/n2n;
+ f = /*warning:INVALID_ASSIGNMENT*/i2i;
+ f = /*warning:INVALID_ASSIGNMENT*/n2n;
f = /*info:DOWN_CAST_IMPLICIT*/i2i as Object;
f = /*info:DOWN_CAST_IMPLICIT*/n2n as Function;
}
@@ -1230,7 +1231,7 @@ void main() {
class A {
void bar() => null;
- void foo() => bar; // allowed
+ void foo() => bar(); // allowed
}
''');
});
@@ -1257,8 +1258,8 @@ void main() {
local = g; // valid
// Non-generic function cannot subtype a generic one.
- local = /*severe:STATIC_TYPE_ERROR*/(x) => null;
- local = /*severe:STATIC_TYPE_ERROR*/nonGenericFn;
+ local = /*severe:STATIC_TYPE_ERROR, warning:INVALID_ASSIGNMENT*/(x) => null;
+ local = /*warning:INVALID_ASSIGNMENT*/nonGenericFn;
}
{
Iterable/*<R>*/ f/*<P, R>*/(List/*<P>*/ p) => null;
@@ -1273,8 +1274,8 @@ void main() {
local2 = /*warning:DOWN_CAST_COMPOSITE*/local;
// Non-generic function cannot subtype a generic one.
- local = /*severe:STATIC_TYPE_ERROR*/(x) => null;
- local = /*severe:STATIC_TYPE_ERROR*/nonGenericFn;
+ local = /*severe:STATIC_TYPE_ERROR, warning:INVALID_ASSIGNMENT*/(x) => null;
+ local = /*warning:INVALID_ASSIGNMENT*/nonGenericFn;
}
}
''');
@@ -1313,6 +1314,7 @@ void main() {
lOfDs = lOfDs;
lOfDs = lOfOs;
lOfDs = lOfAs;
+ lOfDs = new L(); // Reset type propagation.
}
{
lOfOs = mOfDs;
@@ -1321,14 +1323,16 @@ void main() {
lOfOs = lOfDs;
lOfOs = lOfOs;
lOfOs = lOfAs;
+ lOfOs = new L<Object>(); // Reset type propagation.
}
{
lOfAs = /*warning:DOWN_CAST_COMPOSITE*/mOfDs;
- lOfAs = /*severe:STATIC_TYPE_ERROR*/mOfOs;
+ lOfAs = /*warning:INVALID_ASSIGNMENT*/mOfOs;
lOfAs = mOfAs;
lOfAs = /*warning:DOWN_CAST_COMPOSITE*/lOfDs;
lOfAs = /*info:DOWN_CAST_IMPLICIT*/lOfOs;
lOfAs = lOfAs;
+ lOfAs = new L<A>(); // Reset type propagation.
}
{
mOfDs = mOfDs;
@@ -1337,6 +1341,7 @@ void main() {
mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfDs;
mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfOs;
mOfDs = /*warning:DOWN_CAST_COMPOSITE*/lOfAs;
+ mOfDs = new M(); // Reset type propagation.
}
{
mOfOs = mOfDs;
@@ -1344,7 +1349,8 @@ void main() {
mOfOs = mOfAs;
mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfDs;
mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfOs;
- mOfOs = /*severe:STATIC_TYPE_ERROR*/lOfAs;
+ mOfOs = /*warning:INVALID_ASSIGNMENT*/lOfAs;
+ mOfOs = new M<Object>(); // Reset type propagation.
}
{
mOfAs = /*warning:DOWN_CAST_COMPOSITE*/mOfDs;
@@ -1354,7 +1360,6 @@ void main() {
mOfAs = /*info:DOWN_CAST_IMPLICIT*/lOfOs;
mOfAs = /*info:DOWN_CAST_IMPLICIT*/lOfAs;
}
-
}
''');
});
@@ -1367,9 +1372,9 @@ void main() {
String s = "hello";
{
List<int> l = <int>[i];
- l = <int>[/*severe:STATIC_TYPE_ERROR*/s];
+ l = <int>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s];
l = <int>[/*info:DOWN_CAST_IMPLICIT*/n];
- l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*severe:STATIC_TYPE_ERROR*/s];
+ l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s];
}
{
List l = [i];
@@ -1379,11 +1384,11 @@ void main() {
}
{
Map<String, int> m = <String, int>{s: i};
- m = <String, int>{s: /*severe:STATIC_TYPE_ERROR*/s};
+ m = <String, int>{s: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s};
m = <String, int>{s: /*info:DOWN_CAST_IMPLICIT*/n};
m = <String, int>{s: i,
s: /*info:DOWN_CAST_IMPLICIT*/n,
- s: /*severe:STATIC_TYPE_ERROR*/s};
+ s: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s};
}
// TODO(leafp): We can't currently test for key errors since the
// error marker binds to the entire entry.
@@ -1406,7 +1411,9 @@ void main() {
checkFile('''
class A {
static const num n = 3.0;
- static const int i = /*info:ASSIGNMENT_CAST*/n;
+ // The severe error is from constant evaluation where we know the
+ // concrete type.
+ static const int /*severe:VARIABLE_TYPE_MISMATCH*/i = /*info:ASSIGNMENT_CAST*/n;
final int fi;
const A(num a) : this.fi = /*info:DOWN_CAST_IMPLICIT*/a;
}
@@ -1414,7 +1421,7 @@ void main() {
const B(Object a) : super(/*info:DOWN_CAST_IMPLICIT*/a);
}
void foo(Object o) {
- var a = const A(/*info:DOWN_CAST_IMPLICIT*/o);
+ var a = const A(/*info:DOWN_CAST_IMPLICIT, severe:CONST_WITH_NON_CONSTANT_ARGUMENT, severe:INVALID_CONSTANT*/o);
}
''');
});
@@ -1435,7 +1442,7 @@ void main() {
test('unbound redirecting constructor', () {
checkFile('''
class Foo {
- Foo() : this.init();
+ Foo() : /*severe:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init();
}
''');
});
@@ -1444,7 +1451,7 @@ void main() {
checkFile('''
class A {
A(A x) {}
- A.two() : this(/*severe:STATIC_TYPE_ERROR*/3);
+ A.two() : this(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
}
''');
});
@@ -1453,7 +1460,7 @@ void main() {
checkFile('''
class A { A(A x) {} }
class B extends A {
- B() : super(/*severe:STATIC_TYPE_ERROR*/3);
+ B() : super(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
}
''');
});
@@ -1513,7 +1520,7 @@ void main() {
var _f3;
get _f4 => null;
- int _m1();
+ int _m1() => null;
}
class GrandChild extends main.Child {
@@ -1521,7 +1528,8 @@ void main() {
/*severe:INVALID_FIELD_OVERRIDE*/var _f3;
var _f4;
- /*severe:INVALID_METHOD_OVERRIDE*/String _m1();
+ /*severe:INVALID_METHOD_OVERRIDE*/String
+ /*warning:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/_m1() => null;
}
''',
name: '/helper.dart');
@@ -1533,7 +1541,7 @@ void main() {
var _f2;
var _f4;
- String _m1();
+ String _m1() => null;
}
''');
});
@@ -1580,7 +1588,7 @@ void main() {
/*severe:INVALID_FIELD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/dynamic get f4 => null;
}
- class Child2 implements Base {
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR*/Child2 implements Base {
/*severe:INVALID_METHOD_OVERRIDE*/A get f1 => null;
C get f2 => null;
get f3 => null;
@@ -1664,21 +1672,21 @@ void main() {
class C extends B {}
class Base {
- B m1(B a);
- B m2(B a);
- B m3(B a);
- B m4(B a);
- B m5(B a);
- B m6(B a);
+ B m1(B a) => null;
+ B m2(B a) => null;
+ B m3(B a) => null;
+ B m4(B a) => null;
+ B m5(B a) => null;
+ B m6(B a) => null;
}
class Child extends Base {
- /*severe:INVALID_METHOD_OVERRIDE*/A m1(A value) {}
- /*severe:INVALID_METHOD_OVERRIDE*/C m2(C value) {}
- /*severe:INVALID_METHOD_OVERRIDE*/A m3(C value) {}
- C m4(A value) {}
- m5(value) {}
- /*severe:INVALID_METHOD_OVERRIDE*/dynamic m6(dynamic value) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/A m1(A value) => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/C m2(C value) => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/A m3(C value) => null;
+ C m4(A value) => null;
+ m5(value) => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/dynamic m6(dynamic value) => null;
}
''');
});
@@ -1693,7 +1701,8 @@ void main() {
}
class Derived<S extends A> extends Base<B> {
- /*severe:INVALID_METHOD_OVERRIDE*/S foo() => null;
+ /*severe:INVALID_METHOD_OVERRIDE*/S
+ /*warning:INVALID_METHOD_OVERRIDE_RETURN_TYPE*/foo() => null;
}
class Derived2<S extends B> extends Base<B> {
@@ -1758,14 +1767,14 @@ void main() {
dynamic x;
if (x is int) {
int y = x;
- String z = /*severe:STATIC_TYPE_ERROR*/x;
+ String z = /*warning:INVALID_ASSIGNMENT*/x;
}
}
g() {
Object x;
if (x is int) {
int y = x;
- String z = /*severe:STATIC_TYPE_ERROR*/x;
+ String z = /*warning:INVALID_ASSIGNMENT*/x;
}
}
''');
@@ -1774,10 +1783,10 @@ void main() {
test('unary operators', () {
checkFile('''
class A {
- A operator ~() {}
- A operator +(int x) {}
- A operator -(int x) {}
- A operator -() {}
+ A operator ~() => null;
+ A operator +(int x) => null;
+ A operator -(int x) => null;
+ A operator -() => null;
}
foo() => new A();
@@ -1790,7 +1799,7 @@ void main() {
~a;
(/*info:DYNAMIC_INVOKE*/~d);
- !/*severe:STATIC_TYPE_ERROR*/a;
+ !/*warning:NON_BOOL_NEGATION_EXPRESSION*/a;
!/*info:DYNAMIC_CAST*/d;
-a;
@@ -1811,22 +1820,22 @@ void main() {
test('binary and index operators', () {
checkFile('''
class A {
- A operator *(B b) {}
- A operator /(B b) {}
- A operator ~/(B b) {}
- A operator %(B b) {}
- A operator +(B b) {}
- A operator -(B b) {}
- A operator <<(B b) {}
- A operator >>(B b) {}
- A operator &(B b) {}
- A operator ^(B b) {}
- A operator |(B b) {}
- A operator[](B b) {}
+ A operator *(B b) => null;
+ A operator /(B b) => null;
+ A operator ~/(B b) => null;
+ A operator %(B b) => null;
+ A operator +(B b) => null;
+ A operator -(B b) => null;
+ A operator <<(B b) => null;
+ A operator >>(B b) => null;
+ A operator &(B b) => null;
+ A operator ^(B b) => null;
+ A operator |(B b) => null;
+ A operator[](B b) => null;
}
class B {
- A operator -(B b) {}
+ A operator -(B b) => null;
}
foo() => new A();
@@ -1841,9 +1850,9 @@ void main() {
a = a ~/ b;
a = a % b;
a = a + b;
- a = a + /*severe:STATIC_TYPE_ERROR*/a;
+ a = a + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a;
a = a - b;
- b = /*severe:STATIC_TYPE_ERROR*/b - b;
+ b = /*warning:INVALID_ASSIGNMENT*/b - b;
a = a << b;
a = a >> b;
a = a & b;
@@ -1855,20 +1864,20 @@ void main() {
int y = 42;
x = x + x;
x = x + /*info:DYNAMIC_CAST*/c;
- x = x + /*severe:STATIC_TYPE_ERROR*/y;
+ x = x + /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y;
bool p = true;
p = p && p;
p = p && /*info:DYNAMIC_CAST*/c;
p = (/*info:DYNAMIC_CAST*/c) && p;
p = (/*info:DYNAMIC_CAST*/c) && /*info:DYNAMIC_CAST*/c;
- p = (/*severe:STATIC_TYPE_ERROR*/y) && p;
+ p = /*warning:NON_BOOL_OPERAND*/y && p;
p = c == y;
a = a[b];
a = a[/*info:DYNAMIC_CAST*/c];
c = (/*info:DYNAMIC_INVOKE*/c[b]);
- a[/*severe:STATIC_TYPE_ERROR*/y];
+ a[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/y];
}
''');
});
@@ -1893,27 +1902,27 @@ void main() {
test('compound assignments', () {
checkFile('''
class A {
- A operator *(B b) {}
- A operator /(B b) {}
- A operator ~/(B b) {}
- A operator %(B b) {}
- A operator +(B b) {}
- A operator -(B b) {}
- A operator <<(B b) {}
- A operator >>(B b) {}
- A operator &(B b) {}
- A operator ^(B b) {}
- A operator |(B b) {}
- D operator [](B index) {}
- void operator []=(B index, D value) {}
+ A operator *(B b) => null;
+ A operator /(B b) => null;
+ A operator ~/(B b) => null;
+ A operator %(B b) => null;
+ A operator +(B b) => null;
+ A operator -(B b) => null;
+ A operator <<(B b) => null;
+ A operator >>(B b) => null;
+ A operator &(B b) => null;
+ A operator ^(B b) => null;
+ A operator |(B b) => null;
+ D operator [](B index) => null;
+ void operator []=(B index, D value) => null;
}
class B {
- A operator -(B b) {}
+ A operator -(B b) => null;
}
class D {
- D operator +(D d) {}
+ D operator +(D d) => null;
}
foo() => new A();
@@ -1921,7 +1930,7 @@ void main() {
test() {
int x = 0;
x += 5;
- (/*severe:STATIC_TYPE_ERROR*/x += 3.14);
+ /*severe:STATIC_TYPE_ERROR*/x += 3.14;
double y = 0.0;
y += 5;
@@ -1951,22 +1960,22 @@ void main() {
a ~/= b;
a %= b;
a += b;
- a += /*severe:STATIC_TYPE_ERROR*/a;
+ a += /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a;
a -= b;
- (/*severe:STATIC_TYPE_ERROR*/b -= b);
+ /*severe:STATIC_TYPE_ERROR*/b -= /*warning:INVALID_ASSIGNMENT*/b;
a <<= b;
a >>= b;
a &= b;
a ^= b;
a |= b;
- (/*info:DYNAMIC_INVOKE*/c += b);
+ /*info:DYNAMIC_INVOKE*/c += b;
var d = new D();
a[b] += d;
a[/*info:DYNAMIC_CAST*/c] += d;
- a[/*severe:STATIC_TYPE_ERROR*/z] += d;
+ a[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z] += d;
a[b] += /*info:DYNAMIC_CAST*/c;
- a[b] += /*severe:STATIC_TYPE_ERROR*/z;
+ a[b] += /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z;
/*info:DYNAMIC_INVOKE,info:DYNAMIC_INVOKE*/c[b] += d;
}
''');
@@ -2011,7 +2020,7 @@ void main() {
checkFile('''
foo() {
for (int i = 0; i < 10; i++) {
- i = /*severe:STATIC_TYPE_ERROR*/"hi";
+ i = /*warning:INVALID_ASSIGNMENT*/"hi";
}
}
bar() {
@@ -2043,35 +2052,43 @@ void main() {
}
class T1 extends Base {
- /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_FIELD_OVERRIDE*/B get f => null;
+ /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/B get
+ /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null;
}
class T2 extends Base {
- /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_FIELD_OVERRIDE*/set f(B b) => null;
+ /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/set f(
+ /*warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null;
}
class T3 extends Base {
- /*severe:INVALID_FIELD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/final B f;
+ /*severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/final B
+ /*warning:FINAL_NOT_INITIALIZED, warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f;
}
class T4 extends Base {
// two: one for the getter one for the setter.
- /*severe:INVALID_FIELD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/B f;
+ /*severe:INVALID_FIELD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/B
+ /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE, warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/f;
}
- class T5 implements Base {
- /*severe:INVALID_METHOD_OVERRIDE*/B get f => null;
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements Base {
+ /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, severe:INVALID_METHOD_OVERRIDE*/B get
+ /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f => null;
}
- class T6 implements Base {
- /*severe:INVALID_METHOD_OVERRIDE*/set f(B b) => null;
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements Base {
+ /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, severe:INVALID_METHOD_OVERRIDE*/set f(
+ /*warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/B b) => null;
}
- class T7 implements Base {
- /*severe:INVALID_METHOD_OVERRIDE*/final B f;
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements Base {
+ /*severe:INVALID_METHOD_OVERRIDE*/final B
+ /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE*/f = null;
}
class T8 implements Base {
// two: one for the getter one for the setter.
- /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/B f;
+ /*severe:INVALID_METHOD_OVERRIDE, severe:INVALID_METHOD_OVERRIDE*/B
+ /*warning:INVALID_GETTER_OVERRIDE_RETURN_TYPE, warning:INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE*/f;
}
''');
});
@@ -2086,7 +2103,8 @@ void main() {
}
class Test extends Base {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2103,7 +2121,8 @@ void main() {
}
class Test extends Parent {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
/*severe:INVALID_FIELD_OVERRIDE*/int x;
}
''');
@@ -2123,7 +2142,8 @@ void main() {
class Test extends Parent {
// Reported only once
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2137,7 +2157,8 @@ void main() {
m(A a) {}
}
class Parent extends Grandparent {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
class Test extends Parent {
@@ -2164,9 +2185,12 @@ void main() {
int x;
}
- class T1 extends Base with /*severe:INVALID_METHOD_OVERRIDE*/M1 {}
- class T2 extends Base with /*severe:INVALID_METHOD_OVERRIDE*/M1, /*severe:INVALID_FIELD_OVERRIDE*/M2 {}
- class T3 extends Base with /*severe:INVALID_FIELD_OVERRIDE*/M2, /*severe:INVALID_METHOD_OVERRIDE*/M1 {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
+ with /*severe:INVALID_METHOD_OVERRIDE*/M1 {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T2 extends Base
+ with /*severe:INVALID_METHOD_OVERRIDE*/M1, /*severe:INVALID_FIELD_OVERRIDE*/M2 {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T3 extends Base
+ with /*severe:INVALID_FIELD_OVERRIDE*/M2, /*severe:INVALID_METHOD_OVERRIDE*/M1 {}
''');
});
@@ -2188,7 +2212,9 @@ void main() {
int x;
}
- class T1 extends Base with M1, /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_FIELD_OVERRIDE*/M2 {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
+ with M1,
+ /*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_FIELD_OVERRIDE*/M2 {}
''');
});
@@ -2216,7 +2242,7 @@ void main() {
m(B a) {}
}
- class T1 extends Base
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
with M1, /*severe:INVALID_METHOD_OVERRIDE*/M2, M3 {}
''');
});
@@ -2231,7 +2257,8 @@ void main() {
}
class T1 implements I {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2249,9 +2276,8 @@ void main() {
m(B a) {}
}
-
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base implements I {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base implements I {}
''');
});
@@ -2268,8 +2294,9 @@ void main() {
m(B a) {}
}
- class T1 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
+ implements I {}
''');
});
@@ -2288,14 +2315,16 @@ void main() {
m(B a) {}
}
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base
implements I1 {}
class T2 extends Base implements I1 {
/*severe:INVALID_METHOD_OVERRIDE,severe:INVALID_METHOD_OVERRIDE*/m(a) {}
}
- class T3 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/Base
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T3
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/Base
implements I1 {}
class T4 extends Object with Base implements I1 {
@@ -2317,7 +2346,8 @@ void main() {
abstract class I2 implements I1 {}
class T1 implements I2 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2332,7 +2362,8 @@ void main() {
abstract class I2 extends I1 {}
class T1 implements I2 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2347,7 +2378,8 @@ void main() {
abstract class I2 extends Object with M1 {}
class T1 implements I2 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2362,7 +2394,8 @@ void main() {
abstract class Base implements I1 {}
class T1 extends Base {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2375,15 +2408,14 @@ void main() {
m(A a);
}
- // See issue #25
- /*pass should be warning:AnalyzerError*/class Base implements I1 {
- }
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base
+ implements I1 {}
class T1 extends Base {
// not reported technically because if the class is concrete,
// it should implement all its interfaces and hence it is
// sufficient to check overrides against it.
- m(B a) {}
+ m(/*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2404,9 +2436,9 @@ void main() {
m(B a) {}
}
- class T1 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
+ implements I2 {}
''');
});
test('superclass of interface of child', () {
@@ -2423,9 +2455,9 @@ void main() {
m(B a) {}
}
- class T1 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
+ implements I2 {}
''');
});
test('mixin of interface of child', () {
@@ -2442,9 +2474,9 @@ void main() {
m(B a) {}
}
- class T1 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
+ implements I2 {}
''');
});
test('interface of abstract superclass', () {
@@ -2461,8 +2493,8 @@ void main() {
m(B a) {}
}
- class T1 extends Base with /*severe:INVALID_METHOD_OVERRIDE*/M {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
+ with /*severe:INVALID_METHOD_OVERRIDE*/M {}
''');
});
test('interface of concrete superclass', () {
@@ -2474,16 +2506,15 @@ void main() {
m(A a);
}
- // See issue #25
- /*pass should be warning:AnalyzerError*/class Base implements I1 {
- }
+ class /*warning:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/Base
+ implements I1 {}
class M {
m(B a) {}
}
- class T1 extends Base with M {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Base
+ with M {}
''');
});
});
@@ -2503,9 +2534,8 @@ void main() {
m(B a) {}
}
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base implements I2 {}
''');
});
test('superclass of interface of child', () {
@@ -2522,9 +2552,9 @@ void main() {
m(B a) {}
}
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base
+ implements I2 {}
''');
});
test('mixin of interface of child', () {
@@ -2541,9 +2571,9 @@ void main() {
m(B a) {}
}
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
- implements I2 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base
+ implements I2 {}
''');
});
test('interface of abstract superclass', () {
@@ -2556,7 +2586,8 @@ void main() {
}
abstract class Base implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
class T1 extends Base {
@@ -2579,7 +2610,8 @@ void main() {
}
class Base implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
class T1 extends Base {
@@ -2602,11 +2634,11 @@ void main() {
m(A a);
}
- class Base {
- }
+ class Base {}
class T1 implements I2 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
''');
});
@@ -2621,20 +2653,21 @@ void main() {
}
class Base {
- m(B a);
+ m(B a) {}
}
// Note: no error reported in `extends Base` to avoid duplicating
// the error in T1.
class T1 extends Base implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
// If there is no error in the class, we do report the error at
// the base class:
- class T2 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
- implements I1 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T2
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base
+ implements I1 {}
''');
});
@@ -2648,16 +2681,17 @@ void main() {
}
class M {
- m(B a);
+ m(B a) {}
}
class T1 extends Object with M implements I1 {
- /*severe:INVALID_METHOD_OVERRIDE*/m(B a) {}
+ /*severe:INVALID_METHOD_OVERRIDE*/m(
+ /*warning:INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE*/B a) {}
}
- class T2 extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I1 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T2
+ extends Object with /*severe:INVALID_METHOD_OVERRIDE*/M
+ implements I1 {}
''');
});
@@ -2677,16 +2711,15 @@ void main() {
class Parent1 extends Grandparent {
m(B a) {}
}
- class Parent2 extends Grandparent {
- }
+ class Parent2 extends Grandparent {}
// Note: otherwise both errors would be reported on this line
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Parent1
- implements I1 {
- }
- class T2 /*severe:INVALID_METHOD_OVERRIDE*/extends Parent2
- implements I1 {
- }
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Parent1
+ implements I1 {}
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T2
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Parent2
+ implements I1 {}
''');
});
@@ -2710,11 +2743,10 @@ void main() {
// Here we want to report both, because the error location is
// different.
// TODO(sigmund): should we merge these as well?
- class T1 extends Object
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1 extends Object
with /*severe:INVALID_METHOD_OVERRIDE*/M1,
/*severe:INVALID_METHOD_OVERRIDE*/M2
- implements I1 {
- }
+ implements I1 {}
''');
});
@@ -2738,10 +2770,10 @@ void main() {
// Here we want to report both, because the error location is
// different.
// TODO(sigmund): should we merge these as well?
- class T1 /*severe:INVALID_METHOD_OVERRIDE*/extends Base
+ class /*warning:INCONSISTENT_METHOD_INHERITANCE*/T1
+ /*severe:INVALID_METHOD_OVERRIDE*/extends Base
with /*severe:INVALID_METHOD_OVERRIDE*/M
- implements I1 {
- }
+ implements I1 {}
''');
});
});
@@ -2810,24 +2842,27 @@ void main() {
foo1() async => x;
Future foo2() async => x;
- Future<int> foo3() async => (/*info:DYNAMIC_CAST*/x);
- Future<int> foo4() async => (new Future<int>.value(/*info:DYNAMIC_CAST*/x));
- Future<int> foo5() async => (/*severe:STATIC_TYPE_ERROR*/new Future<String>.value(/*info:DYNAMIC_CAST*/x));
+ Future<int> foo3() async => /*info:DYNAMIC_CAST*/x;
+ Future<int> foo4() async => new Future<int>.value(/*info:DYNAMIC_CAST*/x);
+ Future<int> foo5() async =>
+ /*warning:RETURN_OF_INVALID_TYPE*/new Future<String>.value(/*info:DYNAMIC_CAST*/x);
bar1() async { return x; }
Future bar2() async { return x; }
- Future<int> bar3() async { return (/*info:DYNAMIC_CAST*/x); }
- Future<int> bar4() async { return (new Future<int>.value(/*info:DYNAMIC_CAST*/x)); }
- Future<int> bar5() async { return (/*severe:STATIC_TYPE_ERROR*/new Future<String>.value(/*info:DYNAMIC_CAST*/x)); }
+ Future<int> bar3() async { return /*info:DYNAMIC_CAST*/x; }
+ Future<int> bar4() async { return new Future<int>.value(/*info:DYNAMIC_CAST*/x); }
+ Future<int> bar5() async {
+ return /*warning:RETURN_OF_INVALID_TYPE*/new Future<String>.value(/*info:DYNAMIC_CAST*/x);
+ }
int y;
Future<int> z;
- void baz() async {
+ baz() async {
int a = /*info:DYNAMIC_CAST*/await x;
int b = await y;
int c = await z;
- String d = /*severe:STATIC_TYPE_ERROR*/await z;
+ String d = /*warning:INVALID_ASSIGNMENT*/await z;
}
Future<bool> get issue_264 async {
@@ -2849,33 +2884,31 @@ void main() {
bar1() async* { yield x; }
Stream bar2() async* { yield x; }
- Stream<int> bar3() async* { yield (/*info:DYNAMIC_CAST*/x); }
- Stream<int> bar4() async* { yield (/*severe:STATIC_TYPE_ERROR*/new Stream<int>()); }
+ Stream<int> bar3() async* { yield /*info:DYNAMIC_CAST*/x; }
+ Stream<int> bar4() async* { yield /*warning:YIELD_OF_INVALID_TYPE*/new Stream<int>(); }
- baz1() async* { yield* (/*info:DYNAMIC_CAST*/x); }
- Stream baz2() async* { yield* (/*info:DYNAMIC_CAST*/x); }
- Stream<int> baz3() async* { yield* (/*warning:DOWN_CAST_COMPOSITE*/x); }
+ baz1() async* { yield* /*info:DYNAMIC_CAST*/x; }
+ Stream baz2() async* { yield* /*info:DYNAMIC_CAST*/x; }
+ Stream<int> baz3() async* { yield* /*warning:DOWN_CAST_COMPOSITE*/x; }
Stream<int> baz4() async* { yield* new Stream<int>(); }
- Stream<int> baz5() async* { yield* (/*info:INFERRED_TYPE_ALLOCATION*/new Stream()); }
+ Stream<int> baz5() async* { yield* /*info:INFERRED_TYPE_ALLOCATION*/new Stream(); }
''');
});
test('sync*', () {
checkFile('''
- import 'dart:async';
-
dynamic x;
bar1() sync* { yield x; }
Iterable bar2() sync* { yield x; }
- Iterable<int> bar3() sync* { yield (/*info:DYNAMIC_CAST*/x); }
- Iterable<int> bar4() sync* { yield (/*severe:STATIC_TYPE_ERROR*/new Iterable<int>()); }
-
- baz1() sync* { yield* (/*info:DYNAMIC_CAST*/x); }
- Iterable baz2() sync* { yield* (/*info:DYNAMIC_CAST*/x); }
- Iterable<int> baz3() sync* { yield* (/*warning:DOWN_CAST_COMPOSITE*/x); }
- Iterable<int> baz4() sync* { yield* new Iterable<int>(); }
- Iterable<int> baz5() sync* { yield* (/*info:INFERRED_TYPE_ALLOCATION*/new Iterable()); }
+ Iterable<int> bar3() sync* { yield /*info:DYNAMIC_CAST*/x; }
+ Iterable<int> bar4() sync* { yield /*warning:YIELD_OF_INVALID_TYPE*/bar3(); }
+
+ baz1() sync* { yield* /*info:DYNAMIC_CAST*/x; }
+ Iterable baz2() sync* { yield* /*info:DYNAMIC_CAST*/x; }
+ Iterable<int> baz3() sync* { yield* /*warning:DOWN_CAST_COMPOSITE*/x; }
+ Iterable<int> baz4() sync* { yield* bar3(); }
+ Iterable<int> baz5() sync* { yield* /*info:INFERRED_TYPE_ALLOCATION*/new List(); }
''');
});
});
« no previous file with comments | « pkg/analyzer/test/src/task/dart_test.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