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

Side by Side Diff: pkg/analyzer/test/src/task/strong/inferred_type_test.dart

Issue 2343713002: fix #27151, list and map literals infer using up and down info (Closed)
Patch Set: format Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698