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

Side by Side Diff: pkg/analyzer/test/src/summary/top_level_inference_test.dart

Issue 2777733002: Update final fields inference according to the clarified specification. (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « pkg/analyzer/lib/src/task/strong_mode.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analyzer/dart/element/element.dart'; 7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/src/dart/analysis/driver.dart'; 8 import 'package:analyzer/src/dart/analysis/driver.dart';
9 import 'package:test_reflective_loader/test_reflective_loader.dart'; 9 import 'package:test_reflective_loader/test_reflective_loader.dart';
10 10
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 checkElementText( 1070 checkElementText(
1071 library, 1071 library,
1072 r''' 1072 r'''
1073 class A { 1073 class A {
1074 int f; 1074 int f;
1075 A([int this.f]); 1075 A([int this.f]);
1076 } 1076 }
1077 '''); 1077 ''');
1078 } 1078 }
1079 1079
1080 test_instanceField_fromAccessors_multiple_different() async {
1081 var library = await _encodeDecodeLibrary(r'''
1082 abstract class A {
1083 int get x;
1084 }
1085 abstract class B {
1086 void set x(String _);
1087 }
1088 class C implements A, B {
1089 var x;
1090 }
1091 ''');
1092 checkElementText(
1093 library,
1094 r'''
1095 abstract class A {
1096 int get x;
1097 }
1098 abstract class B {
1099 void set x(String _);
1100 }
1101 class C implements A, B {
1102 dynamic x/*error: overrideConflictFieldType*/;
1103 }
1104 ''');
1105 }
1106
1107 test_instanceField_fromAccessors_multiple_same() async {
1108 var library = await _encodeDecodeLibrary(r'''
1109 abstract class A {
1110 int get x;
1111 }
1112 abstract class B {
1113 void set x(int _);
1114 }
1115 class C implements A, B {
1116 var x;
1117 }
1118 ''');
1119 checkElementText(
1120 library,
1121 r'''
1122 abstract class A {
1123 int get x;
1124 }
1125 abstract class B {
1126 void set x(int _);
1127 }
1128 class C implements A, B {
1129 int x;
1130 }
1131 ''');
1132 }
1133
1134 test_instanceField_fromField() async { 1080 test_instanceField_fromField() async {
1135 var library = await _encodeDecodeLibrary(r''' 1081 var library = await _encodeDecodeLibrary(r'''
1136 abstract class A { 1082 abstract class A {
1137 int x; 1083 int x;
1138 int y; 1084 int y;
1139 int z; 1085 int z;
1140 } 1086 }
1141 class B implements A { 1087 class B implements A {
1142 var x; 1088 var x;
1143 get y => null; 1089 get y => null;
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 } 1366 }
1421 abstract class B { 1367 abstract class B {
1422 int get x; 1368 int get x;
1423 } 1369 }
1424 class C implements A, B { 1370 class C implements A, B {
1425 int get x {} 1371 int get x {}
1426 } 1372 }
1427 '''); 1373 ''');
1428 } 1374 }
1429 1375
1430 test_instanceField_fromGetterSetter_field() async { 1376 test_instanceField_fromGetterSetter_different_field() async {
1431 var library = await _encodeDecodeLibrary(r''' 1377 var library = await _encodeDecodeLibrary(r'''
1432 abstract class A { 1378 abstract class A {
1433 int get x; 1379 int get x;
1380 int get y;
1381 }
1382 abstract class B {
1383 void set x(String _);
1384 void set y(String _);
1385 }
1386 class C implements A, B {
1387 var x;
1388 final y;
1389 }
1390 ''');
1391 checkElementText(
1392 library,
1393 r'''
1394 abstract class A {
1395 int get x;
1396 int get y;
1397 }
1398 abstract class B {
1399 void set x(String _);
1400 void set y(String _);
1401 }
1402 class C implements A, B {
1403 dynamic x/*error: overrideConflictFieldType*/;
1404 final int y;
1405 }
1406 ''');
1407 }
1408
1409 test_instanceField_fromGetterSetter_different_getter() async {
1410 var library = await _encodeDecodeLibrary(r'''
1411 abstract class A {
1412 int get x;
1413 }
1414 abstract class B {
1415 void set x(String _);
1416 }
1417 class C implements A, B {
1418 get x => null;
1419 }
1420 ''');
1421 checkElementText(
1422 library,
1423 r'''
1424 abstract class A {
1425 synthetic final int x;
1426 int get x;
1427 }
1428 abstract class B {
1429 synthetic String x;
1430 void set x(String _);
1431 }
1432 class C implements A, B {
1433 synthetic final int x;
1434 int get x {}
1435 }
1436 ''',
1437 withSyntheticFields: true);
1438 }
1439
1440 test_instanceField_fromGetterSetter_different_setter() async {
1441 var library = await _encodeDecodeLibrary(r'''
1442 abstract class A {
1443 int get x;
1444 }
1445 abstract class B {
1446 void set x(String _);
1447 }
1448 class C implements A, B {
1449 set x(_);
1450 }
1451 ''');
1452 // TODO(scheglov) test for inference failure error
1453 checkElementText(
1454 library,
1455 r'''
1456 abstract class A {
1457 synthetic final int x;
1458 int get x;
1459 }
1460 abstract class B {
1461 synthetic String x;
1462 void set x(String _);
1463 }
1464 class C implements A, B {
1465 synthetic dynamic x;
1466 void set x(dynamic _);
1467 }
1468 ''',
1469 withSyntheticFields: true);
1470 }
1471
1472 test_instanceField_fromGetterSetter_same_field() async {
1473 var library = await _encodeDecodeLibrary(r'''
1474 abstract class A {
1475 int get x;
1434 } 1476 }
1435 abstract class B { 1477 abstract class B {
1436 void set x(int _); 1478 void set x(int _);
1437 } 1479 }
1438 class C implements A, B { 1480 class C implements A, B {
1439 var x; 1481 var x;
1440 } 1482 }
1441 '''); 1483 ''');
1442 checkElementText( 1484 checkElementText(
1443 library, 1485 library,
1444 r''' 1486 r'''
1445 abstract class A { 1487 abstract class A {
1446 int get x; 1488 int get x;
1447 } 1489 }
1448 abstract class B { 1490 abstract class B {
1449 void set x(int _); 1491 void set x(int _);
1450 } 1492 }
1451 class C implements A, B { 1493 class C implements A, B {
1452 int x; 1494 int x;
1453 } 1495 }
1454 '''); 1496 ''');
1455 } 1497 }
1456 1498
1457 test_instanceField_fromGetterSetter_getter() async { 1499 test_instanceField_fromGetterSetter_same_getter() async {
1458 var library = await _encodeDecodeLibrary(r''' 1500 var library = await _encodeDecodeLibrary(r'''
1459 abstract class A { 1501 abstract class A {
1460 int get x; 1502 int get x;
1461 } 1503 }
1462 abstract class B { 1504 abstract class B {
1463 void set x(int _); 1505 void set x(int _);
1464 } 1506 }
1465 class C implements A, B { 1507 class C implements A, B {
1466 get x => null; 1508 get x => null;
1467 } 1509 }
(...skipping 10 matching lines...) Expand all
1478 void set x(int _); 1520 void set x(int _);
1479 } 1521 }
1480 class C implements A, B { 1522 class C implements A, B {
1481 synthetic final int x; 1523 synthetic final int x;
1482 int get x {} 1524 int get x {}
1483 } 1525 }
1484 ''', 1526 ''',
1485 withSyntheticFields: true); 1527 withSyntheticFields: true);
1486 } 1528 }
1487 1529
1488 test_instanceField_fromGetterSetter_setter() async { 1530 test_instanceField_fromGetterSetter_same_setter() async {
1489 var library = await _encodeDecodeLibrary(r''' 1531 var library = await _encodeDecodeLibrary(r'''
1490 abstract class A { 1532 abstract class A {
1491 int get x; 1533 int get x;
1492 } 1534 }
1493 abstract class B { 1535 abstract class B {
1494 void set x(String _); 1536 void set x(int _);
1495 } 1537 }
1496 class C implements A, B { 1538 class C implements A, B {
1497 set x(_); 1539 set x(_);
1498 } 1540 }
1499 '''); 1541 ''');
1500 checkElementText( 1542 checkElementText(
1501 library, 1543 library,
1502 r''' 1544 r'''
1503 abstract class A { 1545 abstract class A {
1504 synthetic final int x; 1546 synthetic final int x;
1505 int get x; 1547 int get x;
1506 } 1548 }
1507 abstract class B { 1549 abstract class B {
1508 synthetic String x; 1550 synthetic int x;
1509 void set x(String _); 1551 void set x(int _);
1510 } 1552 }
1511 class C implements A, B { 1553 class C implements A, B {
1512 synthetic dynamic x; 1554 synthetic int x;
1513 void set x(dynamic _); 1555 void set x(int _);
1514 } 1556 }
1515 ''', 1557 ''',
1516 withSyntheticFields: true); 1558 withSyntheticFields: true);
1517 } 1559 }
1518 1560
1519 test_instanceField_fromSetter() async { 1561 test_instanceField_fromSetter() async {
1520 var library = await _encodeDecodeLibrary(r''' 1562 var library = await _encodeDecodeLibrary(r'''
1521 abstract class A { 1563 abstract class A {
1522 void set x(int _); 1564 void set x(int _);
1523 void set y(int _); 1565 void set y(int _);
(...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
2292 2334
2293 Future<LibraryElement> _encodeDecodeLibrary(String text) async { 2335 Future<LibraryElement> _encodeDecodeLibrary(String text) async {
2294 String path = _p('/test.dart'); 2336 String path = _p('/test.dart');
2295 provider.newFile(path, text); 2337 provider.newFile(path, text);
2296 UnitElementResult result = await driver.getUnitElement(path); 2338 UnitElementResult result = await driver.getUnitElement(path);
2297 return result.element.library; 2339 return result.element.library;
2298 } 2340 }
2299 2341
2300 String _p(String path) => provider.convertPath(path); 2342 String _p(String path) => provider.convertPath(path);
2301 } 2343 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/task/strong_mode.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698