| 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 // TODO(jmesserly): this file needs to be refactored, it's a port from | 5 // TODO(jmesserly): this file needs to be refactored, it's a port from |
| 6 // package:dev_compiler's tests | 6 // package:dev_compiler's tests |
| 7 /// Tests for type inference. | 7 /// Tests for type inference. |
| 8 library analyzer.test.src.task.strong.inferred_type_test; | 8 library analyzer.test.src.task.strong.inferred_type_test; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/element/element.dart'; | 10 import 'package:analyzer/dart/element/element.dart'; |
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 881 class Bar {} | 881 class Bar {} |
| 882 @Foo.named(/*info:INFERRED_TYPE_LITERAL*/const []) | 882 @Foo.named(/*info:INFERRED_TYPE_LITERAL*/const []) |
| 883 class Baz {} | 883 class Baz {} |
| 884 '''); | 884 '''); |
| 885 } | 885 } |
| 886 | 886 |
| 887 void test_downwardsInferenceAssignmentStatements() { | 887 void test_downwardsInferenceAssignmentStatements() { |
| 888 checkFile(''' | 888 checkFile(''' |
| 889 void main() { | 889 void main() { |
| 890 List<int> l; | 890 List<int> l; |
| 891 l = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"
hello"]; | 891 l = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_
TYPE_NOT_ASSIGNABLE*/"hello"]; |
| 892 l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]); | 892 l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]); |
| 893 } | 893 } |
| 894 '''); | 894 '''); |
| 895 } | 895 } |
| 896 | 896 |
| 897 void test_downwardsInferenceAsyncAwait() { | 897 void test_downwardsInferenceAsyncAwait() { |
| 898 checkFile(''' | 898 checkFile(''' |
| 899 import 'dart:async'; | 899 import 'dart:async'; |
| 900 Future test() async { | 900 Future test() async { |
| 901 dynamic d; | 901 dynamic d; |
| 902 List<int> l0 = await /*info:INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d]; | 902 List<int> l0 = await /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*in
fo:DYNAMIC_CAST*/d]; |
| 903 List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value(/*info:
INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d]); | 903 List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value(/*info:
INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DYNAMIC_CAST*/d]); |
| 904 } | 904 } |
| 905 '''); | 905 '''); |
| 906 } | 906 } |
| 907 | 907 |
| 908 void test_downwardsInferenceForEach() { | 908 void test_downwardsInferenceForEach() { |
| 909 checkFile(''' | 909 checkFile(''' |
| 910 import 'dart:async'; | 910 import 'dart:async'; |
| 911 Future main() async { | 911 Future main() async { |
| 912 for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {} | 912 for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {} |
| 913 await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {} | 913 await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {} |
| (...skipping 28 matching lines...) Expand all Loading... |
| 942 } | 942 } |
| 943 class F3 { | 943 class F3 { |
| 944 F3(Iterable<Iterable<int>> a) {} | 944 F3(Iterable<Iterable<int>> a) {} |
| 945 } | 945 } |
| 946 class F4 { | 946 class F4 { |
| 947 F4({Iterable<Iterable<int>> a}) {} | 947 F4({Iterable<Iterable<int>> a}) {} |
| 948 } | 948 } |
| 949 void main() { | 949 void main() { |
| 950 new F0(/*info:INFERRED_TYPE_LITERAL*/[]); | 950 new F0(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 951 new F0(/*info:INFERRED_TYPE_LITERAL*/[3]); | 951 new F0(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 952 new F0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
*/"hello"]); | 952 new F0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 953 new F0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
*/"hello", | 953 new F0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE*/"hello", |
| 954 3]); | 954 3]); |
| 955 | 955 |
| 956 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 956 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 957 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[3]); | 957 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[3]); |
| 958 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNA
BLE*/"hello"]); | 958 new F1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_EL
EMENT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 959 new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNA
BLE*/"hello", 3]); | 959 new F1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_EL
EMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 960 | 960 |
| 961 new F2(/*info:INFERRED_TYPE_LITERAL*/[]); | 961 new F2(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 962 new F2(/*info:INFERRED_TYPE_LITERAL*/[3]); | 962 new F2(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 963 new F2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
*/"hello"]); | 963 new F2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 964 new F2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
*/"hello", 3]); | 964 new F2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 965 | 965 |
| 966 new F3(/*info:INFERRED_TYPE_LITERAL*/[]); | 966 new F3(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 967 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 967 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 968 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:L
IST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 968 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD
_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 969 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:L
IST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], | 969 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD
_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], |
| 970 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 970 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 971 | 971 |
| 972 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 972 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 973 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 973 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 974 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*erro
r:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 974 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:CO
ULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 975 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*erro
r:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], | 975 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:CO
ULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], |
| 976 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 976 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 977 } | 977 } |
| 978 '''); | 978 '''); |
| 979 } | 979 } |
| 980 | 980 |
| 981 void test_downwardsInferenceOnFunctionArguments_inferDownwards() { | 981 void test_downwardsInferenceOnFunctionArguments_inferDownwards() { |
| 982 checkFile(''' | 982 checkFile(''' |
| 983 void f0(List<int> a) {} | 983 void f0(List<int> a) {} |
| 984 void f1({List<int> a}) {} | 984 void f1({List<int> a}) {} |
| 985 void f2(Iterable<int> a) {} | 985 void f2(Iterable<int> a) {} |
| 986 void f3(Iterable<Iterable<int>> a) {} | 986 void f3(Iterable<Iterable<int>> a) {} |
| 987 void f4({Iterable<Iterable<int>> a}) {} | 987 void f4({Iterable<Iterable<int>> a}) {} |
| 988 void main() { | 988 void main() { |
| 989 f0(/*info:INFERRED_TYPE_LITERAL*/[]); | 989 f0(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 990 f0(/*info:INFERRED_TYPE_LITERAL*/[3]); | 990 f0(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 991 f0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"h
ello"]); | 991 f0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_T
YPE_NOT_ASSIGNABLE*/"hello"]); |
| 992 f0(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"h
ello", 3]); | 992 f0(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_T
YPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 993 | 993 |
| 994 f1(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 994 f1(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 995 f1(a: /*info:INFERRED_TYPE_LITERAL*/[3]); | 995 f1(a: /*info:INFERRED_TYPE_LITERAL*/[3]); |
| 996 f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*
/"hello"]); | 996 f1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMEN
T_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 997 f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*
/"hello", 3]); | 997 f1(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMEN
T_TYPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 998 | 998 |
| 999 f2(/*info:INFERRED_TYPE_LITERAL*/[]); | 999 f2(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1000 f2(/*info:INFERRED_TYPE_LITERAL*/[3]); | 1000 f2(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 1001 f2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"h
ello"]); | 1001 f2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_T
YPE_NOT_ASSIGNABLE*/"hello"]); |
| 1002 f2(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"h
ello", 3]); | 1002 f2(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_T
YPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 1003 | 1003 |
| 1004 f3(/*info:INFERRED_TYPE_LITERAL*/[]); | 1004 f3(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1005 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 1005 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1006 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 1006 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT
_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 1007 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1007 f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT
_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYP
E_LITERAL*/[3]]); |
| 1008 | 1008 |
| 1009 f4(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 1009 f4(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 1010 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 1010 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1011 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LI
ST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 1011 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_
NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 1012 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*error:LI
ST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1012 f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:COULD_
NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_
TYPE_LITERAL*/[3]]); |
| 1013 } | 1013 } |
| 1014 '''); | 1014 '''); |
| 1015 } | 1015 } |
| 1016 | 1016 |
| 1017 void test_downwardsInferenceOnFunctionExpressions() { | 1017 void test_downwardsInferenceOnFunctionExpressions() { |
| 1018 checkFile(''' | 1018 checkFile(''' |
| 1019 typedef T Function2<S, T>(S x); | 1019 typedef T Function2<S, T>(S x); |
| 1020 | 1020 |
| 1021 void main () { | 1021 void main () { |
| 1022 { | 1022 { |
| 1023 Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null; | 1023 Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null; |
| 1024 Function2<int, String> l1 = (int x) => "hello"; | 1024 Function2<int, String> l1 = (int x) => "hello"; |
| 1025 Function2<int, String> l2 = /*error:INVALID_ASSIGNMENT*/(String x) => "hello
"; | 1025 Function2<int, String> l2 = /*error:INVALID_ASSIGNMENT*/(String x) => "hello
"; |
| 1026 Function2<int, String> l3 = /*error:INVALID_ASSIGNMENT*/(int x) => 3; | 1026 Function2<int, String> l3 = /*error:INVALID_ASSIGNMENT*/(int x) => 3; |
| 1027 Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*
error:RETURN_OF_INVALID_TYPE*/3;}; | 1027 Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*
error:RETURN_OF_INVALID_TYPE*/3;}; |
| 1028 } | 1028 } |
| 1029 { | 1029 { |
| 1030 Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => null; | 1030 Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => null; |
| 1031 Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello"; | 1031 Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello"; |
| 1032 Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSI
GNMENT*/(x) => 3; | 1032 Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSI
GNMENT*/(x) => 3; |
| 1033 Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*erro
r:RETURN_OF_INVALID_TYPE*/3;}; | 1033 Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*erro
r:RETURN_OF_INVALID_TYPE*/3;}; |
| 1034 Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*erro
r:RETURN_OF_INVALID_TYPE*/x;}; | 1034 Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) {return /*erro
r:RETURN_OF_INVALID_TYPE*/x;}; |
| 1035 } | 1035 } |
| 1036 { | 1036 { |
| 1037 Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => n
ull; | 1037 Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => n
ull; |
| 1038 Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[
"hello"]; | 1038 Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[
"hello"]; |
| 1039 Function2<int, List<String>> l2 = /*error:INVALID_ASSIGNMENT*/(String x) =>
/*info:INFERRED_TYPE_LITERAL*/["hello"]; | 1039 Function2<int, List<String>> l2 = /*error:INVALID_ASSIGNMENT*/(String x) =>
/*info:INFERRED_TYPE_LITERAL*/["hello"]; |
| 1040 Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[
/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]; | 1040 Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL,er
ror:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]; |
| 1041 Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {ret
urn /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
}; | 1041 Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {ret
urn /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TY
PE_NOT_ASSIGNABLE*/3];}; |
| 1042 } | 1042 } |
| 1043 { | 1043 { |
| 1044 Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x; | 1044 Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x; |
| 1045 Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1; | 1045 Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1; |
| 1046 Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSI
GNMENT*/(x) => x; | 1046 Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSI
GNMENT*/(x) => x; |
| 1047 Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNA
MIC_CAST, info:DYNAMIC_INVOKE*/x.substring(3); | 1047 Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNA
MIC_CAST, info:DYNAMIC_INVOKE*/x.substring(3); |
| 1048 Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substr
ing(3); | 1048 Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substr
ing(3); |
| 1049 } | 1049 } |
| 1050 } | 1050 } |
| 1051 '''); | 1051 '''); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1086 } | 1086 } |
| 1087 class F3<T> { | 1087 class F3<T> { |
| 1088 F3(Iterable<Iterable<T>> a) {} | 1088 F3(Iterable<Iterable<T>> a) {} |
| 1089 } | 1089 } |
| 1090 class F4<T> { | 1090 class F4<T> { |
| 1091 F4({Iterable<Iterable<T>> a}) {} | 1091 F4({Iterable<Iterable<T>> a}) {} |
| 1092 } | 1092 } |
| 1093 void main() { | 1093 void main() { |
| 1094 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]); | 1094 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1095 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]); | 1095 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 1096 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIG
NABLE*/"hello"]); | 1096 new F0<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 1097 new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIG
NABLE*/"hello", | 1097 new F0<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", |
| 1098 3]); | 1098 3]); |
| 1099 | 1099 |
| 1100 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 1100 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 1101 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[3]); | 1101 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[3]); |
| 1102 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_AS
SIGNABLE*/"hello"]); | 1102 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LI
ST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 1103 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_AS
SIGNABLE*/"hello", 3]); | 1103 new F1<int>(a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LI
ST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 1104 | 1104 |
| 1105 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[]); | 1105 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1106 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[3]); | 1106 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[3]); |
| 1107 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIG
NABLE*/"hello"]); | 1107 new F2<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]); |
| 1108 new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIG
NABLE*/"hello", 3]); | 1108 new F2<int>(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_
ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]); |
| 1109 | 1109 |
| 1110 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[]); | 1110 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1111 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]])
; | 1111 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]])
; |
| 1112 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*er
ror:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 1112 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:
COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 1113 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*er
ror:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], | 1113 new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,error:
COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], |
| 1114 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1114 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1115 | 1115 |
| 1116 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 1116 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 1117 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3
]]); | 1117 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3
]]); |
| 1118 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/
*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); | 1118 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,err
or:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]); |
| 1119 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/
*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], | 1119 new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL,err
or:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], |
| 1120 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1120 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1121 | 1121 |
| 1122 new F3(/*info:INFERRED_TYPE_LITERAL*/[]); | 1122 new F3(/*info:INFERRED_TYPE_LITERAL*/[]); |
| 1123 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 1123 /*info:INFERRED_TYPE_ALLOCATION*/new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:
INFERRED_TYPE_LITERAL*/[3]]); |
| 1124 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/["hello"]]
); | 1124 /*info:INFERRED_TYPE_ALLOCATION*/new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:
INFERRED_TYPE_LITERAL*/["hello"]]); |
| 1125 new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/["hello"], | 1125 /*info:INFERRED_TYPE_ALLOCATION*/new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:
INFERRED_TYPE_LITERAL*/["hello"], |
| 1126 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1126 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1127 | 1127 |
| 1128 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]); | 1128 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]); |
| 1129 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]); | 1129 /*info:INFERRED_TYPE_ALLOCATION*/new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*in
fo:INFERRED_TYPE_LITERAL*/[3]]); |
| 1130 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/["hello
"]]); | 1130 /*info:INFERRED_TYPE_ALLOCATION*/new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*in
fo:INFERRED_TYPE_LITERAL*/["hello"]]); |
| 1131 new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/["hello
"], | 1131 /*info:INFERRED_TYPE_ALLOCATION*/new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*in
fo:INFERRED_TYPE_LITERAL*/["hello"], |
| 1132 /*info:INFERRED_TYPE_LITERAL*/[3]]); | 1132 /*info:INFERRED_TYPE_LITERAL*/[3]]); |
| 1133 } | 1133 } |
| 1134 '''); | 1134 '''); |
| 1135 } | 1135 } |
| 1136 | 1136 |
| 1137 void test_downwardsInferenceOnGenericFunctionExpressions() { | 1137 void test_downwardsInferenceOnGenericFunctionExpressions() { |
| 1138 checkFile(''' | 1138 checkFile(''' |
| 1139 void main () { | 1139 void main () { |
| 1140 { | 1140 { |
| 1141 String f/*<S>*/(int x) => null; | 1141 String f/*<S>*/(int x) => null; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1154 v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*//*<T>*/(x) => 3; | 1154 v = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*//*<T>*/(x) => 3; |
| 1155 v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {re
turn /*error:RETURN_OF_INVALID_TYPE*/3;}; | 1155 v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {re
turn /*error:RETURN_OF_INVALID_TYPE*/3;}; |
| 1156 v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {re
turn /*error:RETURN_OF_INVALID_TYPE*/x;}; | 1156 v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {re
turn /*error:RETURN_OF_INVALID_TYPE*/x;}; |
| 1157 } | 1157 } |
| 1158 { | 1158 { |
| 1159 List<String> f/*<S>*/(int x) => null; | 1159 List<String> f/*<S>*/(int x) => null; |
| 1160 var v = f; | 1160 var v = f; |
| 1161 v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null; | 1161 v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null; |
| 1162 v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"]; | 1162 v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"]; |
| 1163 v = /*error:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LI
TERAL*/["hello"]; | 1163 v = /*error:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LI
TERAL*/["hello"]; |
| 1164 v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TY
PE_NOT_ASSIGNABLE*/3]; | 1164 v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/
*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]; |
| 1165 v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYP
E_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];}; | 1165 v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYP
E_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];}
; |
| 1166 } | 1166 } |
| 1167 { | 1167 { |
| 1168 int int2int/*<S>*/(int x) => null; | 1168 int int2int/*<S>*/(int x) => null; |
| 1169 String int2String/*<T>*/(int x) => null; | 1169 String int2String/*<T>*/(int x) => null; |
| 1170 String string2String/*<T>*/(String x) => null; | 1170 String string2String/*<T>*/(String x) => null; |
| 1171 var x = int2int; | 1171 var x = int2int; |
| 1172 x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x; | 1172 x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x; |
| 1173 x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x+1; | 1173 x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x+1; |
| 1174 var y = int2String; | 1174 var y = int2String; |
| 1175 y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*//*<T>*/(x) => x; | 1175 y = /*info:INFERRED_TYPE_CLOSURE, error:INVALID_ASSIGNMENT*//*<T>*/(x) => x; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); | 1276 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3); |
| 1277 } | 1277 } |
| 1278 { | 1278 { |
| 1279 A<C<int>, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new E("hello"); | 1279 A<C<int>, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new E("hello"); |
| 1280 } | 1280 } |
| 1281 { // Check named and optional arguments | 1281 { // Check named and optional arguments |
| 1282 A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", | 1282 A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", |
| 1283 a: /*info:INFERRED_TYPE_LITERAL*/[3], | 1283 a: /*info:INFERRED_TYPE_LITERAL*/[3], |
| 1284 b: /*info:INFERRED_TYPE_LITERAL*/["hello"]); | 1284 b: /*info:INFERRED_TYPE_LITERAL*/["hello"]); |
| 1285 A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", | 1285 A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello", |
| 1286 a: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNAB
LE*/"hello"], | 1286 a: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELE
MENT_TYPE_NOT_ASSIGNABLE*/"hello"], |
| 1287 b: /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNAB
LE*/3]); | 1287 b: /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST_ELE
MENT_TYPE_NOT_ASSIGNABLE*/3]); |
| 1288 A<int, String> a2 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
3, "hello"); | 1288 A<int, String> a2 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
3, "hello"); |
| 1289 A<int, String> a3 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello")
; | 1289 A<int, String> a3 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello")
; |
| 1290 A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_I
NFER,error:COULD_NOT_INFER*/F.named(3, "hello", | 1290 A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_I
NFER,error:COULD_NOT_INFER*/F.named(3, "hello", |
| 1291 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*error:ARGUMENT_TYPE_NOT
_ASSIGNABLE*/3); | 1291 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*error:ARGUMENT_TYPE_NOT
_ASSIGNABLE*/3); |
| 1292 A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_I
NFER*/F.named(3, "hello", | 1292 A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new /*error:COULD_NOT_I
NFER*/F.named(3, "hello", |
| 1293 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello"); | 1293 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello"); |
| 1294 } | 1294 } |
| 1295 } | 1295 } |
| 1296 '''); | 1296 '''); |
| 1297 } | 1297 } |
| 1298 | 1298 |
| 1299 void test_downwardsInferenceOnListLiterals_inferDownwards() { | 1299 void test_downwardsInferenceOnListLiterals_inferDownwards() { |
| 1300 checkFile(''' | 1300 checkFile(''' |
| 1301 void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [], | 1301 void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [], |
| 1302 List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST
_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]]) { | 1302 List<String> list2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFE
R*/const [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_A
SSIGNABLE*/42]]) { |
| 1303 } | 1303 } |
| 1304 | 1304 |
| 1305 void main() { | 1305 void main() { |
| 1306 { | 1306 { |
| 1307 List<int> l0 = /*info:INFERRED_TYPE_LITERAL*/[]; | 1307 List<int> l0 = /*info:INFERRED_TYPE_LITERAL*/[]; |
| 1308 List<int> l1 = /*info:INFERRED_TYPE_LITERAL*/[3]; | 1308 List<int> l1 = /*info:INFERRED_TYPE_LITERAL*/[3]; |
| 1309 List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_
ASSIGNABLE*/"hello"]; | 1309 List<int> l2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:
LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]; |
| 1310 List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_
ASSIGNABLE*/"hello", 3]; | 1310 List<int> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:
LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]; |
| 1311 } | 1311 } |
| 1312 { | 1312 { |
| 1313 List<dynamic> l0 = []; | 1313 List<dynamic> l0 = []; |
| 1314 List<dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/[3]; | 1314 List<dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/[3]; |
| 1315 List<dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/["hello"]; | 1315 List<dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/["hello"]; |
| 1316 List<dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/["hello", 3]; | 1316 List<dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/["hello", 3]; |
| 1317 } | 1317 } |
| 1318 { | 1318 { |
| 1319 List<int> l0 = /*error:STATIC_TYPE_ERROR*/<num>[]; | 1319 List<int> l0 = /*error:STATIC_TYPE_ERROR*/<num>[]; |
| 1320 List<int> l1 = /*error:STATIC_TYPE_ERROR*/<num>[3]; | 1320 List<int> l1 = /*error:STATIC_TYPE_ERROR*/<num>[3]; |
| 1321 List<int> l2 = /*error:STATIC_TYPE_ERROR*/<num>[/*error:LIST_ELEMENT_TYPE_NO
T_ASSIGNABLE*/"hello"]; | 1321 List<int> l2 = /*error:STATIC_TYPE_ERROR*/<num>[/*error:LIST_ELEMENT_TYPE_NO
T_ASSIGNABLE*/"hello"]; |
| 1322 List<int> l3 = /*error:STATIC_TYPE_ERROR*/<num>[/*error:LIST_ELEMENT_TYPE_NO
T_ASSIGNABLE*/"hello", 3]; | 1322 List<int> l3 = /*error:STATIC_TYPE_ERROR*/<num>[/*error:LIST_ELEMENT_TYPE_NO
T_ASSIGNABLE*/"hello", 3]; |
| 1323 } | 1323 } |
| 1324 { | 1324 { |
| 1325 Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[]; | 1325 Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[]; |
| 1326 Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3]; | 1326 Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3]; |
| 1327 Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_
NOT_ASSIGNABLE*/"hello"]; | 1327 Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*er
ror:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]; |
| 1328 Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_
NOT_ASSIGNABLE*/"hello", 3]; | 1328 Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*er
ror:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]; |
| 1329 } | 1329 } |
| 1330 { | 1330 { |
| 1331 const List<int> c0 = /*info:INFERRED_TYPE_LITERAL*/const []; | 1331 const List<int> c0 = /*info:INFERRED_TYPE_LITERAL*/const []; |
| 1332 const List<int> c1 = /*info:INFERRED_TYPE_LITERAL*/const [3]; | 1332 const List<int> c1 = /*info:INFERRED_TYPE_LITERAL*/const [3]; |
| 1333 const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]; | 1333 const List<int> c2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/con
st [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNA
BLE*/"hello"]; |
| 1334 const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*error:LIST_ELEME
NT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]; | 1334 const List<int> c3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/con
st [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNA
BLE*/"hello", 3]; |
| 1335 } | 1335 } |
| 1336 } | 1336 } |
| 1337 '''); | 1337 '''); |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 void test_downwardsInferenceOnListLiterals_inferIfValueTypesMatchContext() { | 1340 void test_downwardsInferenceOnListLiterals_inferIfValueTypesMatchContext() { |
| 1341 checkFile(r''' | 1341 checkFile(r''' |
| 1342 class DartType {} | 1342 class DartType {} |
| 1343 typedef void Asserter<T>(T type); | 1343 typedef void Asserter<T>(T type); |
| 1344 typedef Asserter<T> AsserterBuilder<S, T>(S arg); | 1344 typedef Asserter<T> AsserterBuilder<S, T>(S arg); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 G<int> g; | 1392 G<int> g; |
| 1393 g.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]); | 1393 g.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]); |
| 1394 g.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]); | 1394 g.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]); |
| 1395 } | 1395 } |
| 1396 '''); | 1396 '''); |
| 1397 } | 1397 } |
| 1398 | 1398 |
| 1399 void test_downwardsInferenceOnMapLiterals() { | 1399 void test_downwardsInferenceOnMapLiterals() { |
| 1400 checkFile(''' | 1400 checkFile(''' |
| 1401 void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"}
, | 1401 void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"}
, |
| 1402 Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const { | 1402 Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/co
nst { |
| 1403 // One error is from type checking and the other is from const evaluation. | 1403 // One error is from type checking and the other is from const evaluation. |
| 1404 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": | 1404 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": |
| 1405 "world" | 1405 "world" |
| 1406 }]) { | 1406 }]) { |
| 1407 } | 1407 } |
| 1408 void main() { | 1408 void main() { |
| 1409 { | 1409 { |
| 1410 Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; | 1410 Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; |
| 1411 Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; | 1411 Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; |
| 1412 Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{ | 1412 Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ |
| 1413 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello" | 1413 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello" |
| 1414 }; | 1414 }; |
| 1415 Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{ | 1415 Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ |
| 1416 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 | 1416 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 |
| 1417 }; | 1417 }; |
| 1418 Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{ | 1418 Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER,err
or:COULD_NOT_INFER*/{ |
| 1419 3: "hello", | 1419 3: "hello", |
| 1420 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": | 1420 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": |
| 1421 /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 | 1421 /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 |
| 1422 }; | 1422 }; |
| 1423 } | 1423 } |
| 1424 { | 1424 { |
| 1425 Map<dynamic, dynamic> l0 = {}; | 1425 Map<dynamic, dynamic> l0 = {}; |
| 1426 Map<dynamic, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; | 1426 Map<dynamic, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; |
| 1427 Map<dynamic, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"}; | 1427 Map<dynamic, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"}; |
| 1428 Map<dynamic, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3}; | 1428 Map<dynamic, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3}; |
| 1429 Map<dynamic, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{3:"hello", "hello"
: 3}; | 1429 Map<dynamic, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{3:"hello", "hello"
: 3}; |
| 1430 } | 1430 } |
| 1431 { | 1431 { |
| 1432 Map<dynamic, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; | 1432 Map<dynamic, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; |
| 1433 Map<dynamic, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; | 1433 Map<dynamic, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; |
| 1434 Map<dynamic, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"}; | 1434 Map<dynamic, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"}; |
| 1435 Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{ | 1435 Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER
*/{ |
| 1436 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 | 1436 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 |
| 1437 }; | 1437 }; |
| 1438 Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{ | 1438 Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER
*/{ |
| 1439 3: "hello", | 1439 3: "hello", |
| 1440 "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 | 1440 "hello": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3 |
| 1441 }; | 1441 }; |
| 1442 } | 1442 } |
| 1443 { | 1443 { |
| 1444 Map<int, dynamic> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; | 1444 Map<int, dynamic> l0 = /*info:INFERRED_TYPE_LITERAL*/{}; |
| 1445 Map<int, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; | 1445 Map<int, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"}; |
| 1446 Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{ | 1446 Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ |
| 1447 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello" | 1447 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello" |
| 1448 }; | 1448 }; |
| 1449 Map<int, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3}; | 1449 Map<int, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3}; |
| 1450 Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{ | 1450 Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ |
| 1451 3:"hello", | 1451 3:"hello", |
| 1452 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3 | 1452 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3 |
| 1453 }; | 1453 }; |
| 1454 } | 1454 } |
| 1455 { | 1455 { |
| 1456 Map<int, String> l0 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{}; | 1456 Map<int, String> l0 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{}; |
| 1457 Map<int, String> l1 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{3: "hello"}; | 1457 Map<int, String> l1 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{3: "hello"}; |
| 1458 Map<int, String> l3 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{3: 3}; | 1458 Map<int, String> l3 = /*error:STATIC_TYPE_ERROR*/<num, dynamic>{3: 3}; |
| 1459 } | 1459 } |
| 1460 { | 1460 { |
| 1461 const Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/const {}; | 1461 const Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/const {}; |
| 1462 const Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/const {3: "hello"}
; | 1462 const Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/const {3: "hello"}
; |
| 1463 const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const { | 1463 const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INF
ER*/const { |
| 1464 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": | 1464 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": |
| 1465 "hello" | 1465 "hello" |
| 1466 }; | 1466 }; |
| 1467 const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const { | 1467 const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INF
ER*/const { |
| 1468 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNAB
LE*/3 | 1468 3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNAB
LE*/3 |
| 1469 }; | 1469 }; |
| 1470 const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const { | 1470 const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INF
ER,error:COULD_NOT_INFER*/const { |
| 1471 3:"hello", | 1471 3:"hello", |
| 1472 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": | 1472 /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"he
llo": |
| 1473 /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNA
BLE*/3 | 1473 /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNA
BLE*/3 |
| 1474 }; | 1474 }; |
| 1475 } | 1475 } |
| 1476 } | 1476 } |
| 1477 '''); | 1477 '''); |
| 1478 } | 1478 } |
| 1479 | 1479 |
| 1480 void test_downwardsInferenceYieldYieldStar() { | 1480 void test_downwardsInferenceYieldYieldStar() { |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1739 foo() async { | 1739 foo() async { |
| 1740 Future<List<A>> f1 = null; | 1740 Future<List<A>> f1 = null; |
| 1741 Future<List<A>> f2 = null; | 1741 Future<List<A>> f2 = null; |
| 1742 List<List<A>> merged = await Future.wait(/*info:INFERRED_TYPE_LITERAL*/[f1, f2
]); | 1742 List<List<A>> merged = await Future.wait(/*info:INFERRED_TYPE_LITERAL*/[f1, f2
]); |
| 1743 } | 1743 } |
| 1744 | 1744 |
| 1745 class A {} | 1745 class A {} |
| 1746 '''); | 1746 '''); |
| 1747 } | 1747 } |
| 1748 | 1748 |
| 1749 void test_futureUnion_upwardsGenericMethods() { |
| 1750 // Regression test for https://github.com/dart-lang/sdk/issues/27151 |
| 1751 checkFile(r''' |
| 1752 import 'dart:async'; |
| 1753 |
| 1754 main() async { |
| 1755 var b = new Future<B>.value(new B()); |
| 1756 var c = new Future<C>.value(new C()); |
| 1757 var lll = /*info:INFERRED_TYPE_LITERAL*/[b, c]; |
| 1758 var result = await Future.wait(lll); |
| 1759 var result2 = await Future.wait(/*info:INFERRED_TYPE_LITERAL*/[b, c]); |
| 1760 List<A> list = result; |
| 1761 list = result2; |
| 1762 } |
| 1763 |
| 1764 class A {} |
| 1765 class B extends A {} |
| 1766 class C extends A {} |
| 1767 '''); |
| 1768 } |
| 1769 |
| 1749 void test_genericMethods_basicDownwardInference() { | 1770 void test_genericMethods_basicDownwardInference() { |
| 1750 checkFile(r''' | 1771 checkFile(r''' |
| 1751 /*=T*/ f/*<S, T>*/(/*=S*/ s) => null; | 1772 /*=T*/ f/*<S, T>*/(/*=S*/ s) => null; |
| 1752 main() { | 1773 main() { |
| 1753 String x = f(42); | 1774 String x = f(42); |
| 1754 String y = (f)(42); | 1775 String y = (f)(42); |
| 1755 } | 1776 } |
| 1756 '''); | 1777 '''); |
| 1757 } | 1778 } |
| 1758 | 1779 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1826 print(y); | 1847 print(y); |
| 1827 } | 1848 } |
| 1828 '''); | 1849 '''); |
| 1829 } | 1850 } |
| 1830 | 1851 |
| 1831 void test_genericMethods_downwardsInferenceAffectsArguments() { | 1852 void test_genericMethods_downwardsInferenceAffectsArguments() { |
| 1832 checkFile(r''' | 1853 checkFile(r''' |
| 1833 /*=T*/ f/*<T>*/(List/*<T>*/ s) => null; | 1854 /*=T*/ f/*<T>*/(List/*<T>*/ s) => null; |
| 1834 main() { | 1855 main() { |
| 1835 String x = f(/*info:INFERRED_TYPE_LITERAL*/['hi']); | 1856 String x = f(/*info:INFERRED_TYPE_LITERAL*/['hi']); |
| 1836 String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*error:LIST_ELEMENT_TYPE_NOT_ASSI
GNABLE*/42]); | 1857 String y = f(/*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*error:LIST
_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]); |
| 1837 } | 1858 } |
| 1838 '''); | 1859 '''); |
| 1839 } | 1860 } |
| 1840 | 1861 |
| 1841 void test_genericMethods_downwardsInferenceFold() { | 1862 void test_genericMethods_downwardsInferenceFold() { |
| 1842 // Regression from https://github.com/dart-lang/sdk/issues/25491 | 1863 // Regression from https://github.com/dart-lang/sdk/issues/25491 |
| 1843 // The first example works now, but the latter requires a full solution to | 1864 // The first example works now, but the latter requires a full solution to |
| 1844 // https://github.com/dart-lang/sdk/issues/25490 | 1865 // https://github.com/dart-lang/sdk/issues/25490 |
| 1845 checkFile(r''' | 1866 checkFile(r''' |
| 1846 void main() { | 1867 void main() { |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2727 | 2748 |
| 2728 Resource getResource(String str) => null; | 2749 Resource getResource(String str) => null; |
| 2729 | 2750 |
| 2730 class Foo<T> { | 2751 class Foo<T> { |
| 2731 Foo(T t); | 2752 Foo(T t); |
| 2732 } | 2753 } |
| 2733 | 2754 |
| 2734 main() { | 2755 main() { |
| 2735 // List inside map | 2756 // List inside map |
| 2736 var map = <String, List<Folder>>{ | 2757 var map = <String, List<Folder>>{ |
| 2737 'pkgA': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResourc
e('/pkgA/lib/')], | 2758 'pkgA': /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAS
T_IMPLICIT*/getResource('/pkgA/lib/')], |
| 2738 'pkgB': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResourc
e('/pkgB/lib/')] | 2759 'pkgB': /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAS
T_IMPLICIT*/getResource('/pkgB/lib/')] |
| 2739 }; | 2760 }; |
| 2740 // Also try map inside list | 2761 // Also try map inside list |
| 2741 var list = <Map<String, Folder>>[ | 2762 var list = <Map<String, Folder>>[ |
| 2742 /*info:INFERRED_TYPE_LITERAL*/{ 'pkgA': /*info:DOWN_CAST_IMPLICIT*/getResour
ce('/pkgA/lib/') }, | 2763 /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ 'pkgA': /*info:DOWN_CA
ST_IMPLICIT*/getResource('/pkgA/lib/') }, |
| 2743 /*info:INFERRED_TYPE_LITERAL*/{ 'pkgB': /*info:DOWN_CAST_IMPLICIT*/getResour
ce('/pkgB/lib/') }, | 2764 /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/{ 'pkgB': /*info:DOWN_CA
ST_IMPLICIT*/getResource('/pkgB/lib/') }, |
| 2744 ]; | 2765 ]; |
| 2745 // Instance creation too | 2766 // Instance creation too |
| 2746 var foo = new Foo<List<Folder>>( | 2767 var foo = new Foo<List<Folder>>( |
| 2747 /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA
/lib/')] | 2768 /*info:INFERRED_TYPE_LITERAL,error:COULD_NOT_INFER*/[/*info:DOWN_CAST_IMPLIC
IT*/getResource('/pkgA/lib/')] |
| 2748 ); | 2769 ); |
| 2749 } | 2770 } |
| 2750 '''); | 2771 '''); |
| 2751 } | 2772 } |
| 2752 | 2773 |
| 2753 void test_inferLocalFunctionReturnType() { | 2774 void test_inferLocalFunctionReturnType() { |
| 2754 // Regression test for https://github.com/dart-lang/sdk/issues/26414 | 2775 // Regression test for https://github.com/dart-lang/sdk/issues/26414 |
| 2755 var unit = checkFile(r''' | 2776 var unit = checkFile(r''' |
| 2756 main() { | 2777 main() { |
| 2757 f0() => 42; | 2778 f0() => 42; |
| (...skipping 1775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4533 } | 4554 } |
| 4534 | 4555 |
| 4535 /// Adds a file using [helper.addFile] and calls [helper.check]. | 4556 /// Adds a file using [helper.addFile] and calls [helper.check]. |
| 4536 /// | 4557 /// |
| 4537 /// Also returns the resolved compilation unit. | 4558 /// Also returns the resolved compilation unit. |
| 4538 @override | 4559 @override |
| 4539 CompilationUnitElement checkFile(String content) { | 4560 CompilationUnitElement checkFile(String content) { |
| 4540 return helper.checkFile(content).element; | 4561 return helper.checkFile(content).element; |
| 4541 } | 4562 } |
| 4542 } | 4563 } |
| OLD | NEW |