Index: tests/compiler/dart2js/equivalence/id_equivalence_helper.dart |
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart |
similarity index 69% |
copy from tests/compiler/dart2js/inference/inference_test_helper.dart |
copy to tests/compiler/dart2js/equivalence/id_equivalence_helper.dart |
index e518df210771f951cfe217d6988a6db670456db2..ab3b9a7f2cf596432565097b70262ec4dba134ae 100644 |
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart |
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart |
@@ -9,15 +9,14 @@ import 'package:compiler/src/elements/elements.dart'; |
import 'package:compiler/src/elements/entities.dart'; |
import 'package:compiler/src/resolution/tree_elements.dart'; |
import 'package:compiler/src/tree/nodes.dart'; |
-import 'package:compiler/src/types/types.dart'; |
import 'package:expect/expect.dart'; |
import '../annotated_code_helper.dart'; |
import '../memory_compiler.dart'; |
-import 'enumerator.dart'; |
+import '../equivalence/id_equivalence.dart'; |
typedef void CheckMemberFunction( |
- Compiler compiler, Map<Id, String> expectedMap, MemberElement member); |
+ Compiler compiler, Map<Id, String> expectedMap, MemberEntity member); |
/// Compiles the [annotatedCode] with the provided [options] and calls |
/// [checkMember] for each member in the code providing the map from [Id] to |
@@ -32,39 +31,29 @@ checkCode(String annotatedCode, CheckMemberFunction checkMember, |
compiler.stopAfterTypeInference = true; |
Uri mainUri = Uri.parse('memory:main.dart'); |
await compiler.run(mainUri); |
- LibraryElement mainApp = |
- compiler.frontendStrategy.elementEnvironment.mainLibrary; |
- mainApp.forEachLocalMember((dynamic member) { |
- if (member.isClass) { |
- member.forEachLocalMember((member) { |
+ ElementEnvironment elementEnvironment = |
+ compiler.backendClosedWorldForTesting.elementEnvironment; |
+ LibraryEntity mainLibrary = elementEnvironment.mainLibrary; |
+ elementEnvironment.forEachClass(mainLibrary, (ClassEntity cls) { |
+ elementEnvironment.forEachClassMember(cls, |
+ (ClassEntity declarer, MemberEntity member) { |
+ if (cls == declarer) { |
checkMember(compiler, expectedMap, member); |
- }); |
- } else if (member.isTypedef) { |
- // Skip. |
- } else { |
- checkMember(compiler, expectedMap, member); |
- } |
+ } |
+ }); |
+ }); |
+ elementEnvironment.forEachLibraryMember(mainLibrary, (MemberEntity member) { |
+ checkMember(compiler, expectedMap, member); |
}); |
expectedMap.forEach((Id id, String expected) { |
reportHere( |
compiler.reporter, |
- computeSpannable(compiler.resolution.elementEnvironment, mainUri, id), |
+ computeSpannable(elementEnvironment, mainUri, id), |
'expected:${expected},actual:null'); |
}); |
Expect.isTrue(expectedMap.isEmpty, "Ids not found: $expectedMap."); |
} |
-void checkMemberAstTypeMasks( |
- Compiler compiler, Map<Id, String> expectedMap, MemberElement member) { |
- ResolvedAst resolvedAst = member.resolvedAst; |
- if (resolvedAst.kind != ResolvedAstKind.PARSED) return; |
- compiler.reporter.withCurrentElement(member.implementation, () { |
- new TypeMaskChecker(compiler.reporter, expectedMap, resolvedAst, |
- compiler.globalInference.results) |
- .check(); |
- }); |
-} |
- |
Spannable computeSpannable( |
ElementEnvironment elementEnvironment, Uri mainUri, Id id) { |
if (id is NodeId) { |
@@ -101,16 +90,13 @@ Map<Id, String> computeExpectedMap(AnnotatedCode code) { |
return map; |
} |
-class TypeMaskChecker extends Visitor with AstEnumeratorMixin { |
+abstract class AbstractResolvedAstChecker extends Visitor |
+ with AstEnumeratorMixin { |
final DiagnosticReporter reporter; |
final Map<Id, String> expectedMap; |
final ResolvedAst resolvedAst; |
- final GlobalTypeInferenceResults results; |
- final GlobalTypeInferenceElementResult result; |
- TypeMaskChecker( |
- this.reporter, this.expectedMap, this.resolvedAst, this.results) |
- : result = results.resultOfMember(resolvedAst.element as MemberElement); |
+ AbstractResolvedAstChecker(this.reporter, this.expectedMap, this.resolvedAst); |
TreeElements get elements => resolvedAst.elements; |
@@ -124,36 +110,36 @@ class TypeMaskChecker extends Visitor with AstEnumeratorMixin { |
void checkElement(AstElement element) { |
ElementId id = computeElementId(element); |
- GlobalTypeInferenceElementResult elementResult = |
- results.resultOfElement(element); |
- TypeMask value = |
- element.isFunction ? elementResult.returnType : elementResult.type; |
String expected = annotationForId(id); |
+ String value = computeElementValue(element); |
checkValue(element, expected, value); |
} |
+ String computeElementValue(AstElement element); |
+ |
String annotationForId(Id id) { |
if (id == null) return null; |
return expectedMap.remove(id); |
} |
- void checkValue(Spannable spannable, String expected, TypeMask value) { |
+ void checkValue(Spannable spannable, String expected, String value) { |
if (value != null || expected != null) { |
- String valueText = '$value'; |
- if (valueText != expected) { |
+ if (value != expected) { |
reportHere(reporter, spannable, 'expected:${expected},actual:${value}'); |
} |
- Expect.equals(expected, valueText); |
+ Expect.equals(expected, value); |
} |
} |
- void checkSend(Send node) { |
- NodeId id = computeNodeId(node); |
- TypeMask value = result.typeOfSend(node); |
+ void checkNode(Node node, AstElement element) { |
+ NodeId id = computeNodeId(node, element); |
String expected = annotationForId(id); |
+ String value = computeNodeValue(node, element); |
checkValue(node, expected, value); |
} |
+ String computeNodeValue(Node node, [AstElement element]); |
+ |
visitVariableDefinitions(VariableDefinitions node) { |
for (Node child in node.definitions) { |
AstElement element = elements[child]; |
@@ -161,6 +147,8 @@ class TypeMaskChecker extends Visitor with AstEnumeratorMixin { |
reportHere(reporter, child, 'No element for variable.'); |
} else if (!element.isLocal) { |
checkElement(element); |
+ } else { |
+ checkNode(child, element); |
} |
} |
visitNode(node); |
@@ -168,17 +156,21 @@ class TypeMaskChecker extends Visitor with AstEnumeratorMixin { |
visitFunctionExpression(FunctionExpression node) { |
AstElement element = elements.getFunctionDefinition(node); |
- checkElement(element); |
+ if (!element.isLocal) { |
+ checkElement(element); |
+ } else { |
+ checkNode(node, element); |
+ } |
visitNode(node); |
} |
visitSend(Send node) { |
- checkSend(node); |
+ checkNode(node, null); |
visitNode(node); |
} |
visitSendSet(SendSet node) { |
- checkSend(node); |
+ checkNode(node, null); |
visitNode(node); |
} |
} |