Index: test/checker/inferred_type_test.dart |
diff --git a/test/checker/inferred_type_test.dart b/test/checker/inferred_type_test.dart |
index 59c90e6979e19f796384598692022b021d797023..2e47ccc0b36a46cc1310482f5e9d0ecc530be9a4 100644 |
--- a/test/checker/inferred_type_test.dart |
+++ b/test/checker/inferred_type_test.dart |
@@ -150,74 +150,6 @@ void main() { |
}); |
testChecker( |
- 'do not infer from variables if flag is off', |
- { |
- '/main.dart': ''' |
- var x = 2; |
- var y = x; |
- |
- test1() { |
- x = /*severe:StaticTypeError*/"hi"; |
- y = "hi"; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
- 'do not infer from variables if flag is off 2', |
- { |
- '/main.dart': ''' |
- class A { |
- static var x = 2; |
- static var y = A.x; |
- } |
- |
- test1() { |
- A.x = /*severe:StaticTypeError*/"hi"; |
- A.y = "hi"; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
- 'do not infer from variables in non-cycle imports if flag is off', |
- { |
- '/a.dart': ''' |
- var x = 2; |
- ''', |
- '/main.dart': ''' |
- import 'a.dart'; |
- var y = x; |
- |
- test1() { |
- x = /*severe:StaticTypeError*/"hi"; |
- y = "hi"; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
- 'do not infer from variables in non-cycle imports if flag is off 2', |
- { |
- '/a.dart': ''' |
- class A { static var x = 2; } |
- ''', |
- '/main.dart': ''' |
- import 'a.dart'; |
- class B { static var y = A.x; } |
- |
- test1() { |
- A.x = /*severe:StaticTypeError*/"hi"; |
- B.y = "hi"; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
'infer from variables in non-cycle imports with flag', |
{ |
'/a.dart': ''' |
@@ -254,46 +186,6 @@ void main() { |
inferTransitively: true); |
testChecker( |
- 'do not infer from variables in cycle libs when flag is off', |
- { |
- '/a.dart': ''' |
- import 'main.dart'; |
- var x = 2; // ok to infer |
- ''', |
- '/main.dart': ''' |
- import 'a.dart'; |
- var y = x; // not ok to infer yet |
- |
- test1() { |
- int t = 3; |
- t = x; |
- t = /*info:DynamicCast*/y; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
- 'do not infer from variables in cycle libs when flag is off 2', |
- { |
- '/a.dart': ''' |
- import 'main.dart'; |
- class A { static var x = 2; } |
- ''', |
- '/main.dart': ''' |
- import 'a.dart'; |
- class B { static var y = A.x; } |
- |
- test1() { |
- int t = 3; |
- t = A.x; |
- t = /*info:DynamicCast*/B.y; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
'infer from variables in cycle libs when flag is on', |
{ |
'/a.dart': ''' |
@@ -334,35 +226,6 @@ void main() { |
inferTransitively: true); |
testChecker( |
- 'do not infer from static and instance fields when flag is off', |
- { |
- '/a.dart': ''' |
- import 'b.dart'; |
- class A { |
- static final a1 = B.b1; |
- final a2 = new B().b2; |
- } |
- ''', |
- '/b.dart': ''' |
- class B { |
- static final b1 = 1; |
- final b2 = 1; |
- } |
- ''', |
- '/main.dart': ''' |
- import "a.dart"; |
- |
- test1() { |
- int x = 0; |
- // inference in A disabled (flag is off) |
- x = /*info:DynamicCast*/A.a1; |
- x = /*info:DynamicCast*/new A().a2; |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
- testChecker( |
'can infer also from static and instance fields (flag on)', |
{ |
'/a.dart': ''' |
@@ -526,38 +389,6 @@ void main() { |
''' |
}); |
- testChecker( |
- 'do not infer if complex expressions read possibly inferred field', |
- { |
- '/a.dart': ''' |
- class A { |
- var x = 3; |
- } |
- ''', |
- '/main.dart': ''' |
- import 'a.dart'; |
- class B { |
- var y = 3; |
- } |
- final t1 = new A(); |
- final t2 = new A().x; |
- final t3 = new B(); |
- final t4 = new B().y; |
- |
- test1() { |
- int i = 0; |
- A a; |
- B b; |
- a = t1; |
- i = /*info:DynamicCast*/t2; |
- b = t3; |
- i = /*info:DynamicCast*/t4; |
- i = new B().y; // B.y was inferred though |
- } |
- ''' |
- }, |
- inferTransitively: false); |
- |
// but flags can enable this behavior. |
testChecker( |
'infer if complex expressions read possibly inferred field', |
@@ -729,26 +560,6 @@ void main() { |
group('infer type on overridden fields', () { |
testChecker( |
- '1', |
- { |
- '/main.dart': ''' |
- class A { |
- int x = 2; |
- } |
- |
- class B extends A { |
- /*severe:InvalidMethodOverride*/get x => 3; |
- } |
- |
- foo() { |
- String y = /*info:DynamicCast*/new B().x; |
- int z = /*info:DynamicCast*/new B().x; |
- } |
- ''' |
- }, |
- inferFromOverrides: false); |
- |
- testChecker( |
'2', |
{ |
'/main.dart': ''' |
@@ -769,26 +580,6 @@ void main() { |
inferFromOverrides: true); |
testChecker( |
- '3', |
- { |
- '/main.dart': ''' |
- class A { |
- int x = 2; |
- } |
- |
- class B implements A { |
- /*severe:InvalidMethodOverride*/get x => 3; |
- } |
- |
- foo() { |
- String y = /*info:DynamicCast*/new B().x; |
- int z = /*info:DynamicCast*/new B().x; |
- } |
- ''' |
- }, |
- inferFromOverrides: false); |
- |
- testChecker( |
'4', |
{ |
'/main.dart': ''' |
@@ -833,26 +624,6 @@ void main() { |
} |
testChecker( |
- '2', |
- { |
- '/main.dart': ''' |
- class A<T> { |
- T x; |
- } |
- |
- class B implements A<int> { |
- /*severe:InvalidMethodOverride*/get x => 3; |
- } |
- |
- foo() { |
- String y = /*info:DynamicCast*/new B().x; |
- int z = /*info:DynamicCast*/new B().x; |
- } |
- ''' |
- }, |
- inferFromOverrides: false); |
- |
- testChecker( |
'3', |
{ |
'/main.dart': ''' |
@@ -961,7 +732,7 @@ void main() { |
'/a.dart': ''' |
import 'main.dart'; |
abstract class I<E> { |
- A<E> m(a, String f(v, T e)); |
+ A<E> m(a, String f(v, int e)); |
} |
''', |
'/main.dart': ''' |
@@ -981,7 +752,7 @@ void main() { |
const B(); |
int get y => 0; |
- m(a, f(v, T e)) {} |
+ m(a, f(v, int e)) {} |
} |
foo () { |
@@ -1036,12 +807,12 @@ void main() { |
} |
class C1 extends A implements B { |
- /*severe:InvalidMethodOverride*/get a => null; |
+ /*severe:InvalidMethodOverride,severe:InvalidMethodOverride*/get a => null; |
} |
- // Here we infer from B, which is more precise. |
+ // Still ambiguous |
class C2 extends B implements A { |
- get a => null; |
+ /*severe:InvalidMethodOverride,severe:InvalidMethodOverride*/get a => null; |
} |
''' |
}, |
@@ -1076,7 +847,7 @@ void main() { |
} |
class C2 extends A implements B { |
- /*severe:InvalidMethodOverride*/get a => null; |
+ /*severe:InvalidMethodOverride,severe:InvalidMethodOverride*/get a => null; |
} |
''' |
}, |