OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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.context.context_test; | 5 library analyzer.test.src.context.context_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 5377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5388 */ | 5388 */ |
5389 void expectNoDifferences() { | 5389 void expectNoDifferences() { |
5390 if (overwrittenCount > 0) { | 5390 if (overwrittenCount > 0) { |
5391 fail('Found $overwrittenCount overwritten elements.$buffer'); | 5391 fail('Found $overwrittenCount overwritten elements.$buffer'); |
5392 } | 5392 } |
5393 } | 5393 } |
5394 | 5394 |
5395 @override | 5395 @override |
5396 void visitElement(Element element) { | 5396 void visitElement(Element element) { |
5397 Element previousElement = previousElements[element]; | 5397 Element previousElement = previousElements[element]; |
5398 bool expectIdentical = element is! LocalVariableElement; | 5398 bool ok = _expectedIdentical(element) |
5399 bool ok = expectIdentical | |
5400 ? identical(previousElement, element) | 5399 ? identical(previousElement, element) |
5401 : previousElement == element; | 5400 : previousElement == element; |
5402 if (!ok) { | 5401 if (!ok) { |
5403 if (overwrittenCount == 0) { | 5402 if (overwrittenCount == 0) { |
5404 buffer.writeln(); | 5403 buffer.writeln(); |
5405 } | 5404 } |
5406 overwrittenCount++; | 5405 overwrittenCount++; |
5407 buffer.writeln('Overwritten element:'); | 5406 buffer.writeln('Overwritten element:'); |
5408 Element currentElement = element; | 5407 Element currentElement = element; |
5409 while (currentElement != null) { | 5408 while (currentElement != null) { |
5410 buffer.write(' '); | 5409 buffer.write(' '); |
5411 buffer.writeln(currentElement.toString()); | 5410 buffer.writeln(currentElement.toString()); |
5412 currentElement = currentElement.enclosingElement; | 5411 currentElement = currentElement.enclosingElement; |
5413 } | 5412 } |
5414 } | 5413 } |
5415 super.visitElement(element); | 5414 super.visitElement(element); |
5416 } | 5415 } |
| 5416 |
| 5417 /** |
| 5418 * Return `true` if the given [element] should be the same as the previous |
| 5419 * element at the same position in the element model. |
| 5420 */ |
| 5421 static bool _expectedIdentical(Element element) { |
| 5422 while (element != null) { |
| 5423 if (element is ConstructorElement || |
| 5424 element is MethodElement || |
| 5425 element is FunctionElement && |
| 5426 element.enclosingElement is CompilationUnitElement) { |
| 5427 return false; |
| 5428 } |
| 5429 element = element.enclosingElement; |
| 5430 } |
| 5431 return true; |
| 5432 } |
5417 } | 5433 } |
5418 | 5434 |
5419 /** | 5435 /** |
5420 * A visitor that can be used to collect all of the elements in an element | 5436 * A visitor that can be used to collect all of the elements in an element |
5421 * model. | 5437 * model. |
5422 */ | 5438 */ |
5423 class _ElementGatherer extends GeneralizingElementVisitor { | 5439 class _ElementGatherer extends GeneralizingElementVisitor { |
5424 /** | 5440 /** |
5425 * The map in which the elements are collected. The value of each key is the | 5441 * The map in which the elements are collected. The value of each key is the |
5426 * key itself. | 5442 * key itself. |
5427 */ | 5443 */ |
5428 Map<Element, Element> elements = new HashMap<Element, Element>(); | 5444 Map<Element, Element> elements = new HashMap<Element, Element>(); |
5429 | 5445 |
5430 /** | 5446 /** |
5431 * Initialize the visitor. | 5447 * Initialize the visitor. |
5432 */ | 5448 */ |
5433 _ElementGatherer(); | 5449 _ElementGatherer(); |
5434 | 5450 |
5435 @override | 5451 @override |
5436 void visitElement(Element element) { | 5452 void visitElement(Element element) { |
5437 elements[element] = element; | 5453 elements[element] = element; |
5438 super.visitElement(element); | 5454 super.visitElement(element); |
5439 } | 5455 } |
5440 } | 5456 } |
OLD | NEW |