| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analyzer.test.src.task.strong.checker_test; | 5 library analyzer.test.src.task.strong.checker_test; |
| 6 | 6 |
| 7 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 7 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 8 | 8 |
| 9 import 'strong_test_helper.dart'; | 9 import 'strong_test_helper.dart'; |
| 10 | 10 |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 checkFile(''' | 395 checkFile(''' |
| 396 abstract class Equality<Q> {} | 396 abstract class Equality<Q> {} |
| 397 abstract class EqualityBase<R> implements Equality<R> { | 397 abstract class EqualityBase<R> implements Equality<R> { |
| 398 final C<R> c = /*info:INFERRED_TYPE_ALLOCATION*/const C(); | 398 final C<R> c = /*info:INFERRED_TYPE_ALLOCATION*/const C(); |
| 399 const EqualityBase(); | 399 const EqualityBase(); |
| 400 } | 400 } |
| 401 class DefaultEquality<S> extends EqualityBase<S> { | 401 class DefaultEquality<S> extends EqualityBase<S> { |
| 402 const DefaultEquality(); | 402 const DefaultEquality(); |
| 403 } | 403 } |
| 404 class SetEquality<T> implements Equality<T> { | 404 class SetEquality<T> implements Equality<T> { |
| 405 final Equality<T> field = const DefaultEquality(); | 405 final Equality<T> field = /*info:INFERRED_TYPE_ALLOCATION*/const DefaultEquali
ty(); |
| 406 const SetEquality([Equality<T> inner = const DefaultEquality()]); | 406 const SetEquality([Equality<T> inner = /*info:INFERRED_TYPE_ALLOCATION*/const
DefaultEquality()]); |
| 407 } | 407 } |
| 408 class C<Q> { | 408 class C<Q> { |
| 409 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const []; | 409 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const []; |
| 410 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {}; | 410 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {}; |
| 411 const C(); | 411 const C(); |
| 412 } | 412 } |
| 413 main() { | 413 main() { |
| 414 const SetEquality<String>(); | 414 const SetEquality<String>(); |
| 415 } | 415 } |
| 416 '''); | 416 '''); |
| (...skipping 1965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2382 addFile(r''' | 2382 addFile(r''' |
| 2383 class C<T> {} | 2383 class C<T> {} |
| 2384 class M1<T extends /*error:IMPLICIT_DYNAMIC_TYPE*/List> {} | 2384 class M1<T extends /*error:IMPLICIT_DYNAMIC_TYPE*/List> {} |
| 2385 class M2<T> {} | 2385 class M2<T> {} |
| 2386 class I<T> {} | 2386 class I<T> {} |
| 2387 class D<T, S> extends /*error:IMPLICIT_DYNAMIC_TYPE*/C | 2387 class D<T, S> extends /*error:IMPLICIT_DYNAMIC_TYPE*/C |
| 2388 with M1, /*error:IMPLICIT_DYNAMIC_TYPE*/M2 | 2388 with M1, /*error:IMPLICIT_DYNAMIC_TYPE*/M2 |
| 2389 implements /*error:IMPLICIT_DYNAMIC_TYPE*/I {} | 2389 implements /*error:IMPLICIT_DYNAMIC_TYPE*/I {} |
| 2390 | 2390 |
| 2391 C f(D d) { | 2391 C f(D d) { |
| 2392 D x = new /*error:IMPLICIT_DYNAMIC_TYPE*/D(); | 2392 D x = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/D(); |
| 2393 D<int, dynamic> y = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA
MIC_TYPE*/D(); | 2393 D<int, dynamic> y = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA
MIC_TYPE*/D(); |
| 2394 D<dynamic, int> z = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA
MIC_TYPE*/D(); | 2394 D<dynamic, int> z = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNA
MIC_TYPE*/D(); |
| 2395 return new /*error:IMPLICIT_DYNAMIC_TYPE*/C(); | 2395 return /*info:INFERRED_TYPE_ALLOCATION*/new /*error:IMPLICIT_DYNAMIC_TYPE*/C()
; |
| 2396 } | 2396 } |
| 2397 | 2397 |
| 2398 class A<T extends num> {} | 2398 class A<T extends num> {} |
| 2399 class N1<T extends List<int>> {} | 2399 class N1<T extends List<int>> {} |
| 2400 class N2<T extends Object> {} | 2400 class N2<T extends Object> {} |
| 2401 class J<T extends Object> {} | 2401 class J<T extends Object> {} |
| 2402 class B<T extends Object> extends A with N1, N2 implements J {} | 2402 class B<T extends Object> extends A with N1, N2 implements J {} |
| 2403 A g(B b) { | 2403 A g(B b) { |
| 2404 B y = /*info:INFERRED_TYPE_ALLOCATION*/new B(); | 2404 B y = /*info:INFERRED_TYPE_ALLOCATION*/new B(); |
| 2405 return /*info:INFERRED_TYPE_ALLOCATION*/new A(); | 2405 return /*info:INFERRED_TYPE_ALLOCATION*/new A(); |
| (...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3346 M<Object> mOfOs; | 3346 M<Object> mOfOs; |
| 3347 M<A> mOfAs; | 3347 M<A> mOfAs; |
| 3348 | 3348 |
| 3349 { | 3349 { |
| 3350 lOfDs = mOfDs; | 3350 lOfDs = mOfDs; |
| 3351 lOfDs = mOfOs; | 3351 lOfDs = mOfOs; |
| 3352 lOfDs = mOfAs; | 3352 lOfDs = mOfAs; |
| 3353 lOfDs = lOfDs; | 3353 lOfDs = lOfDs; |
| 3354 lOfDs = lOfOs; | 3354 lOfDs = lOfOs; |
| 3355 lOfDs = lOfAs; | 3355 lOfDs = lOfAs; |
| 3356 lOfDs = new L(); // Reset type propagation. | 3356 lOfDs = /*info:INFERRED_TYPE_ALLOCATION*/new L(); // Reset type propagation. |
| 3357 } | 3357 } |
| 3358 { | 3358 { |
| 3359 lOfOs = mOfDs; | 3359 lOfOs = mOfDs; |
| 3360 lOfOs = mOfOs; | 3360 lOfOs = mOfOs; |
| 3361 lOfOs = mOfAs; | 3361 lOfOs = mOfAs; |
| 3362 lOfOs = lOfDs; | 3362 lOfOs = lOfDs; |
| 3363 lOfOs = lOfOs; | 3363 lOfOs = lOfOs; |
| 3364 lOfOs = lOfAs; | 3364 lOfOs = lOfAs; |
| 3365 lOfOs = new L<Object>(); // Reset type propagation. | 3365 lOfOs = new L<Object>(); // Reset type propagation. |
| 3366 } | 3366 } |
| 3367 { | 3367 { |
| 3368 lOfAs = /*error:INVALID_ASSIGNMENT*/mOfDs; | 3368 lOfAs = /*error:INVALID_ASSIGNMENT*/mOfDs; |
| 3369 lOfAs = /*error:INVALID_ASSIGNMENT*/mOfOs; | 3369 lOfAs = /*error:INVALID_ASSIGNMENT*/mOfOs; |
| 3370 lOfAs = mOfAs; | 3370 lOfAs = mOfAs; |
| 3371 lOfAs = /*warning:DOWN_CAST_COMPOSITE*/lOfDs; | 3371 lOfAs = /*warning:DOWN_CAST_COMPOSITE*/lOfDs; |
| 3372 lOfAs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; | 3372 lOfAs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; |
| 3373 lOfAs = lOfAs; | 3373 lOfAs = lOfAs; |
| 3374 lOfAs = new L<A>(); // Reset type propagation. | 3374 lOfAs = new L<A>(); // Reset type propagation. |
| 3375 } | 3375 } |
| 3376 { | 3376 { |
| 3377 mOfDs = mOfDs; | 3377 mOfDs = mOfDs; |
| 3378 mOfDs = mOfOs; | 3378 mOfDs = mOfOs; |
| 3379 mOfDs = mOfAs; | 3379 mOfDs = mOfAs; |
| 3380 mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfDs; | 3380 mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfDs; |
| 3381 mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; | 3381 mOfDs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; |
| 3382 mOfDs = /*error:INVALID_ASSIGNMENT*/lOfAs; | 3382 mOfDs = /*error:INVALID_ASSIGNMENT*/lOfAs; |
| 3383 mOfDs = new M(); // Reset type propagation. | 3383 mOfDs = /*info:INFERRED_TYPE_ALLOCATION*/new M(); // Reset type propagation. |
| 3384 } | 3384 } |
| 3385 { | 3385 { |
| 3386 mOfOs = mOfDs; | 3386 mOfOs = mOfDs; |
| 3387 mOfOs = mOfOs; | 3387 mOfOs = mOfOs; |
| 3388 mOfOs = mOfAs; | 3388 mOfOs = mOfAs; |
| 3389 mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfDs; | 3389 mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfDs; |
| 3390 mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; | 3390 mOfOs = /*info:DOWN_CAST_IMPLICIT*/lOfOs; |
| 3391 mOfOs = /*error:INVALID_ASSIGNMENT*/lOfAs; | 3391 mOfOs = /*error:INVALID_ASSIGNMENT*/lOfAs; |
| 3392 mOfOs = new M<Object>(); // Reset type propagation. | 3392 mOfOs = new M<Object>(); // Reset type propagation. |
| 3393 } | 3393 } |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3673 num n = 3; | 3673 num n = 3; |
| 3674 int i = 3; | 3674 int i = 3; |
| 3675 String s = "hello"; | 3675 String s = "hello"; |
| 3676 { | 3676 { |
| 3677 List<int> l = <int>[i]; | 3677 List<int> l = <int>[i]; |
| 3678 l = <int>[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s]; | 3678 l = <int>[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/s]; |
| 3679 l = <int>[/*info:DOWN_CAST_IMPLICIT*/n]; | 3679 l = <int>[/*info:DOWN_CAST_IMPLICIT*/n]; |
| 3680 l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*error:LIST_ELEMENT_TYPE_NOT_AS
SIGNABLE*/s]; | 3680 l = <int>[i, /*info:DOWN_CAST_IMPLICIT*/n, /*error:LIST_ELEMENT_TYPE_NOT_AS
SIGNABLE*/s]; |
| 3681 } | 3681 } |
| 3682 { | 3682 { |
| 3683 List l = /*info:INFERRED_TYPE_LITERAL*/[i]; | 3683 List l = [i]; |
| 3684 l = /*info:INFERRED_TYPE_LITERAL*/[s]; | 3684 l = [s]; |
| 3685 l = /*info:INFERRED_TYPE_LITERAL*/[n]; | 3685 l = [n]; |
| 3686 l = /*info:INFERRED_TYPE_LITERAL*/[i, n, s]; | 3686 l = [i, n, s]; |
| 3687 } | 3687 } |
| 3688 { | 3688 { |
| 3689 Map<String, int> m = <String, int>{s: i}; | 3689 Map<String, int> m = <String, int>{s: i}; |
| 3690 m = <String, int>{s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; | 3690 m = <String, int>{s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; |
| 3691 m = <String, int>{s: /*info:DOWN_CAST_IMPLICIT*/n}; | 3691 m = <String, int>{s: /*info:DOWN_CAST_IMPLICIT*/n}; |
| 3692 m = <String, int>{s: i, | 3692 m = <String, int>{s: i, |
| 3693 s: /*info:DOWN_CAST_IMPLICIT*/n, | 3693 s: /*info:DOWN_CAST_IMPLICIT*/n, |
| 3694 s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; | 3694 s: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/s}; |
| 3695 } | 3695 } |
| 3696 // TODO(leafp): We can't currently test for key errors since the | 3696 // TODO(leafp): We can't currently test for key errors since the |
| 3697 // error marker binds to the entire entry. | 3697 // error marker binds to the entire entry. |
| 3698 { | 3698 { |
| 3699 Map m = /*info:INFERRED_TYPE_LITERAL*/{s: i}; | 3699 Map m = {s: i}; |
| 3700 m = /*info:INFERRED_TYPE_LITERAL*/{s: s}; | 3700 m = {s: s}; |
| 3701 m = /*info:INFERRED_TYPE_LITERAL*/{s: n}; | 3701 m = {s: n}; |
| 3702 m = /*info:INFERRED_TYPE_LITERAL*/ | 3702 m = {s: i, |
| 3703 {s: i, | |
| 3704 s: n, | 3703 s: n, |
| 3705 s: s}; | 3704 s: s}; |
| 3706 m = /*info:INFERRED_TYPE_LITERAL*/ | 3705 m = {i: s, |
| 3707 {i: s, | |
| 3708 n: s, | 3706 n: s, |
| 3709 s: s}; | 3707 s: s}; |
| 3710 } | 3708 } |
| 3711 } | 3709 } |
| 3712 '''); | 3710 '''); |
| 3713 } | 3711 } |
| 3714 | 3712 |
| 3715 void test_typePromotionFromDynamic() { | 3713 void test_typePromotionFromDynamic() { |
| 3716 checkFile(r''' | 3714 checkFile(r''' |
| 3717 f() { | 3715 f() { |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4027 // Regression test for https://github.com/dart-lang/sdk/issues/25069 | 4025 // Regression test for https://github.com/dart-lang/sdk/issues/25069 |
| 4028 checkFile(''' | 4026 checkFile(''' |
| 4029 typedef int Foo(); | 4027 typedef int Foo(); |
| 4030 void foo() {} | 4028 void foo() {} |
| 4031 void main () { | 4029 void main () { |
| 4032 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); | 4030 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); |
| 4033 } | 4031 } |
| 4034 '''); | 4032 '''); |
| 4035 } | 4033 } |
| 4036 } | 4034 } |
| OLD | NEW |