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

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

Issue 2551023005: Prepare for decoupling analyzer ASTs from element model. (Closed)
Patch Set: Created 4 years 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 library analyzer.test.src.task.incremental_element_builder_test; 5 library analyzer.test.src.task.incremental_element_builder_test;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/resolution_accessors.dart';
8 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/dart/element/visitor.dart'; 10 import 'package:analyzer/dart/element/visitor.dart';
10 import 'package:analyzer/src/dart/ast/utilities.dart'; 11 import 'package:analyzer/src/dart/ast/utilities.dart';
11 import 'package:analyzer/src/dart/element/element.dart'; 12 import 'package:analyzer/src/dart/element/element.dart';
12 import 'package:analyzer/src/generated/engine.dart'; 13 import 'package:analyzer/src/generated/engine.dart';
13 import 'package:analyzer/src/generated/source.dart'; 14 import 'package:analyzer/src/generated/source.dart';
14 import 'package:analyzer/src/task/dart.dart'; 15 import 'package:analyzer/src/task/dart.dart';
15 import 'package:analyzer/src/task/incremental_element_builder.dart'; 16 import 'package:analyzer/src/task/incremental_element_builder.dart';
16 import 'package:analyzer/task/dart.dart'; 17 import 'package:analyzer/task/dart.dart';
17 import 'package:test/test.dart'; 18 import 'package:test/test.dart';
(...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 test_directives_library_updateOffset() { 1238 test_directives_library_updateOffset() {
1238 _buildOldUnit(r''' 1239 _buildOldUnit(r'''
1239 #!/bin/sh 1240 #!/bin/sh
1240 library my_lib; 1241 library my_lib;
1241 class A {} 1242 class A {}
1242 '''); 1243 ''');
1243 LibraryDirective libraryDirective = oldUnit.directives.single; 1244 LibraryDirective libraryDirective = oldUnit.directives.single;
1244 // Set the LibraryElement and check that its nameOffset is correct. 1245 // Set the LibraryElement and check that its nameOffset is correct.
1245 libraryDirective.element = 1246 libraryDirective.element =
1246 new LibraryElementImpl.forNode(context, libraryDirective.name); 1247 new LibraryElementImpl.forNode(context, libraryDirective.name);
1247 expect(libraryDirective.element.nameOffset, libraryDirective.name.offset); 1248 expect(elementForDirective(libraryDirective).nameOffset,
1249 libraryDirective.name.offset);
1248 // Update and check again that the nameOffset is correct. 1250 // Update and check again that the nameOffset is correct.
1249 _buildNewUnit(r''' 1251 _buildNewUnit(r'''
1250 #!/bin/sh 1252 #!/bin/sh
1251 1253
1252 library my_lib; 1254 library my_lib;
1253 class A {} 1255 class A {}
1254 '''); 1256 ''');
1255 expect(libraryDirective.element.nameOffset, libraryDirective.name.offset); 1257 expect(elementForDirective(libraryDirective).nameOffset,
1258 libraryDirective.name.offset);
1256 } 1259 }
1257 1260
1258 test_directives_remove() { 1261 test_directives_remove() {
1259 _buildOldUnit(r''' 1262 _buildOldUnit(r'''
1260 library test; 1263 library test;
1261 import 'dart:async'; 1264 import 'dart:async';
1262 import 'dart:math'; 1265 import 'dart:math';
1263 '''); 1266 ''');
1264 List<Directive> oldDirectives = oldUnit.directives.toList(); 1267 List<Directive> oldDirectives = oldUnit.directives.toList();
1265 _buildNewUnit(r''' 1268 _buildNewUnit(r'''
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1343 import1.element = importElement1; 1346 import1.element = importElement1;
1344 import2.element = importElement2; 1347 import2.element = importElement2;
1345 import1.prefix.staticElement = prefixElement; 1348 import1.prefix.staticElement = prefixElement;
1346 import2.prefix.staticElement = prefixElement; 1349 import2.prefix.staticElement = prefixElement;
1347 _buildNewUnit(r''' 1350 _buildNewUnit(r'''
1348 import 'test1.dart' as m; 1351 import 'test1.dart' as m;
1349 import 'test2.dart' as m; 1352 import 'test2.dart' as m;
1350 class A {} 1353 class A {}
1351 '''); 1354 ''');
1352 int expectedPrefixOffset = 23; 1355 int expectedPrefixOffset = 23;
1353 expect(import1.prefix.staticElement.nameOffset, expectedPrefixOffset); 1356 expect(staticElementForIdentifier(import1.prefix).nameOffset,
1354 expect(import2.prefix.staticElement.nameOffset, expectedPrefixOffset); 1357 expectedPrefixOffset);
1358 expect(staticElementForIdentifier(import2.prefix).nameOffset,
1359 expectedPrefixOffset);
1355 expect(importElement1.prefix.nameOffset, expectedPrefixOffset); 1360 expect(importElement1.prefix.nameOffset, expectedPrefixOffset);
1356 expect(importElement2.prefix.nameOffset, expectedPrefixOffset); 1361 expect(importElement2.prefix.nameOffset, expectedPrefixOffset);
1357 } 1362 }
1358 1363
1359 test_directives_sameOrder_insertSpaces() { 1364 test_directives_sameOrder_insertSpaces() {
1360 _buildOldUnit(r''' 1365 _buildOldUnit(r'''
1361 library test; 1366 library test;
1362 import 'dart:async'; 1367 import 'dart:async';
1363 import 'dart:math'; 1368 import 'dart:math';
1364 '''); 1369 ''');
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 /// reference [double] and [B] types. 1526 /// reference [double] and [B] types.
1522 class C {}'''); 1527 class C {}''');
1523 ClassElement element = newNode.element; 1528 ClassElement element = newNode.element;
1524 expect(element, isNotNull); 1529 expect(element, isNotNull);
1525 expect(element.name, 'C'); 1530 expect(element.name, 'C');
1526 expect(element.nameOffset, newCode.indexOf('C {}')); 1531 expect(element.nameOffset, newCode.indexOf('C {}'));
1527 // [double] and [B] are still resolved 1532 // [double] and [B] are still resolved
1528 { 1533 {
1529 var docReferences = newNode.documentationComment.references; 1534 var docReferences = newNode.documentationComment.references;
1530 expect(docReferences, hasLength(2)); 1535 expect(docReferences, hasLength(2));
1531 expect(docReferences[0].identifier.staticElement.name, 'double'); 1536 expect(staticElementForIdentifier(docReferences[0].identifier).name,
1537 'double');
1532 expect(docReferences[1].identifier.staticElement, 1538 expect(docReferences[1].identifier.staticElement,
1533 same(newNodes[2].element)); 1539 same(newNodes[2].element));
1534 } 1540 }
1535 } 1541 }
1536 { 1542 {
1537 CompilationUnitMember newNode = newNodes[1]; 1543 CompilationUnitMember newNode = newNodes[1];
1538 expect(newNode, same(oldNodes[0])); 1544 expect(newNode, same(oldNodes[0]));
1539 expect( 1545 expect(
1540 getNodeText(newNode), 1546 getNodeText(newNode),
1541 r''' 1547 r'''
1542 /// reference [bool] type. 1548 /// reference [bool] type.
1543 class A {}'''); 1549 class A {}''');
1544 ClassElement element = newNode.element; 1550 ClassElement element = newNode.element;
1545 expect(element, isNotNull); 1551 expect(element, isNotNull);
1546 expect(element.name, 'A'); 1552 expect(element.name, 'A');
1547 expect(element.nameOffset, newCode.indexOf('A {}')); 1553 expect(element.nameOffset, newCode.indexOf('A {}'));
1548 // [bool] is still resolved 1554 // [bool] is still resolved
1549 { 1555 {
1550 var docReferences = newNode.documentationComment.references; 1556 var docReferences = newNode.documentationComment.references;
1551 expect(docReferences, hasLength(1)); 1557 expect(docReferences, hasLength(1));
1552 expect(docReferences[0].identifier.staticElement.name, 'bool'); 1558 expect(staticElementForIdentifier(docReferences[0].identifier).name,
1559 'bool');
1553 } 1560 }
1554 } 1561 }
1555 { 1562 {
1556 CompilationUnitMember newNode = newNodes[2]; 1563 CompilationUnitMember newNode = newNodes[2];
1557 expect(newNode, same(oldNodes[1])); 1564 expect(newNode, same(oldNodes[1]));
1558 expect( 1565 expect(
1559 getNodeText(newNode), 1566 getNodeText(newNode),
1560 r''' 1567 r'''
1561 /// reference [int] type. 1568 /// reference [int] type.
1562 class B {}'''); 1569 class B {}''');
1563 ClassElement element = newNode.element; 1570 ClassElement element = newNode.element;
1564 expect(element, isNotNull); 1571 expect(element, isNotNull);
1565 expect(element.name, 'B'); 1572 expect(element.name, 'B');
1566 expect(element.nameOffset, newCode.indexOf('B {}')); 1573 expect(element.nameOffset, newCode.indexOf('B {}'));
1567 // [int] is still resolved 1574 // [int] is still resolved
1568 { 1575 {
1569 var docReferences = newNode.documentationComment.references; 1576 var docReferences = newNode.documentationComment.references;
1570 expect(docReferences, hasLength(1)); 1577 expect(docReferences, hasLength(1));
1571 expect(docReferences[0].identifier.staticElement.name, 'int'); 1578 expect(staticElementForIdentifier(docReferences[0].identifier).name,
1579 'int');
1572 } 1580 }
1573 } 1581 }
1574 // verify delta 1582 // verify delta
1575 expect(unitDelta.addedDeclarations, unorderedEquals([])); 1583 expect(unitDelta.addedDeclarations, unorderedEquals([]));
1576 expect(unitDelta.removedDeclarations, unorderedEquals([])); 1584 expect(unitDelta.removedDeclarations, unorderedEquals([]));
1577 } 1585 }
1578 1586
1579 test_unitMembers_class_remove() { 1587 test_unitMembers_class_remove() {
1580 _buildOldUnit(r''' 1588 _buildOldUnit(r'''
1581 class A {} 1589 class A {}
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
2200 ClassDeclaration classNode = 2208 ClassDeclaration classNode =
2201 actual.getAncestor((n) => n is ClassDeclaration); 2209 actual.getAncestor((n) => n is ClassDeclaration);
2202 expect(element.enclosingElement, same(classNode.element)); 2210 expect(element.enclosingElement, same(classNode.element));
2203 } 2211 }
2204 // ElementAnnotationImpl must use the enclosing CompilationUnitElement. 2212 // ElementAnnotationImpl must use the enclosing CompilationUnitElement.
2205 if (actual is Annotation) { 2213 if (actual is Annotation) {
2206 AstNode parent = actual.parent; 2214 AstNode parent = actual.parent;
2207 if (parent is Declaration) { 2215 if (parent is Declaration) {
2208 ElementAnnotationImpl actualElement = actual.elementAnnotation; 2216 ElementAnnotationImpl actualElement = actual.elementAnnotation;
2209 CompilationUnitElement enclosingUnitElement = 2217 CompilationUnitElement enclosingUnitElement =
2210 parent.element.getAncestor((a) => a is CompilationUnitElement); 2218 elementForDeclaration(parent)
2219 .getAncestor((a) => a is CompilationUnitElement);
2211 expect(actualElement.compilationUnit, same(enclosingUnitElement)); 2220 expect(actualElement.compilationUnit, same(enclosingUnitElement));
2212 } 2221 }
2213 } 2222 }
2214 // Identifiers like 'a.b' in 'new a.b()' might be rewritten if resolver 2223 // Identifiers like 'a.b' in 'new a.b()' might be rewritten if resolver
2215 // sees that 'a' is actually a class name, so 'b' is a constructor name. 2224 // sees that 'a' is actually a class name, so 'b' is a constructor name.
2216 // 2225 //
2217 if (expected is ConstructorName && actual is ConstructorName) { 2226 if (expected is ConstructorName && actual is ConstructorName) {
2218 Identifier expectedTypeName = expected.type.name; 2227 Identifier expectedTypeName = expected.type.name;
2219 Identifier actualTypeName = actual.type.name; 2228 Identifier actualTypeName = actual.type.name;
2220 if (expectedTypeName is PrefixedIdentifier && 2229 if (expectedTypeName is PrefixedIdentifier &&
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
2340 unitMember is ClassDeclaration && unitMember.name.name == name); 2349 unitMember is ClassDeclaration && unitMember.name.name == name);
2341 } 2350 }
2342 2351
2343 class _MaterializeLazyElementsVisitor extends GeneralizingElementVisitor { 2352 class _MaterializeLazyElementsVisitor extends GeneralizingElementVisitor {
2344 @override 2353 @override
2345 visitExecutableElement(ExecutableElement element) { 2354 visitExecutableElement(ExecutableElement element) {
2346 element.parameters; 2355 element.parameters;
2347 super.visitExecutableElement(element); 2356 super.visitExecutableElement(element);
2348 } 2357 }
2349 } 2358 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698