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

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

Issue 1155543005: Prepare CompilationUnitElementDelta in IncrementalCompilationUnitElementBuilder. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Move CompilationUnit.replace() into IncrementalCompilationUnitElementBuilder. Created 5 years, 6 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/incremental_element_builder.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) 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 test.src.task.incremental_element_builder_test; 5 library test.src.task.incremental_element_builder_test;
6 6
7 import 'package:analyzer/src/generated/ast.dart'; 7 import 'package:analyzer/src/generated/ast.dart';
8 import 'package:analyzer/src/generated/element.dart'; 8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/source.dart'; 9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/task/incremental_element_builder.dart'; 10 import 'package:analyzer/src/task/incremental_element_builder.dart';
11 import 'package:unittest/unittest.dart'; 11 import 'package:unittest/unittest.dart';
12 12
13 import '../../reflective_tests.dart'; 13 import '../../reflective_tests.dart';
14 import '../context/abstract_context.dart'; 14 import '../context/abstract_context.dart';
15 15
16 main() { 16 main() {
17 groupSep = ' | '; 17 groupSep = ' | ';
18 runReflectiveTests(IncrementalCompilationUnitElementBuilderTest); 18 runReflectiveTests(IncrementalCompilationUnitElementBuilderTest);
19 } 19 }
20 20
21 @reflectiveTest 21 @reflectiveTest
22 class IncrementalCompilationUnitElementBuilderTest extends AbstractContextTest { 22 class IncrementalCompilationUnitElementBuilderTest extends AbstractContextTest {
23 Source source; 23 Source source;
24
24 String oldCode; 25 String oldCode;
25 CompilationUnit oldUnit; 26 CompilationUnit oldUnit;
26 CompilationUnitElement unitElement; 27 CompilationUnitElement unitElement;
27 28
28 String newCode; 29 String newCode;
29 CompilationUnit newUnit; 30 CompilationUnit newUnit;
30 31
32 CompilationUnitElementDelta unitDelta;
33
31 String getNodeText(AstNode node) { 34 String getNodeText(AstNode node) {
32 return newCode.substring(node.offset, node.end); 35 return newCode.substring(node.offset, node.end);
33 } 36 }
34 37
35 test_directives_add() { 38 test_directives_add() {
36 _buildOldUnit(r''' 39 _buildOldUnit(r'''
37 library test; 40 library test;
38 import 'dart:math'; 41 import 'dart:math';
39 '''); 42 ''');
43 List<Directive> oldDirectives = oldUnit.directives.toList();
40 _buildNewUnit(r''' 44 _buildNewUnit(r'''
41 library test; 45 library test;
42 import 'dart:async'; 46 import 'dart:async';
43 import 'dart:math'; 47 import 'dart:math';
44 '''); 48 ''');
45 var oldDirectives = oldUnit.directives; 49 List<Directive> newDirectives = newUnit.directives;
46 var newDirectives = newUnit.directives;
47 { 50 {
48 Directive newNode = newDirectives[0]; 51 Directive newNode = newDirectives[0];
49 expect(newNode, same(oldDirectives[0])); 52 expect(newNode, same(oldDirectives[0]));
50 expect(getNodeText(newNode), "library test;"); 53 expect(getNodeText(newNode), "library test;");
51 LibraryElement element = newNode.element; 54 LibraryElement element = newNode.element;
52 expect(element, isNotNull); 55 expect(element, isNotNull);
53 expect(element.nameOffset, newCode.indexOf('test;')); 56 expect(element.nameOffset, newCode.indexOf('test;'));
54 } 57 }
55 { 58 {
56 Directive newNode = newDirectives[1]; 59 Directive newNode = newDirectives[1];
57 expect(getNodeText(newNode), "import 'dart:async';"); 60 expect(getNodeText(newNode), "import 'dart:async';");
58 ImportElement element = newNode.element; 61 ImportElement element = newNode.element;
59 expect(element, isNull); 62 expect(element, isNull);
60 } 63 }
61 { 64 {
62 Directive newNode = newDirectives[2]; 65 Directive newNode = newDirectives[2];
63 expect(newNode, same(oldDirectives[1])); 66 expect(newNode, same(oldDirectives[1]));
64 expect(getNodeText(newNode), "import 'dart:math';"); 67 expect(getNodeText(newNode), "import 'dart:math';");
65 ImportElement element = newNode.element; 68 ImportElement element = newNode.element;
66 expect(element, isNotNull); 69 expect(element, isNotNull);
67 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); 70 expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
68 } 71 }
72 expect(unitDelta.hasDirectiveChange, isTrue);
69 } 73 }
70 74
71 test_directives_keepOffset_partOf() { 75 test_directives_keepOffset_partOf() {
72 String libCode = ''' 76 String libCode = '''
73 // comment to shift tokens 77 // comment to shift tokens
74 library my_lib; 78 library my_lib;
75 part 'test.dart'; 79 part 'test.dart';
76 '''; 80 ''';
77 Source libSource = newSource('/lib.dart', libCode); 81 Source libSource = newSource('/lib.dart', libCode);
78 _buildOldUnit(r''' 82 _buildOldUnit(r'''
79 part of my_lib; 83 part of my_lib;
80 class A {} 84 class A {}
81 ''', libSource); 85 ''', libSource);
86 List<Directive> oldDirectives = oldUnit.directives.toList();
82 _buildNewUnit(r''' 87 _buildNewUnit(r'''
83 part of my_lib; 88 part of my_lib;
84 class A {} 89 class A {}
85 '''); 90 ''');
86 var oldDirectives = oldUnit.directives; 91 List<Directive> newDirectives = newUnit.directives;
87 var newDirectives = newUnit.directives;
88 { 92 {
89 Directive newNode = newDirectives[0]; 93 Directive newNode = newDirectives[0];
90 expect(newNode, same(oldDirectives[0])); 94 expect(newNode, same(oldDirectives[0]));
91 expect(getNodeText(newNode), 'part of my_lib;'); 95 expect(getNodeText(newNode), 'part of my_lib;');
92 LibraryElement element = newNode.element; 96 LibraryElement element = newNode.element;
93 expect(element, isNotNull); 97 expect(element, isNotNull);
94 expect(element.nameOffset, libCode.indexOf('my_lib;')); 98 expect(element.nameOffset, libCode.indexOf('my_lib;'));
95 } 99 }
96 } 100 }
97 101
98 test_directives_remove() { 102 test_directives_remove() {
99 _buildOldUnit(r''' 103 _buildOldUnit(r'''
100 library test; 104 library test;
101 import 'dart:async'; 105 import 'dart:async';
102 import 'dart:math'; 106 import 'dart:math';
103 '''); 107 ''');
108 List<Directive> oldDirectives = oldUnit.directives.toList();
104 _buildNewUnit(r''' 109 _buildNewUnit(r'''
105 library test; 110 library test;
106 import 'dart:math'; 111 import 'dart:math';
107 '''); 112 ''');
108 var oldDirectives = oldUnit.directives; 113 List<Directive> newDirectives = newUnit.directives;
109 var newDirectives = newUnit.directives;
110 { 114 {
111 Directive newNode = newDirectives[0]; 115 Directive newNode = newDirectives[0];
112 expect(newNode, same(oldDirectives[0])); 116 expect(newNode, same(oldDirectives[0]));
113 expect(getNodeText(newNode), "library test;"); 117 expect(getNodeText(newNode), "library test;");
114 LibraryElement element = newNode.element; 118 LibraryElement element = newNode.element;
115 expect(element, isNotNull); 119 expect(element, isNotNull);
116 expect(element.nameOffset, newCode.indexOf('test;')); 120 expect(element.nameOffset, newCode.indexOf('test;'));
117 } 121 }
118 { 122 {
119 Directive newNode = newDirectives[1]; 123 Directive newNode = newDirectives[1];
120 expect(newNode, same(oldDirectives[2])); 124 expect(newNode, same(oldDirectives[2]));
121 expect(getNodeText(newNode), "import 'dart:math';"); 125 expect(getNodeText(newNode), "import 'dart:math';");
122 ImportElement element = newNode.element; 126 ImportElement element = newNode.element;
123 expect(element, isNotNull); 127 expect(element, isNotNull);
124 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); 128 expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
125 } 129 }
130 expect(unitDelta.hasDirectiveChange, isTrue);
126 } 131 }
127 132
128 test_directives_reorder() { 133 test_directives_reorder() {
129 _buildOldUnit(r''' 134 _buildOldUnit(r'''
130 library test; 135 library test;
131 import 'dart:math' as m; 136 import 'dart:math' as m;
132 import 'dart:async'; 137 import 'dart:async';
133 '''); 138 ''');
139 List<Directive> oldDirectives = oldUnit.directives.toList();
134 _buildNewUnit(r''' 140 _buildNewUnit(r'''
135 library test; 141 library test;
136 import 'dart:async'; 142 import 'dart:async';
137 import 'dart:math' as m; 143 import 'dart:math' as m;
138 '''); 144 ''');
139 var oldDirectives = oldUnit.directives; 145 List<Directive> newDirectives = newUnit.directives;
140 var newDirectives = newUnit.directives;
141 { 146 {
142 Directive newNode = newDirectives[0]; 147 Directive newNode = newDirectives[0];
143 expect(newNode, same(oldDirectives[0])); 148 expect(newNode, same(oldDirectives[0]));
144 expect(getNodeText(newNode), "library test;"); 149 expect(getNodeText(newNode), "library test;");
145 LibraryElement element = newNode.element; 150 LibraryElement element = newNode.element;
146 expect(element, isNotNull); 151 expect(element, isNotNull);
147 expect(element.nameOffset, newCode.indexOf('test;')); 152 expect(element.nameOffset, newCode.indexOf('test;'));
148 } 153 }
149 { 154 {
150 Directive newNode = newDirectives[1]; 155 Directive newNode = newDirectives[1];
151 expect(newNode, same(oldDirectives[2])); 156 expect(newNode, same(oldDirectives[2]));
152 expect(getNodeText(newNode), "import 'dart:async';"); 157 expect(getNodeText(newNode), "import 'dart:async';");
153 ImportElement element = newNode.element; 158 ImportElement element = newNode.element;
154 expect(element, isNotNull); 159 expect(element, isNotNull);
155 expect(element.nameOffset, newCode.indexOf("import 'dart:async';")); 160 expect(element.nameOffset, newCode.indexOf("import 'dart:async';"));
156 } 161 }
157 { 162 {
158 Directive newNode = newDirectives[2]; 163 Directive newNode = newDirectives[2];
159 expect(newNode, same(oldDirectives[1])); 164 expect(newNode, same(oldDirectives[1]));
160 expect(getNodeText(newNode), "import 'dart:math' as m;"); 165 expect(getNodeText(newNode), "import 'dart:math' as m;");
161 ImportElement element = newNode.element; 166 ImportElement element = newNode.element;
162 expect(element, isNotNull); 167 expect(element, isNotNull);
163 expect(element.nameOffset, newCode.indexOf("import 'dart:math' as m;")); 168 expect(element.nameOffset, newCode.indexOf("import 'dart:math' as m;"));
164 expect(element.prefix.nameOffset, newCode.indexOf("m;")); 169 expect(element.prefix.nameOffset, newCode.indexOf("m;"));
165 } 170 }
171 expect(unitDelta.hasDirectiveChange, isFalse);
166 } 172 }
167 173
168 test_directives_sameOrder_insertSpaces() { 174 test_directives_sameOrder_insertSpaces() {
169 _buildOldUnit(r''' 175 _buildOldUnit(r'''
170 library test; 176 library test;
171 import 'dart:async'; 177 import 'dart:async';
172 import 'dart:math'; 178 import 'dart:math';
173 '''); 179 ''');
180 List<Directive> oldDirectives = oldUnit.directives.toList();
174 _buildNewUnit(r''' 181 _buildNewUnit(r'''
175 library test; 182 library test;
176 183
177 import 'dart:async' ; 184 import 'dart:async' ;
178 import 'dart:math'; 185 import 'dart:math';
179 '''); 186 ''');
180 var oldDirectives = oldUnit.directives; 187 List<Directive> newDirectives = newUnit.directives;
181 var newDirectives = newUnit.directives;
182 { 188 {
183 Directive newNode = newDirectives[0]; 189 Directive newNode = newDirectives[0];
184 expect(newNode, same(oldDirectives[0])); 190 expect(newNode, same(oldDirectives[0]));
185 expect(getNodeText(newNode), "library test;"); 191 expect(getNodeText(newNode), "library test;");
186 LibraryElement element = newNode.element; 192 LibraryElement element = newNode.element;
187 expect(element, isNotNull); 193 expect(element, isNotNull);
188 expect(element.nameOffset, newCode.indexOf('test;')); 194 expect(element.nameOffset, newCode.indexOf('test;'));
189 } 195 }
190 { 196 {
191 Directive newNode = newDirectives[1]; 197 Directive newNode = newDirectives[1];
192 expect(newNode, same(oldDirectives[1])); 198 expect(newNode, same(oldDirectives[1]));
193 expect(getNodeText(newNode), "import 'dart:async' ;"); 199 expect(getNodeText(newNode), "import 'dart:async' ;");
194 ImportElement element = newNode.element; 200 ImportElement element = newNode.element;
195 expect(element, isNotNull); 201 expect(element, isNotNull);
196 expect(element.nameOffset, newCode.indexOf("import 'dart:async' ;")); 202 expect(element.nameOffset, newCode.indexOf("import 'dart:async' ;"));
197 } 203 }
198 { 204 {
199 Directive newNode = newDirectives[2]; 205 Directive newNode = newDirectives[2];
200 expect(newNode, same(oldDirectives[2])); 206 expect(newNode, same(oldDirectives[2]));
201 expect(getNodeText(newNode), "import 'dart:math';"); 207 expect(getNodeText(newNode), "import 'dart:math';");
202 ImportElement element = newNode.element; 208 ImportElement element = newNode.element;
203 expect(element, isNotNull); 209 expect(element, isNotNull);
204 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); 210 expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
205 } 211 }
212 expect(unitDelta.hasDirectiveChange, isFalse);
206 } 213 }
207 214
208 test_directives_sameOrder_removeSpaces() { 215 test_directives_sameOrder_removeSpaces() {
209 _buildOldUnit(r''' 216 _buildOldUnit(r'''
210 library test; 217 library test;
211 218
212 import 'dart:async' ; 219 import 'dart:async' ;
213 import 'dart:math'; 220 import 'dart:math';
214 '''); 221 ''');
222 List<Directive> oldDirectives = oldUnit.directives.toList();
215 _buildNewUnit(r''' 223 _buildNewUnit(r'''
216 library test; 224 library test;
217 import 'dart:async'; 225 import 'dart:async';
218 import 'dart:math'; 226 import 'dart:math';
219 '''); 227 ''');
220 var oldDirectives = oldUnit.directives; 228 List<Directive> newDirectives = newUnit.directives;
221 var newDirectives = newUnit.directives;
222 { 229 {
223 Directive newNode = newDirectives[0]; 230 Directive newNode = newDirectives[0];
224 expect(newNode, same(oldDirectives[0])); 231 expect(newNode, same(oldDirectives[0]));
225 expect(getNodeText(newNode), "library test;"); 232 expect(getNodeText(newNode), "library test;");
226 LibraryElement element = newNode.element; 233 LibraryElement element = newNode.element;
227 expect(element, isNotNull); 234 expect(element, isNotNull);
228 expect(element.nameOffset, newCode.indexOf('test;')); 235 expect(element.nameOffset, newCode.indexOf('test;'));
229 } 236 }
230 { 237 {
231 Directive newNode = newDirectives[1]; 238 Directive newNode = newDirectives[1];
232 expect(newNode, same(oldDirectives[1])); 239 expect(newNode, same(oldDirectives[1]));
233 expect(getNodeText(newNode), "import 'dart:async';"); 240 expect(getNodeText(newNode), "import 'dart:async';");
234 ImportElement element = newNode.element; 241 ImportElement element = newNode.element;
235 expect(element, isNotNull); 242 expect(element, isNotNull);
236 expect(element.nameOffset, newCode.indexOf("import 'dart:async';")); 243 expect(element.nameOffset, newCode.indexOf("import 'dart:async';"));
237 } 244 }
238 { 245 {
239 Directive newNode = newDirectives[2]; 246 Directive newNode = newDirectives[2];
240 expect(newNode, same(oldDirectives[2])); 247 expect(newNode, same(oldDirectives[2]));
241 expect(getNodeText(newNode), "import 'dart:math';"); 248 expect(getNodeText(newNode), "import 'dart:math';");
242 ImportElement element = newNode.element; 249 ImportElement element = newNode.element;
243 expect(element, isNotNull); 250 expect(element, isNotNull);
244 expect(element.nameOffset, newCode.indexOf("import 'dart:math';")); 251 expect(element.nameOffset, newCode.indexOf("import 'dart:math';"));
245 } 252 }
253 expect(unitDelta.hasDirectiveChange, isFalse);
246 } 254 }
247 255
248 test_unitMembers_accessor_add() { 256 test_unitMembers_accessor_add() {
249 _buildOldUnit(r''' 257 _buildOldUnit(r'''
250 get a => 1; 258 get a => 1;
251 '''); 259 ''');
260 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
252 _buildNewUnit(r''' 261 _buildNewUnit(r'''
253 get a => 1; 262 get a => 1;
254 get b => 2; 263 get b => 2;
255 '''); 264 ''');
256 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
257 List<CompilationUnitMember> newNodes = newUnit.declarations; 265 List<CompilationUnitMember> newNodes = newUnit.declarations;
258 // nodes 266 // nodes
259 FunctionDeclaration node1 = newNodes[0]; 267 FunctionDeclaration node1 = newNodes[0];
260 FunctionDeclaration node2 = newNodes[1]; 268 FunctionDeclaration node2 = newNodes[1];
261 expect(node1, same(oldNodes[0])); 269 expect(node1, same(oldNodes[0]));
262 // elements 270 // elements
263 PropertyAccessorElement elementA = node1.element; 271 PropertyAccessorElement elementA = node1.element;
264 PropertyAccessorElement elementB = node2.element; 272 PropertyAccessorElement elementB = node2.element;
265 expect(elementA, isNotNull); 273 expect(elementA, isNotNull);
266 expect(elementB, isNotNull); 274 expect(elementB, isNotNull);
267 expect(elementA.name, 'a'); 275 expect(elementA.name, 'a');
268 expect(elementB.name, 'b'); 276 expect(elementB.name, 'b');
269 // unit.types 277 // unit.types
270 expect(unitElement.topLevelVariables, 278 expect(unitElement.topLevelVariables,
271 unorderedEquals([elementA.variable, elementB.variable])); 279 unorderedEquals([elementA.variable, elementB.variable]));
272 expect(unitElement.accessors, unorderedEquals([elementA, elementB])); 280 expect(unitElement.accessors, unorderedEquals([elementA, elementB]));
273 } 281 }
274 282
275 test_unitMembers_class_add() { 283 test_unitMembers_class_add() {
276 _buildOldUnit(r''' 284 _buildOldUnit(r'''
277 class A {} 285 class A {}
278 '''); 286 ''');
287 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
279 _buildNewUnit(r''' 288 _buildNewUnit(r'''
280 class A {} 289 class A {}
281 class B {} 290 class B {}
282 '''); 291 ''');
283 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
284 List<CompilationUnitMember> newNodes = newUnit.declarations; 292 List<CompilationUnitMember> newNodes = newUnit.declarations;
285 // nodes 293 // nodes
286 CompilationUnitMember nodeA = newNodes[0]; 294 CompilationUnitMember nodeA = newNodes[0];
287 CompilationUnitMember nodeB = newNodes[1]; 295 CompilationUnitMember nodeB = newNodes[1];
288 expect(nodeA, same(oldNodes[0])); 296 expect(nodeA, same(oldNodes[0]));
289 // elements 297 // elements
290 ClassElement elementA = nodeA.element; 298 ClassElement elementA = nodeA.element;
291 ClassElement elementB = nodeB.element; 299 ClassElement elementB = nodeB.element;
292 expect(elementA, isNotNull); 300 expect(elementA, isNotNull);
293 expect(elementB, isNotNull); 301 expect(elementB, isNotNull);
294 expect(elementA.name, 'A'); 302 expect(elementA.name, 'A');
295 expect(elementB.name, 'B'); 303 expect(elementB.name, 'B');
296 // unit.types 304 // unit.types
297 expect(unitElement.types, unorderedEquals([elementA, elementB])); 305 expect(unitElement.types, unorderedEquals([elementA, elementB]));
306 // verify delta
307 expect(unitDelta.addedDeclarations, unorderedEquals([elementB]));
308 expect(unitDelta.removedDeclarations, unorderedEquals([]));
298 } 309 }
299 310
300 test_unitMembers_class_comments() { 311 test_unitMembers_class_comments() {
301 _buildOldUnit(r''' 312 _buildOldUnit(r'''
302 /// reference [bool] type. 313 /// reference [bool] type.
303 class A {} 314 class A {}
304 /// reference [int] type. 315 /// reference [int] type.
305 class B {} 316 class B {}
306 /// reference [double] and [B] types. 317 /// reference [double] and [B] types.
307 class C {} 318 class C {}
308 '''); 319 ''');
320 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
309 _buildNewUnit(r''' 321 _buildNewUnit(r'''
310 /// reference [double] and [B] types. 322 /// reference [double] and [B] types.
311 class C {} 323 class C {}
312 /// reference [bool] type. 324 /// reference [bool] type.
313 class A {} 325 class A {}
314 /// reference [int] type. 326 /// reference [int] type.
315 class B {} 327 class B {}
316 '''); 328 ''');
317 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
318 List<CompilationUnitMember> newNodes = newUnit.declarations; 329 List<CompilationUnitMember> newNodes = newUnit.declarations;
319 { 330 {
320 CompilationUnitMember newNode = newNodes[0]; 331 CompilationUnitMember newNode = newNodes[0];
321 expect(newNode, same(oldNodes[2])); 332 expect(newNode, same(oldNodes[2]));
322 expect(getNodeText(newNode), r''' 333 expect(getNodeText(newNode), r'''
323 /// reference [double] and [B] types. 334 /// reference [double] and [B] types.
324 class C {}'''); 335 class C {}''');
325 ClassElement element = newNode.element; 336 ClassElement element = newNode.element;
326 expect(element, isNotNull); 337 expect(element, isNotNull);
327 expect(element.name, 'C'); 338 expect(element.name, 'C');
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 expect(element, isNotNull); 373 expect(element, isNotNull);
363 expect(element.name, 'B'); 374 expect(element.name, 'B');
364 expect(element.nameOffset, newCode.indexOf('B {}')); 375 expect(element.nameOffset, newCode.indexOf('B {}'));
365 // [int] is still resolved 376 // [int] is still resolved
366 { 377 {
367 var docReferences = newNode.documentationComment.references; 378 var docReferences = newNode.documentationComment.references;
368 expect(docReferences, hasLength(1)); 379 expect(docReferences, hasLength(1));
369 expect(docReferences[0].identifier.staticElement.name, 'int'); 380 expect(docReferences[0].identifier.staticElement.name, 'int');
370 } 381 }
371 } 382 }
383 // verify delta
384 expect(unitDelta.addedDeclarations, unorderedEquals([]));
385 expect(unitDelta.removedDeclarations, unorderedEquals([]));
386 }
387
388 test_unitMembers_class_remove() {
389 _buildOldUnit(r'''
390 class A {}
391 class B {}
392 ''');
393 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
394 _buildNewUnit(r'''
395 class A {}
396 ''');
397 List<CompilationUnitMember> newNodes = newUnit.declarations;
398 // nodes
399 CompilationUnitMember nodeA = newNodes[0];
400 CompilationUnitMember nodeB = oldNodes[1];
401 expect(nodeA, same(oldNodes[0]));
402 // elements
403 ClassElement elementA = nodeA.element;
404 ClassElement elementB = nodeB.element;
405 expect(elementA, isNotNull);
406 expect(elementB, isNotNull);
407 expect(elementA.name, 'A');
408 expect(elementB.name, 'B');
409 // unit.types
410 expect(unitElement.types, unorderedEquals([elementA]));
411 // verify delta
412 expect(unitDelta.addedDeclarations, unorderedEquals([]));
413 expect(unitDelta.removedDeclarations, unorderedEquals([elementB]));
372 } 414 }
373 415
374 test_unitMembers_class_reorder() { 416 test_unitMembers_class_reorder() {
375 _buildOldUnit(r''' 417 _buildOldUnit(r'''
376 class A {} 418 class A {}
377 class B {} 419 class B {}
378 class C {} 420 class C {}
379 '''); 421 ''');
422 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
380 _buildNewUnit(r''' 423 _buildNewUnit(r'''
381 class C {} 424 class C {}
382 class A {} 425 class A {}
383 class B {} 426 class B {}
384 '''); 427 ''');
385 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
386 List<CompilationUnitMember> newNodes = newUnit.declarations; 428 List<CompilationUnitMember> newNodes = newUnit.declarations;
387 { 429 {
388 CompilationUnitMember newNode = newNodes[0]; 430 CompilationUnitMember newNode = newNodes[0];
389 expect(newNode, same(oldNodes[2])); 431 expect(newNode, same(oldNodes[2]));
390 expect(getNodeText(newNode), 'class C {}'); 432 expect(getNodeText(newNode), 'class C {}');
391 ClassElement element = newNode.element; 433 ClassElement element = newNode.element;
392 expect(element, isNotNull); 434 expect(element, isNotNull);
393 expect(element.name, 'C'); 435 expect(element.name, 'C');
394 expect(element.nameOffset, newCode.indexOf('C {}')); 436 expect(element.nameOffset, newCode.indexOf('C {}'));
395 } 437 }
396 { 438 {
397 CompilationUnitMember newNode = newNodes[1]; 439 CompilationUnitMember newNode = newNodes[1];
398 expect(newNode, same(oldNodes[0])); 440 expect(newNode, same(oldNodes[0]));
399 expect(getNodeText(newNode), 'class A {}'); 441 expect(getNodeText(newNode), 'class A {}');
400 ClassElement element = newNode.element; 442 ClassElement element = newNode.element;
401 expect(element, isNotNull); 443 expect(element, isNotNull);
402 expect(element.name, 'A'); 444 expect(element.name, 'A');
403 expect(element.nameOffset, newCode.indexOf('A {}')); 445 expect(element.nameOffset, newCode.indexOf('A {}'));
404 } 446 }
405 { 447 {
406 CompilationUnitMember newNode = newNodes[2]; 448 CompilationUnitMember newNode = newNodes[2];
407 expect(newNode, same(oldNodes[1])); 449 expect(newNode, same(oldNodes[1]));
408 expect(getNodeText(newNode), 'class B {}'); 450 expect(getNodeText(newNode), 'class B {}');
409 ClassElement element = newNode.element; 451 ClassElement element = newNode.element;
410 expect(element, isNotNull); 452 expect(element, isNotNull);
411 expect(element.name, 'B'); 453 expect(element.name, 'B');
412 expect(element.nameOffset, newCode.indexOf('B {}')); 454 expect(element.nameOffset, newCode.indexOf('B {}'));
413 } 455 }
456 // verify delta
457 expect(unitDelta.addedDeclarations, unorderedEquals([]));
458 expect(unitDelta.removedDeclarations, unorderedEquals([]));
414 } 459 }
415 460
416 test_unitMembers_enum_add() { 461 test_unitMembers_enum_add() {
417 _buildOldUnit(r''' 462 _buildOldUnit(r'''
418 enum A {A1, A2} 463 enum A {A1, A2}
419 '''); 464 ''');
465 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
420 _buildNewUnit(r''' 466 _buildNewUnit(r'''
421 enum A {A1, A2} 467 enum A {A1, A2}
422 enum B {B1, B2} 468 enum B {B1, B2}
423 '''); 469 ''');
424 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
425 List<CompilationUnitMember> newNodes = newUnit.declarations; 470 List<CompilationUnitMember> newNodes = newUnit.declarations;
426 // nodes 471 // nodes
427 CompilationUnitMember nodeA = newNodes[0]; 472 CompilationUnitMember nodeA = newNodes[0];
428 CompilationUnitMember nodeB = newNodes[1]; 473 CompilationUnitMember nodeB = newNodes[1];
429 expect(nodeA, same(oldNodes[0])); 474 expect(nodeA, same(oldNodes[0]));
430 // elements 475 // elements
431 ClassElement elementA = nodeA.element; 476 ClassElement elementA = nodeA.element;
432 ClassElement elementB = nodeB.element; 477 ClassElement elementB = nodeB.element;
433 expect(elementA, isNotNull); 478 expect(elementA, isNotNull);
434 expect(elementB, isNotNull); 479 expect(elementB, isNotNull);
435 expect(elementA.name, 'A'); 480 expect(elementA.name, 'A');
436 expect(elementB.name, 'B'); 481 expect(elementB.name, 'B');
437 // unit.types 482 // unit.types
438 expect(unitElement.enums, unorderedEquals([elementA, elementB])); 483 expect(unitElement.enums, unorderedEquals([elementA, elementB]));
484 // verify delta
485 expect(unitDelta.addedDeclarations, unorderedEquals([elementB]));
486 expect(unitDelta.removedDeclarations, unorderedEquals([]));
439 } 487 }
440 488
441 test_unitMembers_function_add() { 489 test_unitMembers_function_add() {
442 _buildOldUnit(r''' 490 _buildOldUnit(r'''
443 a() {} 491 a() {}
444 '''); 492 ''');
493 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
445 _buildNewUnit(r''' 494 _buildNewUnit(r'''
446 a() {} 495 a() {}
447 b() {} 496 b() {}
448 '''); 497 ''');
449 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
450 List<CompilationUnitMember> newNodes = newUnit.declarations; 498 List<CompilationUnitMember> newNodes = newUnit.declarations;
451 // nodes 499 // nodes
452 CompilationUnitMember nodeA = newNodes[0]; 500 CompilationUnitMember nodeA = newNodes[0];
453 CompilationUnitMember nodeB = newNodes[1]; 501 CompilationUnitMember nodeB = newNodes[1];
454 expect(nodeA, same(oldNodes[0])); 502 expect(nodeA, same(oldNodes[0]));
455 // elements 503 // elements
456 FunctionElement elementA = nodeA.element; 504 FunctionElement elementA = nodeA.element;
457 FunctionElement elementB = nodeB.element; 505 FunctionElement elementB = nodeB.element;
458 expect(elementA, isNotNull); 506 expect(elementA, isNotNull);
459 expect(elementB, isNotNull); 507 expect(elementB, isNotNull);
460 expect(elementA.name, 'a'); 508 expect(elementA.name, 'a');
461 expect(elementB.name, 'b'); 509 expect(elementB.name, 'b');
462 // unit.types 510 // unit.types
463 expect(unitElement.functions, unorderedEquals([elementA, elementB])); 511 expect(unitElement.functions, unorderedEquals([elementA, elementB]));
512 // verify delta
513 expect(unitDelta.addedDeclarations, unorderedEquals([elementB]));
514 expect(unitDelta.removedDeclarations, unorderedEquals([]));
464 } 515 }
465 516
466 test_unitMembers_functionTypeAlias_add() { 517 test_unitMembers_functionTypeAlias_add() {
467 _buildOldUnit(r''' 518 _buildOldUnit(r'''
468 typedef A(); 519 typedef A();
469 '''); 520 ''');
521 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
470 _buildNewUnit(r''' 522 _buildNewUnit(r'''
471 typedef A(); 523 typedef A();
472 typedef B(); 524 typedef B();
473 '''); 525 ''');
474 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
475 List<CompilationUnitMember> newNodes = newUnit.declarations; 526 List<CompilationUnitMember> newNodes = newUnit.declarations;
476 // nodes 527 // nodes
477 CompilationUnitMember nodeA = newNodes[0]; 528 CompilationUnitMember nodeA = newNodes[0];
478 CompilationUnitMember nodeB = newNodes[1]; 529 CompilationUnitMember nodeB = newNodes[1];
479 expect(nodeA, same(oldNodes[0])); 530 expect(nodeA, same(oldNodes[0]));
480 // elements 531 // elements
481 FunctionTypeAliasElement elementA = nodeA.element; 532 FunctionTypeAliasElement elementA = nodeA.element;
482 FunctionTypeAliasElement elementB = nodeB.element; 533 FunctionTypeAliasElement elementB = nodeB.element;
483 expect(elementA, isNotNull); 534 expect(elementA, isNotNull);
484 expect(elementB, isNotNull); 535 expect(elementB, isNotNull);
485 expect(elementA.name, 'A'); 536 expect(elementA.name, 'A');
486 expect(elementB.name, 'B'); 537 expect(elementB.name, 'B');
487 // unit.types 538 // unit.types
488 expect( 539 expect(
489 unitElement.functionTypeAliases, unorderedEquals([elementA, elementB])); 540 unitElement.functionTypeAliases, unorderedEquals([elementA, elementB]));
541 // verify delta
542 expect(unitDelta.addedDeclarations, unorderedEquals([elementB]));
543 expect(unitDelta.removedDeclarations, unorderedEquals([]));
490 } 544 }
491 545
492 test_unitMembers_topLevelVariable_add() { 546 test_unitMembers_topLevelVariable_add() {
493 _buildOldUnit(r''' 547 _buildOldUnit(r'''
494 int a, b; 548 int a, b;
495 '''); 549 ''');
550 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
496 _buildNewUnit(r''' 551 _buildNewUnit(r'''
497 int a, b; 552 int a, b;
498 int c, d; 553 int c, d;
499 '''); 554 ''');
500 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
501 List<CompilationUnitMember> newNodes = newUnit.declarations; 555 List<CompilationUnitMember> newNodes = newUnit.declarations;
502 // nodes 556 // nodes
503 TopLevelVariableDeclaration node1 = newNodes[0]; 557 TopLevelVariableDeclaration node1 = newNodes[0];
504 TopLevelVariableDeclaration node2 = newNodes[1]; 558 TopLevelVariableDeclaration node2 = newNodes[1];
505 expect(node1, same(oldNodes[0])); 559 expect(node1, same(oldNodes[0]));
506 // elements 560 // elements
507 TopLevelVariableElement elementA = node1.variables.variables[0].element; 561 TopLevelVariableElement elementA = node1.variables.variables[0].element;
508 TopLevelVariableElement elementB = node1.variables.variables[1].element; 562 TopLevelVariableElement elementB = node1.variables.variables[1].element;
509 TopLevelVariableElement elementC = node2.variables.variables[0].element; 563 TopLevelVariableElement elementC = node2.variables.variables[0].element;
510 TopLevelVariableElement elementD = node2.variables.variables[1].element; 564 TopLevelVariableElement elementD = node2.variables.variables[1].element;
(...skipping 18 matching lines...) Expand all
529 elementD.getter, 583 elementD.getter,
530 elementD.setter 584 elementD.setter
531 ])); 585 ]));
532 } 586 }
533 587
534 test_unitMembers_topLevelVariableDeclaration() { 588 test_unitMembers_topLevelVariableDeclaration() {
535 _buildOldUnit(r''' 589 _buildOldUnit(r'''
536 bool a = 1, b = 2; 590 bool a = 1, b = 2;
537 int c = 3; 591 int c = 3;
538 '''); 592 ''');
593 List<CompilationUnitMember> oldNodes = oldUnit.declarations.toList();
539 _buildNewUnit(r''' 594 _buildNewUnit(r'''
540 int c = 3; 595 int c = 3;
541 596
542 bool a =1, b = 2; 597 bool a =1, b = 2;
543 '''); 598 ''');
544 List<CompilationUnitMember> oldNodes = oldUnit.declarations;
545 List<CompilationUnitMember> newNodes = newUnit.declarations; 599 List<CompilationUnitMember> newNodes = newUnit.declarations;
546 { 600 {
547 TopLevelVariableDeclaration newNode = newNodes[0]; 601 TopLevelVariableDeclaration newNode = newNodes[0];
548 expect(newNode, same(oldNodes[1])); 602 expect(newNode, same(oldNodes[1]));
549 expect(getNodeText(newNode), 'int c = 3;'); 603 expect(getNodeText(newNode), 'int c = 3;');
550 { 604 {
551 TopLevelVariableElement element = 605 TopLevelVariableElement element =
552 newNode.variables.variables[0].element; 606 newNode.variables.variables[0].element;
553 expect(element, isNotNull); 607 expect(element, isNotNull);
554 expect(element.name, 'c'); 608 expect(element.name, 'c');
(...skipping 12 matching lines...) Expand all
567 expect(element.nameOffset, newCode.indexOf('a =1')); 621 expect(element.nameOffset, newCode.indexOf('a =1'));
568 } 622 }
569 { 623 {
570 TopLevelVariableElement element = 624 TopLevelVariableElement element =
571 newNode.variables.variables[1].element; 625 newNode.variables.variables[1].element;
572 expect(element, isNotNull); 626 expect(element, isNotNull);
573 expect(element.name, 'b'); 627 expect(element.name, 'b');
574 expect(element.nameOffset, newCode.indexOf('b = 2')); 628 expect(element.nameOffset, newCode.indexOf('b = 2'));
575 } 629 }
576 } 630 }
631 // verify delta
632 expect(unitDelta.addedDeclarations, unorderedEquals([]));
633 expect(unitDelta.removedDeclarations, unorderedEquals([]));
577 } 634 }
578 635
579 void _buildNewUnit(String newCode) { 636 void _buildNewUnit(String newCode) {
580 this.newCode = newCode; 637 this.newCode = newCode;
581 context.setContents(source, newCode); 638 context.setContents(source, newCode);
582 newUnit = context.parseCompilationUnit(source); 639 newUnit = context.parseCompilationUnit(source);
583 new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit).build(); 640 IncrementalCompilationUnitElementBuilder builder =
641 new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit);
642 builder.build();
643 unitDelta = builder.unitDelta;
584 expect(newUnit.element, unitElement); 644 expect(newUnit.element, unitElement);
585 } 645 }
586 646
587 void _buildOldUnit(String oldCode, [Source libSource]) { 647 void _buildOldUnit(String oldCode, [Source libSource]) {
588 this.oldCode = oldCode; 648 this.oldCode = oldCode;
589 source = newSource('/test.dart', oldCode); 649 source = newSource('/test.dart', oldCode);
590 if (libSource == null) { 650 if (libSource == null) {
591 libSource = source; 651 libSource = source;
592 } 652 }
593 oldUnit = context.resolveCompilationUnit2(source, libSource); 653 oldUnit = context.resolveCompilationUnit2(source, libSource);
594 unitElement = oldUnit.element; 654 unitElement = oldUnit.element;
595 expect(unitElement, isNotNull); 655 expect(unitElement, isNotNull);
596 } 656 }
597 } 657 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/task/incremental_element_builder.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698