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 |