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

Unified Diff: pkg/analyzer/test/generated/all_the_rest_test.dart

Issue 1129143003: Store elements in the constant eval dependency graph rather than AST nodes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/element.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/generated/all_the_rest_test.dart
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 84cc1c55d40b67b245cf1fdb9d7d7176a3779b33..9dc33a745d0af9f761e56fda20175430d3ad2698 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -7,8 +7,6 @@
library engine.all_the_rest_test;
-import 'dart:collection';
-
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
@@ -475,72 +473,40 @@ class ConstantEvaluationValidator_ForTest
implements ConstantEvaluationValidator {
ConstantValueComputer computer;
- AstNode _nodeBeingEvaluated;
+ Element _nodeBeingEvaluated;
@override
- void beforeComputeValue(AstNode constNode) {
- _nodeBeingEvaluated = constNode;
+ void beforeComputeValue(Element element) {
+ _nodeBeingEvaluated = element;
}
@override
void beforeGetConstantInitializers(ConstructorElement constructor) {
- // If we are getting the constant initializers for a node in the graph,
- // make sure we properly recorded the dependency.
- ConstructorDeclaration node =
- computer.findConstructorDeclaration(constructor);
- if (node != null && computer.referenceGraph.nodes.contains(node)) {
- expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, node),
- isTrue);
- }
+ // Make sure we properly recorded the dependency.
+ expect(
+ computer.referenceGraph.containsPath(_nodeBeingEvaluated, constructor),
+ isTrue);
}
@override
- void beforeGetEvaluationResult(AstNode node) {
- // If we are getting the evaluation result for a node in the graph,
- // make sure we properly recorded the dependency.
- if (computer.referenceGraph.nodes.contains(node)) {
- expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, node),
- isTrue);
- }
+ void beforeGetEvaluationResult(Element element) {
+ // Make sure we properly recorded the dependency.
+ expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, element),
+ isTrue);
}
@override
void beforeGetFieldEvaluationResult(FieldElementImpl field) {
- // If we are getting the constant value for a node in the graph, make sure
- // we properly recorded the dependency.
- VariableDeclaration node = computer.findVariableDeclaration(field);
- if (node != null && computer.referenceGraph.nodes.contains(node)) {
- expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, node),
- isTrue);
- }
+ // Make sure we properly recorded the dependency.
+ expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, field),
+ isTrue);
}
@override
void beforeGetParameterDefault(ParameterElement parameter) {
- // Find the ConstructorElement and figure out which
- // parameter we're talking about.
- ConstructorElement constructor =
- parameter.getAncestor((element) => element is ConstructorElement);
- int parameterIndex;
- List<ParameterElement> parameters = constructor.parameters;
- int numParameters = parameters.length;
- for (parameterIndex = 0; parameterIndex < numParameters; parameterIndex++) {
- if (identical(parameters[parameterIndex], parameter)) {
- break;
- }
- }
- expect(parameterIndex < numParameters, isTrue);
- // If we are getting the default parameter for a constructor in the graph,
- // make sure we properly recorded the dependency on the parameter.
- ConstructorDeclaration constructorNode =
- computer.constructorDeclarationMap[constructor];
- if (constructorNode != null) {
- FormalParameter parameterNode =
- constructorNode.parameters.parameters[parameterIndex];
- expect(computer.referenceGraph.nodes.contains(parameterNode), isTrue);
- expect(computer.referenceGraph.containsPath(
- _nodeBeingEvaluated, parameterNode), isTrue);
- }
+ // Make sure we properly recorded the dependency.
+ expect(computer.referenceGraph.containsPath(_nodeBeingEvaluated, parameter),
+ isTrue);
}
}
@@ -957,73 +923,73 @@ class ConstantFinderTest extends EngineTestCase {
void test_visitConstructorDeclaration_const() {
ConstructorElement element = _setupConstructorDeclaration("A", true);
- expect(_findConstantDeclarations()[element], same(_node));
+ expect(_findConstants(), contains(element));
}
void test_visitConstructorDeclaration_nonConst() {
_setupConstructorDeclaration("A", false);
- expect(_findConstantDeclarations().isEmpty, isTrue);
+ expect(_findConstants(), isEmpty);
}
void test_visitVariableDeclaration_const() {
VariableElement element = _setupVariableDeclaration("v", true, true);
- expect(_findVariableDeclarations()[element], same(_node));
+ expect(_findConstants(), contains(element));
}
void test_visitVariableDeclaration_final_inClass() {
_setupFieldDeclaration('C', 'f', Keyword.FINAL);
- expect(_findVariableDeclarations(), isEmpty);
+ expect(_findConstants(), isEmpty);
}
void test_visitVariableDeclaration_final_inClassWithConstConstructor() {
VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
hasConstConstructor: true);
- expect(_findVariableDeclarations()[field.element], same(field));
+ expect(_findConstants(), contains(field.element));
}
void test_visitVariableDeclaration_final_outsideClass() {
_setupVariableDeclaration('v', false, true, isFinal: true);
- expect(_findVariableDeclarations(), isEmpty);
+ expect(_findConstants(), isEmpty);
}
void test_visitVariableDeclaration_noInitializer() {
_setupVariableDeclaration("v", true, false);
- expect(_findVariableDeclarations().isEmpty, isTrue);
+ expect(_findConstants(), isEmpty);
}
void test_visitVariableDeclaration_nonConst() {
_setupVariableDeclaration("v", false, true);
- expect(_findVariableDeclarations().isEmpty, isTrue);
+ expect(_findConstants(), isEmpty);
}
void test_visitVariableDeclaration_static_const_inClass() {
VariableDeclaration field =
_setupFieldDeclaration('C', 'f', Keyword.CONST, isStatic: true);
- expect(_findVariableDeclarations()[field.element], same(field));
+ expect(_findConstants(), contains(field.element));
}
void test_visitVariableDeclaration_static_const_inClassWithConstConstructor() {
VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.CONST,
isStatic: true, hasConstConstructor: true);
- expect(_findVariableDeclarations()[field.element], same(field));
+ expect(_findConstants(), contains(field.element));
}
void test_visitVariableDeclaration_static_final_inClassWithConstConstructor() {
- _setupFieldDeclaration('C', 'f', Keyword.FINAL,
+ VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
isStatic: true, hasConstConstructor: true);
- expect(_findVariableDeclarations(), isEmpty);
+ expect(_findConstants(), isNot(contains(field.element)));
}
void test_visitVariableDeclaration_uninitialized_final_inClassWithConstConstructor() {
- _setupFieldDeclaration('C', 'f', Keyword.FINAL,
+ VariableDeclaration field = _setupFieldDeclaration('C', 'f', Keyword.FINAL,
isInitialized: false, hasConstConstructor: true);
- expect(_findVariableDeclarations(), isEmpty);
+ expect(_findConstants(), isNot(contains(field.element)));
}
void test_visitVariableDeclaration_uninitialized_static_const_inClass() {
_setupFieldDeclaration('C', 'f', Keyword.CONST,
isStatic: true, isInitialized: false);
- expect(_findVariableDeclarations(), isEmpty);
+ expect(_findConstants(), isEmpty);
}
List<Annotation> _findAnnotations() {
@@ -1034,22 +1000,12 @@ class ConstantFinderTest extends EngineTestCase {
return annotations;
}
- Map<ConstructorElement, ConstructorDeclaration> _findConstantDeclarations() {
- ConstantFinder finder = new ConstantFinder();
- _node.accept(finder);
- Map<ConstructorElement, ConstructorDeclaration> constructorMap =
- finder.constructorMap;
- expect(constructorMap, isNotNull);
- return constructorMap;
- }
-
- Map<PotentiallyConstVariableElement, VariableDeclaration> _findVariableDeclarations() {
+ Set<Element> _findConstants() {
ConstantFinder finder = new ConstantFinder();
_node.accept(finder);
- Map<PotentiallyConstVariableElement, VariableDeclaration> variableMap =
- finder.variableMap;
- expect(variableMap, isNotNull);
- return variableMap;
+ Set<Element> constants = finder.constantsToCompute;
+ expect(constants, isNotNull);
+ return constants;
}
ConstructorElement _setupConstructorDeclaration(String name, bool isConst) {
@@ -1382,6 +1338,23 @@ const int d = c;''');
_validate(true, (members[0] as TopLevelVariableDeclaration).variables);
}
+ void test_computeValues_value_depends_on_enum() {
+ Source librarySource = addSource('''
+enum E { id0, id1 }
+const E e = E.id0;
+''');
+ LibraryElement libraryElement = resolve(librarySource);
+ CompilationUnit unit =
+ analysisContext.resolveCompilationUnit(librarySource, libraryElement);
+ expect(unit, isNotNull);
+ ConstantValueComputer computer = _makeConstantValueComputer();
+ computer.add(unit);
+ computer.computeValues();
+ TopLevelVariableDeclaration declaration = unit.declarations
+ .firstWhere((member) => member is TopLevelVariableDeclaration);
+ _validate(true, declaration.variables);
+ }
+
void test_dependencyOnConstructor() {
// x depends on "const A()"
_assertProperDependencies(r'''
@@ -8039,71 +8012,54 @@ class MockDartSdk implements DartSdk {
@reflectiveTest
class ReferenceFinderTest extends EngineTestCase {
- DirectedGraph<AstNode> _referenceGraph;
- Map<PotentiallyConstVariableElement, VariableDeclaration> _variableDeclarationMap;
- Map<ConstructorElement, ConstructorDeclaration> _constructorDeclarationMap;
- VariableDeclaration _head;
- AstNode _tail;
+ DirectedGraph<Element> _referenceGraph;
+ VariableElement _head;
+ Element _tail;
@override
void setUp() {
- _referenceGraph = new DirectedGraph<AstNode>();
- _variableDeclarationMap =
- new HashMap<PotentiallyConstVariableElement, VariableDeclaration>();
- _constructorDeclarationMap =
- new HashMap<ConstructorElement, ConstructorDeclaration>();
- _head = AstFactory.variableDeclaration("v1");
+ _referenceGraph = new DirectedGraph<Element>();
+ _head = ElementFactory.topLevelVariableElement2("v1");
}
void test_visitSimpleIdentifier_const() {
- _visitNode(_makeTailVariable("v2", true, true));
+ _visitNode(_makeTailVariable("v2", true));
_assertOneArc(_tail);
}
void test_visitSimpleIdentifier_nonConst() {
- _visitNode(_makeTailVariable("v2", false, true));
- _assertNoArcs();
- }
- void test_visitSimpleIdentifier_notInMap() {
- _visitNode(_makeTailVariable("v2", true, false));
+ _visitNode(_makeTailVariable("v2", false));
_assertNoArcs();
}
void test_visitSuperConstructorInvocation_const() {
- _visitNode(_makeTailSuperConstructorInvocation("A", true, true));
+ _visitNode(_makeTailSuperConstructorInvocation("A", true));
_assertOneArc(_tail);
}
void test_visitSuperConstructorInvocation_nonConst() {
- _visitNode(_makeTailSuperConstructorInvocation("A", false, true));
- _assertNoArcs();
- }
- void test_visitSuperConstructorInvocation_notInMap() {
- _visitNode(_makeTailSuperConstructorInvocation("A", true, false));
+ _visitNode(_makeTailSuperConstructorInvocation("A", false));
_assertNoArcs();
}
void test_visitSuperConstructorInvocation_unresolved() {
SuperConstructorInvocation superConstructorInvocation =
AstFactory.superConstructorInvocation();
- _tail = superConstructorInvocation;
_visitNode(superConstructorInvocation);
_assertNoArcs();
}
void _assertNoArcs() {
- Set<AstNode> tails = _referenceGraph.getTails(_head);
+ Set<Element> tails = _referenceGraph.getTails(_head);
expect(tails, hasLength(0));
}
- void _assertOneArc(AstNode tail) {
- Set<AstNode> tails = _referenceGraph.getTails(_head);
+ void _assertOneArc(Element tail) {
+ Set<Element> tails = _referenceGraph.getTails(_head);
expect(tails, hasLength(1));
expect(tails.first, same(tail));
}
- ReferenceFinder _createReferenceFinder(AstNode source) => new ReferenceFinder(
- source, _referenceGraph, _variableDeclarationMap,
- _constructorDeclarationMap);
+ ReferenceFinder _createReferenceFinder(Element source) =>
+ new ReferenceFinder(source, _referenceGraph);
SuperConstructorInvocation _makeTailSuperConstructorInvocation(
- String name, bool isConst, bool inMap) {
+ String name, bool isConst) {
List<ConstructorInitializer> initializers =
new List<ConstructorInitializer>();
ConstructorDeclaration constructorDeclaration = AstFactory
.constructorDeclaration(AstFactory.identifier3(name), null,
AstFactory.formalParameterList(), initializers);
- _tail = constructorDeclaration;
if (isConst) {
constructorDeclaration.constKeyword = new KeywordToken(Keyword.CONST, 0);
}
@@ -8112,24 +8068,19 @@ class ReferenceFinderTest extends EngineTestCase {
AstFactory.superConstructorInvocation();
ConstructorElementImpl constructorElement =
ElementFactory.constructorElement(classElement, name, isConst);
- if (inMap) {
- _constructorDeclarationMap[constructorElement] = constructorDeclaration;
- }
+ _tail = constructorElement;
superConstructorInvocation.staticElement = constructorElement;
return superConstructorInvocation;
}
- SimpleIdentifier _makeTailVariable(String name, bool isConst, bool inMap) {
+ SimpleIdentifier _makeTailVariable(String name, bool isConst) {
VariableDeclaration variableDeclaration =
AstFactory.variableDeclaration(name);
- _tail = variableDeclaration;
ConstLocalVariableElementImpl variableElement =
ElementFactory.constLocalVariableElement(name);
+ _tail = variableElement;
variableElement.const3 = isConst;
AstFactory.variableDeclarationList2(
isConst ? Keyword.CONST : Keyword.VAR, [variableDeclaration]);
- if (inMap) {
- _variableDeclarationMap[variableElement] = variableDeclaration;
- }
SimpleIdentifier identifier = AstFactory.identifier3(name);
identifier.staticElement = variableElement;
return identifier;
« no previous file with comments | « pkg/analyzer/lib/src/generated/element.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698