| Index: tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
|
| diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
|
| index 0219bc108ec5786d102e3b4c07812b95361532df..d89841238a3617963abffbb19c11feb2bac2d5b9 100644
|
| --- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
|
| +++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
|
| @@ -7,12 +7,8 @@ import 'package:compiler/src/commandline_options.dart';
|
| import 'package:compiler/src/common.dart';
|
| import 'package:compiler/src/common_elements.dart';
|
| import 'package:compiler/src/compiler.dart';
|
| -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' as ast;
|
| import 'package:expect/expect.dart';
|
| -import 'package:kernel/ast.dart' as ir;
|
|
|
| import '../annotated_code_helper.dart';
|
| import '../memory_compiler.dart';
|
| @@ -88,15 +84,6 @@ Future<IdData> computeData(
|
| code, compiler, elementEnvironment, mainUri, expectedMap, actualMap);
|
| }
|
|
|
| -class ActualData {
|
| - final Id id;
|
| - final String value;
|
| - final SourceSpan sourceSpan;
|
| - final Object object;
|
| -
|
| - ActualData(this.id, this.value, this.sourceSpan, this.object);
|
| -}
|
| -
|
| /// Data collected by [computeData].
|
| class IdData {
|
| final AnnotatedCode code;
|
| @@ -155,6 +142,27 @@ class IdData {
|
| });
|
| return withAnnotations(annotations);
|
| }
|
| +
|
| + String computeDiffCodeFor(IdData other) {
|
| + Map<int, String> annotations = <int, String>{};
|
| + actualMap.forEach((Id id, ActualData data1) {
|
| + ActualData data2 = other.actualMap[id];
|
| + if (data1.value != data2?.value) {
|
| + annotations[data1.sourceSpan.begin] =
|
| + '${data1.value} | ${data2?.value ?? '---'}';
|
| + }
|
| + });
|
| + other.actualMap.forEach((Id id, ActualData data2) {
|
| + if (!actualMap.containsKey(id)) {
|
| + int offset = compiler.reporter
|
| + .spanFromSpannable(
|
| + computeSpannable(elementEnvironment, mainUri, id))
|
| + .begin;
|
| + annotations[offset] = '--- | ${data2.value}';
|
| + }
|
| + });
|
| + return withAnnotations(annotations);
|
| + }
|
| }
|
|
|
| /// Compiles the [annotatedCode] with the provided [options] and calls
|
| @@ -248,158 +256,3 @@ Map<Id, String> computeExpectedMap(AnnotatedCode code) {
|
| }
|
| return map;
|
| }
|
| -
|
| -/// Mixin used for computing [Id] data.
|
| -abstract class ComputerMixin {
|
| - Map<Id, ActualData> get actualMap;
|
| -
|
| - void registerValue(
|
| - SourceSpan sourceSpan, Id id, String value, Object object) {
|
| - if (id != null && value != null) {
|
| - actualMap[id] = new ActualData(id, value, sourceSpan, object);
|
| - }
|
| - }
|
| -}
|
| -
|
| -/// Abstract AST visitor for computing [Id] data.
|
| -abstract class AbstractResolvedAstComputer extends ast.Visitor
|
| - with AstEnumeratorMixin, ComputerMixin {
|
| - final DiagnosticReporter reporter;
|
| - final Map<Id, ActualData> actualMap;
|
| - final ResolvedAst resolvedAst;
|
| -
|
| - AbstractResolvedAstComputer(this.reporter, this.actualMap, this.resolvedAst);
|
| -
|
| - TreeElements get elements => resolvedAst.elements;
|
| -
|
| - void computeForElement(AstElement element) {
|
| - ElementId id = computeElementId(element);
|
| - if (id == null) return;
|
| - String value = computeElementValue(element);
|
| - registerValue(element.sourcePosition, id, value, element);
|
| - }
|
| -
|
| - void computeForNode(ast.Node node, AstElement element) {
|
| - NodeId id = computeNodeId(node, element);
|
| - if (id == null) return;
|
| - String value = computeNodeValue(node, element);
|
| - SourceSpan sourceSpan = new SourceSpan(resolvedAst.sourceUri,
|
| - node.getBeginToken().charOffset, node.getEndToken().charEnd);
|
| - registerValue(sourceSpan, id, value, element ?? node);
|
| - }
|
| -
|
| - String computeElementValue(AstElement element);
|
| -
|
| - String computeNodeValue(ast.Node node, AstElement element);
|
| -
|
| - void run() {
|
| - resolvedAst.node.accept(this);
|
| - }
|
| -
|
| - visitNode(ast.Node node) {
|
| - node.visitChildren(this);
|
| - }
|
| -
|
| - visitVariableDefinitions(ast.VariableDefinitions node) {
|
| - for (ast.Node child in node.definitions) {
|
| - AstElement element = elements[child];
|
| - if (element == null) {
|
| - reportHere(reporter, child, 'No element for variable.');
|
| - } else if (!element.isLocal) {
|
| - computeForElement(element);
|
| - } else {
|
| - computeForNode(child, element);
|
| - }
|
| - }
|
| - visitNode(node);
|
| - }
|
| -
|
| - visitFunctionExpression(ast.FunctionExpression node) {
|
| - AstElement element = elements.getFunctionDefinition(node);
|
| - if (!element.isLocal) {
|
| - computeForElement(element);
|
| - } else {
|
| - computeForNode(node, element);
|
| - }
|
| - visitNode(node);
|
| - }
|
| -
|
| - visitSend(ast.Send node) {
|
| - computeForNode(node, null);
|
| - visitNode(node);
|
| - }
|
| -
|
| - visitSendSet(ast.SendSet node) {
|
| - computeForNode(node, null);
|
| - visitNode(node);
|
| - }
|
| -}
|
| -
|
| -/// Abstract IR visitor for computing [Id] data.
|
| -abstract class AbstractIrComputer extends ir.Visitor
|
| - with IrEnumeratorMixin, ComputerMixin {
|
| - final Map<Id, ActualData> actualMap;
|
| -
|
| - AbstractIrComputer(this.actualMap);
|
| -
|
| - void computeForMember(ir.Member member) {
|
| - ElementId id = computeElementId(member);
|
| - if (id == null) return;
|
| - String value = computeMemberValue(member);
|
| - registerValue(computeSpannable(member), id, value, member);
|
| - }
|
| -
|
| - void computeForNode(ir.TreeNode node) {
|
| - NodeId id = computeNodeId(node);
|
| - if (id == null) return;
|
| - String value = computeNodeValue(node);
|
| - registerValue(computeSpannable(node), id, value, node);
|
| - }
|
| -
|
| - Spannable computeSpannable(ir.TreeNode node) {
|
| - return new SourceSpan(
|
| - Uri.parse(node.location.file), node.fileOffset, node.fileOffset + 1);
|
| - }
|
| -
|
| - String computeMemberValue(ir.Member member);
|
| -
|
| - String computeNodeValue(ir.TreeNode node);
|
| -
|
| - void run(ir.Node root) {
|
| - root.accept(this);
|
| - }
|
| -
|
| - defaultNode(ir.Node node) {
|
| - node.visitChildren(this);
|
| - }
|
| -
|
| - defaultMember(ir.Member node) {
|
| - computeForMember(node);
|
| - super.defaultMember(node);
|
| - }
|
| -
|
| - visitMethodInvocation(ir.MethodInvocation node) {
|
| - computeForNode(node);
|
| - super.visitMethodInvocation(node);
|
| - }
|
| -
|
| - visitPropertyGet(ir.PropertyGet node) {
|
| - computeForNode(node);
|
| - super.visitPropertyGet(node);
|
| - }
|
| -
|
| - visitVariableDeclaration(ir.VariableDeclaration node) {
|
| - computeForNode(node);
|
| - super.visitVariableDeclaration(node);
|
| - }
|
| -
|
| - visitFunctionDeclaration(ir.FunctionDeclaration node) {
|
| - computeForNode(node);
|
| - super.visitFunctionDeclaration(node);
|
| - }
|
| -
|
| - visitFunctionExpression(ir.FunctionExpression node) {
|
| - computeForNode(node);
|
| - super.visitFunctionExpression(node);
|
| - }
|
| -}
|
|
|