OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer.test.src.task.strong.checker_test; | 5 library analyzer.test.src.task.strong.checker_test; |
6 | 6 |
7 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 7 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
8 | 8 |
9 import 'strong_test_helper.dart'; | 9 import 'strong_test_helper.dart'; |
10 | 10 |
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 checkFile(r''' | 716 checkFile(r''' |
717 class Animal { | 717 class Animal { |
718 Animal(); | 718 Animal(); |
719 factory Animal.cat() => new Cat(); | 719 factory Animal.cat() => new Cat(); |
720 } | 720 } |
721 | 721 |
722 class Cat extends Animal {} | 722 class Cat extends Animal {} |
723 | 723 |
724 void main() { | 724 void main() { |
725 Cat c = /*info:ASSIGNMENT_CAST*/new Animal.cat(); | 725 Cat c = /*info:ASSIGNMENT_CAST*/new Animal.cat(); |
726 c = /*error:STATIC_TYPE_ERROR*/new Animal(); | 726 c = /*error:INVALID_CAST_NEW_EXPR*/new Animal(); |
727 }'''); | 727 }'''); |
728 } | 728 } |
729 | 729 |
730 void test_fieldFieldOverride() { | 730 void test_fieldFieldOverride() { |
731 checkFile(''' | 731 checkFile(''' |
732 class A {} | 732 class A {} |
733 class B extends A {} | 733 class B extends A {} |
734 class C extends B {} | 734 class C extends B {} |
735 | 735 |
736 class Base { | 736 class Base { |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 } | 1035 } |
1036 { | 1036 { |
1037 Top f; | 1037 Top f; |
1038 f = top; | 1038 f = top; |
1039 f = left; | 1039 f = left; |
1040 f = right; | 1040 f = right; |
1041 f = bot; | 1041 f = bot; |
1042 } | 1042 } |
1043 { | 1043 { |
1044 Left f; | 1044 Left f; |
1045 f = /*error:STATIC_TYPE_ERROR*/top; | 1045 f = /*error:INVALID_CAST_FUNCTION*/top; |
1046 f = left; | 1046 f = left; |
1047 f = /*error:INVALID_ASSIGNMENT*/right; | 1047 f = /*error:INVALID_ASSIGNMENT*/right; |
1048 f = bot; | 1048 f = bot; |
1049 } | 1049 } |
1050 { | 1050 { |
1051 Right f; | 1051 Right f; |
1052 f = /*error:STATIC_TYPE_ERROR*/top; | 1052 f = /*error:INVALID_CAST_FUNCTION*/top; |
1053 f = /*error:INVALID_ASSIGNMENT*/left; | 1053 f = /*error:INVALID_ASSIGNMENT*/left; |
1054 f = right; | 1054 f = right; |
1055 f = bot; | 1055 f = bot; |
1056 } | 1056 } |
1057 { | 1057 { |
1058 Bot f; | 1058 Bot f; |
1059 f = /*error:STATIC_TYPE_ERROR*/top; | 1059 f = /*error:INVALID_CAST_FUNCTION*/top; |
1060 f = /*error:STATIC_TYPE_ERROR*/left; | 1060 f = /*error:INVALID_CAST_FUNCTION*/left; |
1061 f = /*error:STATIC_TYPE_ERROR*/right; | 1061 f = /*error:INVALID_CAST_FUNCTION*/right; |
1062 f = bot; | 1062 f = bot; |
1063 } | 1063 } |
1064 } | 1064 } |
1065 '''); | 1065 '''); |
1066 } | 1066 } |
1067 | 1067 |
1068 void test_functionTypingAndSubtyping_dynamic() { | 1068 void test_functionTypingAndSubtyping_dynamic() { |
1069 checkFile(''' | 1069 checkFile(''' |
1070 class A {} | 1070 class A {} |
1071 | 1071 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1219 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => (/*info:UNNECESSARY_CAST*
/x as Object), | 1219 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => (/*info:UNNECESSARY_CAST*
/x as Object), |
1220 botA, | 1220 botA, |
1221 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1221 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1222 ); | 1222 ); |
1223 } | 1223 } |
1224 { | 1224 { |
1225 AA f; | 1225 AA f; |
1226 f = topA; | 1226 f = topA; |
1227 f = /*error:INVALID_ASSIGNMENT*/topTop; | 1227 f = /*error:INVALID_ASSIGNMENT*/topTop; |
1228 f = aa; | 1228 f = aa; |
1229 f = /*error:STATIC_TYPE_ERROR*/aTop; // known function | 1229 f = /*error:INVALID_CAST_FUNCTION*/aTop; // known function |
1230 f = /*warning:DOWN_CAST_COMPOSITE*/botA; | 1230 f = /*warning:DOWN_CAST_COMPOSITE*/botA; |
1231 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; | 1231 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; |
1232 apply/*<AA>*/( | 1232 apply/*<AA>*/( |
1233 topA, | 1233 topA, |
1234 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/topTop, | 1234 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/topTop, |
1235 aa, | 1235 aa, |
1236 /*error:STATIC_TYPE_ERROR*/aTop, // known function | 1236 /*error:INVALID_CAST_FUNCTION*/aTop, // known function |
1237 /*warning:DOWN_CAST_COMPOSITE*/botA, | 1237 /*warning:DOWN_CAST_COMPOSITE*/botA, |
1238 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1238 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1239 ); | 1239 ); |
1240 apply/*<AA>*/( | 1240 apply/*<AA>*/( |
1241 (dynamic x) => new A(), | 1241 (dynamic x) => new A(), |
1242 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(dynamic x) => (x as Object), | 1242 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(dynamic x) => (x as Object), |
1243 (A x) => x, | 1243 (A x) => x, |
1244 /*error:STATIC_TYPE_ERROR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Objec
t), // known function | 1244 /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x
as Object), // known function |
1245 /*warning:DOWN_CAST_COMPOSITE*/botA, | 1245 /*warning:DOWN_CAST_COMPOSITE*/botA, |
1246 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1246 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1247 ); | 1247 ); |
1248 } | 1248 } |
1249 { | 1249 { |
1250 TopTop f; | 1250 TopTop f; |
1251 f = topA; | 1251 f = topA; |
1252 f = topTop; | 1252 f = topTop; |
1253 f = /*error:INVALID_ASSIGNMENT*/aa; | 1253 f = /*error:INVALID_ASSIGNMENT*/aa; |
1254 f = /*error:STATIC_TYPE_ERROR*/aTop; // known function | 1254 f = /*error:INVALID_CAST_FUNCTION*/aTop; // known function |
1255 f = /*error:INVALID_ASSIGNMENT*/botA; | 1255 f = /*error:INVALID_ASSIGNMENT*/botA; |
1256 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; | 1256 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; |
1257 apply/*<TopTop>*/( | 1257 apply/*<TopTop>*/( |
1258 topA, | 1258 topA, |
1259 topTop, | 1259 topTop, |
1260 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/aa, | 1260 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/aa, |
1261 /*error:STATIC_TYPE_ERROR*/aTop, // known function | 1261 /*error:INVALID_CAST_FUNCTION*/aTop, // known function |
1262 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA, | 1262 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA, |
1263 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1263 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1264 ); | 1264 ); |
1265 apply/*<TopTop>*/( | 1265 apply/*<TopTop>*/( |
1266 (dynamic x) => new A(), | 1266 (dynamic x) => new A(), |
1267 (dynamic x) => (x as Object), | 1267 (dynamic x) => (x as Object), |
1268 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => x, | 1268 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/(A x) => x, |
1269 /*error:STATIC_TYPE_ERROR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Objec
t), // known function | 1269 /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x
as Object), // known function |
1270 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA, | 1270 /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/botA, |
1271 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1271 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1272 ); | 1272 ); |
1273 } | 1273 } |
1274 { | 1274 { |
1275 TopA f; | 1275 TopA f; |
1276 f = topA; | 1276 f = topA; |
1277 f = /*error:STATIC_TYPE_ERROR*/topTop; // known function | 1277 f = /*error:INVALID_CAST_FUNCTION*/topTop; // known function |
1278 f = /*error:STATIC_TYPE_ERROR*/aa; // known function | 1278 f = /*error:INVALID_CAST_FUNCTION*/aa; // known function |
1279 f = /*error:STATIC_TYPE_ERROR*/aTop; // known function | 1279 f = /*error:INVALID_CAST_FUNCTION*/aTop; // known function |
1280 f = /*warning:DOWN_CAST_COMPOSITE*/botA; | 1280 f = /*warning:DOWN_CAST_COMPOSITE*/botA; |
1281 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; | 1281 f = /*warning:DOWN_CAST_COMPOSITE*/botTop; |
1282 apply/*<TopA>*/( | 1282 apply/*<TopA>*/( |
1283 topA, | 1283 topA, |
1284 /*error:STATIC_TYPE_ERROR*/topTop, // known function | 1284 /*error:INVALID_CAST_FUNCTION*/topTop, // known function |
1285 /*error:STATIC_TYPE_ERROR*/aa, // known function | 1285 /*error:INVALID_CAST_FUNCTION*/aa, // known function |
1286 /*error:STATIC_TYPE_ERROR*/aTop, // known function | 1286 /*error:INVALID_CAST_FUNCTION*/aTop, // known function |
1287 /*warning:DOWN_CAST_COMPOSITE*/botA, | 1287 /*warning:DOWN_CAST_COMPOSITE*/botA, |
1288 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1288 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1289 ); | 1289 ); |
1290 apply/*<TopA>*/( | 1290 apply/*<TopA>*/( |
1291 (dynamic x) => new A(), | 1291 (dynamic x) => new A(), |
1292 /*error:STATIC_TYPE_ERROR*/(dynamic x) => (x as Object), // known functi
on | 1292 /*error:INVALID_CAST_FUNCTION_EXPR*/(dynamic x) => (x as Object), // kno
wn function |
1293 /*error:STATIC_TYPE_ERROR*/(A x) => x, // known function | 1293 /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => x, // known function |
1294 /*error:STATIC_TYPE_ERROR*/(A x) => (/*info:UNNECESSARY_CAST*/x as Objec
t), // known function | 1294 /*error:INVALID_CAST_FUNCTION_EXPR*/(A x) => (/*info:UNNECESSARY_CAST*/x
as Object), // known function |
1295 /*warning:DOWN_CAST_COMPOSITE*/botA, | 1295 /*warning:DOWN_CAST_COMPOSITE*/botA, |
1296 /*warning:DOWN_CAST_COMPOSITE*/botTop | 1296 /*warning:DOWN_CAST_COMPOSITE*/botTop |
1297 ); | 1297 ); |
1298 } | 1298 } |
1299 } | 1299 } |
1300 '''); | 1300 '''); |
1301 } | 1301 } |
1302 | 1302 |
1303 void test_functionTypingAndSubtyping_dynamicFunctions_clasuresAreNotFuzzy() { | 1303 void test_functionTypingAndSubtyping_dynamicFunctions_closuresAreNotFuzzy() { |
1304 // Regression test for | 1304 // Regression test for |
1305 // https://github.com/dart-lang/sdk/issues/26118 | 1305 // https://github.com/dart-lang/sdk/issues/26118 |
1306 // https://github.com/dart-lang/sdk/issues/26156 | 1306 // https://github.com/dart-lang/sdk/issues/26156 |
1307 checkFile(''' | 1307 checkFile(''' |
1308 void takesF(void f(int x)) {} | 1308 void takesF(void f(int x)) {} |
1309 | 1309 |
1310 typedef void TakesInt(int x); | 1310 typedef void TakesInt(int x); |
1311 | 1311 |
1312 void update(_) {} | 1312 void update(_) {} |
1313 void updateOpt([_]) {} | 1313 void updateOpt([_]) {} |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 void main() { | 1372 void main() { |
1373 { | 1373 { |
1374 Function2<B, A> f; | 1374 Function2<B, A> f; |
1375 f = top; | 1375 f = top; |
1376 f = left; | 1376 f = left; |
1377 f = right; | 1377 f = right; |
1378 f = bot; | 1378 f = bot; |
1379 } | 1379 } |
1380 { | 1380 { |
1381 Function2<B, B> f; // left | 1381 Function2<B, B> f; // left |
1382 f = /*error:STATIC_TYPE_ERROR*/top; | 1382 f = /*error:INVALID_CAST_FUNCTION*/top; |
1383 f = left; | 1383 f = left; |
1384 f = /*error:INVALID_ASSIGNMENT*/right; | 1384 f = /*error:INVALID_ASSIGNMENT*/right; |
1385 f = bot; | 1385 f = bot; |
1386 } | 1386 } |
1387 { | 1387 { |
1388 Function2<A, A> f; // right | 1388 Function2<A, A> f; // right |
1389 f = /*error:STATIC_TYPE_ERROR*/top; | 1389 f = /*error:INVALID_CAST_FUNCTION*/top; |
1390 f = /*error:INVALID_ASSIGNMENT*/left; | 1390 f = /*error:INVALID_ASSIGNMENT*/left; |
1391 f = right; | 1391 f = right; |
1392 f = bot; | 1392 f = bot; |
1393 } | 1393 } |
1394 { | 1394 { |
1395 Function2<A, B> f; | 1395 Function2<A, B> f; |
1396 f = /*error:STATIC_TYPE_ERROR*/top; | 1396 f = /*error:INVALID_CAST_FUNCTION*/top; |
1397 f = /*error:STATIC_TYPE_ERROR*/left; | 1397 f = /*error:INVALID_CAST_FUNCTION*/left; |
1398 f = /*error:STATIC_TYPE_ERROR*/right; | 1398 f = /*error:INVALID_CAST_FUNCTION*/right; |
1399 f = bot; | 1399 f = bot; |
1400 } | 1400 } |
1401 } | 1401 } |
1402 '''); | 1402 '''); |
1403 } | 1403 } |
1404 | 1404 |
1405 void test_functionTypingAndSubtyping_functionVariableVariance() { | 1405 void test_functionTypingAndSubtyping_functionVariableVariance() { |
1406 checkFile(''' | 1406 checkFile(''' |
1407 class A {} | 1407 class A {} |
1408 class B extends A {} | 1408 class B extends A {} |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 void main() { | 1459 void main() { |
1460 { | 1460 { |
1461 Function2<AToB, BToA> f; // Top | 1461 Function2<AToB, BToA> f; // Top |
1462 f = top; | 1462 f = top; |
1463 f = left; | 1463 f = left; |
1464 f = right; | 1464 f = right; |
1465 f = bot; | 1465 f = bot; |
1466 } | 1466 } |
1467 { | 1467 { |
1468 Function2<AToB, AToB> f; // Left | 1468 Function2<AToB, AToB> f; // Left |
1469 f = /*error:STATIC_TYPE_ERROR*/top; | 1469 f = /*error:INVALID_CAST_FUNCTION*/top; |
1470 f = left; | 1470 f = left; |
1471 f = /*error:INVALID_ASSIGNMENT*/right; | 1471 f = /*error:INVALID_ASSIGNMENT*/right; |
1472 f = bot; | 1472 f = bot; |
1473 } | 1473 } |
1474 { | 1474 { |
1475 Function2<BToA, BToA> f; // Right | 1475 Function2<BToA, BToA> f; // Right |
1476 f = /*error:STATIC_TYPE_ERROR*/top; | 1476 f = /*error:INVALID_CAST_FUNCTION*/top; |
1477 f = /*error:INVALID_ASSIGNMENT*/left; | 1477 f = /*error:INVALID_ASSIGNMENT*/left; |
1478 f = right; | 1478 f = right; |
1479 f = bot; | 1479 f = bot; |
1480 } | 1480 } |
1481 { | 1481 { |
1482 Function2<BToA, AToB> f; // Bot | 1482 Function2<BToA, AToB> f; // Bot |
1483 f = bot; | 1483 f = bot; |
1484 f = /*error:STATIC_TYPE_ERROR*/left; | 1484 f = /*error:INVALID_CAST_FUNCTION*/left; |
1485 f = /*error:STATIC_TYPE_ERROR*/top; | 1485 f = /*error:INVALID_CAST_FUNCTION*/top; |
1486 f = /*error:STATIC_TYPE_ERROR*/right; | 1486 f = /*error:INVALID_CAST_FUNCTION*/right; |
1487 } | 1487 } |
1488 } | 1488 } |
1489 '''); | 1489 '''); |
1490 } | 1490 } |
1491 | 1491 |
1492 void test_functionTypingAndSubtyping_higherOrderFunctionLiteral2() { | 1492 void test_functionTypingAndSubtyping_higherOrderFunctionLiteral2() { |
1493 checkFile(''' | 1493 checkFile(''' |
1494 class A {} | 1494 class A {} |
1495 class B extends A {} | 1495 class B extends A {} |
1496 | 1496 |
(...skipping 11 matching lines...) Expand all Loading... |
1508 void main() { | 1508 void main() { |
1509 { | 1509 { |
1510 Function2<AToB, BToA> f; // Top | 1510 Function2<AToB, BToA> f; // Top |
1511 f = top; | 1511 f = top; |
1512 f = left; | 1512 f = left; |
1513 f = right; | 1513 f = right; |
1514 f = bot; | 1514 f = bot; |
1515 } | 1515 } |
1516 { | 1516 { |
1517 Function2<AToB, AToB> f; // Left | 1517 Function2<AToB, AToB> f; // Left |
1518 f = /*error:STATIC_TYPE_ERROR*/top; | 1518 f = /*error:INVALID_CAST_FUNCTION*/top; |
1519 f = left; | 1519 f = left; |
1520 f = /*error:INVALID_ASSIGNMENT*/right; | 1520 f = /*error:INVALID_ASSIGNMENT*/right; |
1521 f = bot; | 1521 f = bot; |
1522 } | 1522 } |
1523 { | 1523 { |
1524 Function2<BToA, BToA> f; // Right | 1524 Function2<BToA, BToA> f; // Right |
1525 f = /*error:STATIC_TYPE_ERROR*/top; | 1525 f = /*error:INVALID_CAST_FUNCTION*/top; |
1526 f = /*error:INVALID_ASSIGNMENT*/left; | 1526 f = /*error:INVALID_ASSIGNMENT*/left; |
1527 f = right; | 1527 f = right; |
1528 f = bot; | 1528 f = bot; |
1529 } | 1529 } |
1530 { | 1530 { |
1531 Function2<BToA, AToB> f; // Bot | 1531 Function2<BToA, AToB> f; // Bot |
1532 f = bot; | 1532 f = bot; |
1533 f = /*error:STATIC_TYPE_ERROR*/left; | 1533 f = /*error:INVALID_CAST_FUNCTION*/left; |
1534 f = /*error:STATIC_TYPE_ERROR*/top; | 1534 f = /*error:INVALID_CAST_FUNCTION*/top; |
1535 f = /*error:STATIC_TYPE_ERROR*/right; | 1535 f = /*error:INVALID_CAST_FUNCTION*/right; |
1536 } | 1536 } |
1537 } | 1537 } |
1538 '''); | 1538 '''); |
1539 } | 1539 } |
1540 | 1540 |
1541 void test_functionTypingAndSubtyping_higherOrderFunctionLiteral3() { | 1541 void test_functionTypingAndSubtyping_higherOrderFunctionLiteral3() { |
1542 checkFile(''' | 1542 checkFile(''' |
1543 class A {} | 1543 class A {} |
1544 class B extends A {} | 1544 class B extends A {} |
1545 | 1545 |
(...skipping 11 matching lines...) Expand all Loading... |
1557 void main() { | 1557 void main() { |
1558 { | 1558 { |
1559 Function2<AToB, BToA> f; // Top | 1559 Function2<AToB, BToA> f; // Top |
1560 f = top; | 1560 f = top; |
1561 f = left; | 1561 f = left; |
1562 f = right; | 1562 f = right; |
1563 f = bot; | 1563 f = bot; |
1564 } | 1564 } |
1565 { | 1565 { |
1566 Function2<AToB, AToB> f; // Left | 1566 Function2<AToB, AToB> f; // Left |
1567 f = /*error:STATIC_TYPE_ERROR*/top; | 1567 f = /*error:INVALID_CAST_FUNCTION*/top; |
1568 f = left; | 1568 f = left; |
1569 f = /*error:INVALID_ASSIGNMENT*/right; | 1569 f = /*error:INVALID_ASSIGNMENT*/right; |
1570 f = bot; | 1570 f = bot; |
1571 } | 1571 } |
1572 { | 1572 { |
1573 Function2<BToA, BToA> f; // Right | 1573 Function2<BToA, BToA> f; // Right |
1574 f = /*error:STATIC_TYPE_ERROR*/top; | 1574 f = /*error:INVALID_CAST_FUNCTION*/top; |
1575 f = /*error:INVALID_ASSIGNMENT*/left; | 1575 f = /*error:INVALID_ASSIGNMENT*/left; |
1576 f = right; | 1576 f = right; |
1577 f = bot; | 1577 f = bot; |
1578 } | 1578 } |
1579 { | 1579 { |
1580 Function2<BToA, AToB> f; // Bot | 1580 Function2<BToA, AToB> f; // Bot |
1581 f = bot; | 1581 f = bot; |
1582 f = /*error:STATIC_TYPE_ERROR*/left; | 1582 f = /*error:INVALID_CAST_FUNCTION*/left; |
1583 f = /*error:STATIC_TYPE_ERROR*/top; | 1583 f = /*error:INVALID_CAST_FUNCTION*/top; |
1584 f = /*error:STATIC_TYPE_ERROR*/right; | 1584 f = /*error:INVALID_CAST_FUNCTION*/right; |
1585 } | 1585 } |
1586 } | 1586 } |
1587 '''); | 1587 '''); |
1588 } | 1588 } |
1589 | 1589 |
1590 void test_functionTypingAndSubtyping_higherOrderFunctionVariables() { | 1590 void test_functionTypingAndSubtyping_higherOrderFunctionVariables() { |
1591 checkFile(''' | 1591 checkFile(''' |
1592 class A {} | 1592 class A {} |
1593 class B extends A {} | 1593 class B extends A {} |
1594 | 1594 |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 void main() { | 1930 void main() { |
1931 { | 1931 { |
1932 Function2<B, A> f; | 1932 Function2<B, A> f; |
1933 f = C.top; | 1933 f = C.top; |
1934 f = C.left; | 1934 f = C.left; |
1935 f = C.right; | 1935 f = C.right; |
1936 f = C.bot; | 1936 f = C.bot; |
1937 } | 1937 } |
1938 { | 1938 { |
1939 Function2<B, B> f; | 1939 Function2<B, B> f; |
1940 f = /*error:STATIC_TYPE_ERROR*/C.top; | 1940 f = /*error:INVALID_CAST_METHOD*/C.top; |
1941 f = C.left; | 1941 f = C.left; |
1942 f = /*error:INVALID_ASSIGNMENT*/C.right; | 1942 f = /*error:INVALID_ASSIGNMENT*/C.right; |
1943 f = C.bot; | 1943 f = C.bot; |
1944 } | 1944 } |
1945 { | 1945 { |
1946 Function2<A, A> f; | 1946 Function2<A, A> f; |
1947 f = /*error:STATIC_TYPE_ERROR*/C.top; | 1947 f = /*error:INVALID_CAST_METHOD*/C.top; |
1948 f = /*error:INVALID_ASSIGNMENT*/C.left; | 1948 f = /*error:INVALID_ASSIGNMENT*/C.left; |
1949 f = C.right; | 1949 f = C.right; |
1950 f = C.bot; | 1950 f = C.bot; |
1951 } | 1951 } |
1952 { | 1952 { |
1953 Function2<A, B> f; | 1953 Function2<A, B> f; |
1954 f = /*error:STATIC_TYPE_ERROR*/C.top; | 1954 f = /*error:INVALID_CAST_METHOD*/C.top; |
1955 f = /*error:STATIC_TYPE_ERROR*/C.left; | 1955 f = /*error:INVALID_CAST_METHOD*/C.left; |
1956 f = /*error:STATIC_TYPE_ERROR*/C.right; | 1956 f = /*error:INVALID_CAST_METHOD*/C.right; |
1957 f = C.bot; | 1957 f = C.bot; |
1958 } | 1958 } |
1959 } | 1959 } |
1960 '''); | 1960 '''); |
1961 } | 1961 } |
1962 | 1962 |
1963 void test_functionTypingAndSubtyping_subtypeOfUniversalType() { | 1963 void test_functionTypingAndSubtyping_subtypeOfUniversalType() { |
1964 checkFile(''' | 1964 checkFile(''' |
1965 void main() { | 1965 void main() { |
1966 nonGenericFn(x) => null; | 1966 nonGenericFn(x) => null; |
(...skipping 10 matching lines...) Expand all Loading... |
1977 } | 1977 } |
1978 { | 1978 { |
1979 Iterable/*<R>*/ f/*<P, R>*/(List/*<P>*/ p) => null; | 1979 Iterable/*<R>*/ f/*<P, R>*/(List/*<P>*/ p) => null; |
1980 List/*<T>*/ g/*<S, T>*/(Iterable/*<S>*/ s) => null; | 1980 List/*<T>*/ g/*<S, T>*/(Iterable/*<S>*/ s) => null; |
1981 | 1981 |
1982 var local = f; | 1982 var local = f; |
1983 local = g; // valid | 1983 local = g; // valid |
1984 | 1984 |
1985 var local2 = g; | 1985 var local2 = g; |
1986 local = local2; | 1986 local = local2; |
1987 local2 = /*error:STATIC_TYPE_ERROR*/f; | 1987 local2 = /*error:INVALID_CAST_FUNCTION*/f; |
1988 local2 = /*warning:DOWN_CAST_COMPOSITE*/local; | 1988 local2 = /*warning:DOWN_CAST_COMPOSITE*/local; |
1989 | 1989 |
1990 // Non-generic function cannot subtype a generic one. | 1990 // Non-generic function cannot subtype a generic one. |
1991 local = /*error:INVALID_ASSIGNMENT*/(x) => null; | 1991 local = /*error:INVALID_ASSIGNMENT*/(x) => null; |
1992 local = /*error:INVALID_ASSIGNMENT*/nonGenericFn; | 1992 local = /*error:INVALID_ASSIGNMENT*/nonGenericFn; |
1993 } | 1993 } |
1994 } | 1994 } |
1995 '''); | 1995 '''); |
1996 } | 1996 } |
1997 | 1997 |
(...skipping 1997 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3995 // Regression test for https://github.com/dart-lang/sdk/issues/25069 | 3995 // Regression test for https://github.com/dart-lang/sdk/issues/25069 |
3996 checkFile(''' | 3996 checkFile(''' |
3997 typedef int Foo(); | 3997 typedef int Foo(); |
3998 void foo() {} | 3998 void foo() {} |
3999 void main () { | 3999 void main () { |
4000 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); | 4000 Foo x = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo(); |
4001 } | 4001 } |
4002 '''); | 4002 '''); |
4003 } | 4003 } |
4004 } | 4004 } |
OLD | NEW |