| Index: tests/compiler/dart2js/serialization_test.dart
|
| diff --git a/tests/compiler/dart2js/serialization_test.dart b/tests/compiler/dart2js/serialization_test.dart
|
| deleted file mode 100644
|
| index 98bc955dc55955bdd8255b83d3241556b65d1cd3..0000000000000000000000000000000000000000
|
| --- a/tests/compiler/dart2js/serialization_test.dart
|
| +++ /dev/null
|
| @@ -1,704 +0,0 @@
|
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -library dart2js.serialization_test;
|
| -
|
| -import 'dart:io';
|
| -import 'memory_compiler.dart';
|
| -import 'package:async_helper/async_helper.dart';
|
| -import 'package:compiler/src/commandline_options.dart';
|
| -import 'package:compiler/src/common.dart';
|
| -import 'package:compiler/src/constants/constructors.dart';
|
| -import 'package:compiler/src/constants/expressions.dart';
|
| -import 'package:compiler/src/dart_types.dart';
|
| -import 'package:compiler/src/compiler.dart';
|
| -import 'package:compiler/src/diagnostics/invariant.dart';
|
| -import 'package:compiler/src/elements/elements.dart';
|
| -import 'package:compiler/src/elements/visitor.dart';
|
| -import 'package:compiler/src/ordered_typeset.dart';
|
| -import 'package:compiler/src/serialization/element_serialization.dart';
|
| -import 'package:compiler/src/serialization/equivalence.dart';
|
| -import 'package:compiler/src/serialization/json_serializer.dart';
|
| -import 'package:compiler/src/serialization/serialization.dart';
|
| -import 'serialization_test_helper.dart';
|
| -
|
| -main(List<String> arguments) {
|
| - // Ensure that we can print out constant expressions.
|
| - DEBUG_MODE = true;
|
| -
|
| - Uri entryPoint;
|
| - String outPath;
|
| - bool prettyPrint = false;
|
| - for (String arg in arguments) {
|
| - if (arg.startsWith('--')) {
|
| - if (arg.startsWith('--out=')) {
|
| - outPath = arg.substring('--out='.length);
|
| - } else if (arg == '--pretty-print') {
|
| - prettyPrint = true;
|
| - } else {
|
| - print("Unknown option $arg");
|
| - }
|
| - } else {
|
| - if (entryPoint != null) {
|
| - print("Multiple entrypoints is not supported.");
|
| - }
|
| - entryPoint = Uri.parse(arg);
|
| - }
|
| - }
|
| - if (entryPoint == null) {
|
| - entryPoint = Uri.parse('dart:core');
|
| - }
|
| - asyncTest(() async {
|
| - CompilationResult result = await runCompiler(
|
| - entryPoint: entryPoint, options: [Flags.analyzeAll]);
|
| - Compiler compiler = result.compiler;
|
| - testSerialization(compiler.libraryLoader.libraries,
|
| - outPath: outPath,
|
| - prettyPrint: prettyPrint);
|
| - });
|
| -}
|
| -
|
| -void testSerialization(Iterable<LibraryElement> libraries1,
|
| - {String outPath,
|
| - bool prettyPrint}) {
|
| - Serializer serializer = new Serializer();
|
| - for (LibraryElement library1 in libraries1) {
|
| - serializer.serialize(library1);
|
| - }
|
| - String text = serializer.toText(const JsonSerializationEncoder());
|
| - String outText = text;
|
| - if (prettyPrint) {
|
| - outText = serializer.prettyPrint();
|
| - }
|
| - if (outPath != null) {
|
| - new File(outPath).writeAsStringSync(outText);
|
| - } else if (prettyPrint) {
|
| - print(outText);
|
| - }
|
| -
|
| - Deserializer deserializer = new Deserializer.fromText(
|
| - new DeserializationContext(),
|
| - text, const JsonSerializationDecoder());
|
| - List<LibraryElement> libraries2 = <LibraryElement>[];
|
| - for (LibraryElement library1 in libraries1) {
|
| - LibraryElement library2 =
|
| - deserializer.lookupLibrary(library1.canonicalUri);
|
| - if (library2 == null) {
|
| - throw new ArgumentError('No library ${library1.canonicalUri} found.');
|
| - }
|
| - checkLibraryContent('library1', 'library2', 'library', library1, library2);
|
| - libraries2.add(library2);
|
| - }
|
| -
|
| - Serializer serializer2 = new Serializer();
|
| - for (LibraryElement library2 in libraries2) {
|
| - serializer2.serialize(library2);
|
| - }
|
| - String text2 = serializer2.toText(const JsonSerializationEncoder());
|
| -
|
| - Deserializer deserializer3 = new Deserializer.fromText(
|
| - new DeserializationContext(),
|
| - text2, const JsonSerializationDecoder());
|
| - for (LibraryElement library1 in libraries1) {
|
| - LibraryElement library2 =
|
| - deserializer.lookupLibrary(library1.canonicalUri);
|
| - if (library2 == null) {
|
| - throw new ArgumentError('No library ${library1.canonicalUri} found.');
|
| - }
|
| - LibraryElement library3 =
|
| - deserializer3.lookupLibrary(library1.canonicalUri);
|
| - if (library3 == null) {
|
| - throw new ArgumentError('No library ${library1.canonicalUri} found.');
|
| - }
|
| - checkLibraryContent('library1', 'library3', 'library', library1, library3);
|
| - checkLibraryContent('library2', 'library3', 'library', library2, library3);
|
| - }
|
| -}
|
| -
|
| -/// Check the equivalence of [library1] and [library2] and their content.
|
| -///
|
| -/// Uses [object1], [object2] and [property] to provide context for failures.
|
| -checkLibraryContent(
|
| - Object object1, object2, String property,
|
| - LibraryElement library1, LibraryElement library2) {
|
| - checkElementProperties(object1, object2, property, library1, library2);
|
| -}
|
| -
|
| -/// Check the equivalence of [element1] and [element2] and their properties.
|
| -///
|
| -/// Uses [object1], [object2] and [property] to provide context for failures.
|
| -checkElementProperties(
|
| - Object object1, object2, String property,
|
| - Element element1, Element element2) {
|
| - const ElementPropertyEquivalence().visit(element1, element2);
|
| -}
|
| -
|
| -/// Checks the equivalence of [constructor1] and [constructor2].
|
| -void constantConstructorEquivalence(ConstantConstructor constructor1,
|
| - ConstantConstructor constructor2) {
|
| - const ConstantConstructorEquivalence().visit(constructor1, constructor2);
|
| -}
|
| -
|
| -/// Visitor that checks the equivalence of [ConstantConstructor]s.
|
| -class ConstantConstructorEquivalence
|
| - extends ConstantConstructorVisitor<dynamic, ConstantConstructor> {
|
| - const ConstantConstructorEquivalence();
|
| -
|
| - @override
|
| - void visit(ConstantConstructor constructor1,
|
| - ConstantConstructor constructor2) {
|
| - if (identical(constructor1, constructor2)) return;
|
| - check(constructor1, constructor2, 'kind',
|
| - constructor1.kind, constructor2.kind);
|
| - constructor1.accept(this, constructor2);
|
| - }
|
| -
|
| - @override
|
| - visitGenerative(
|
| - GenerativeConstantConstructor constructor1,
|
| - GenerativeConstantConstructor constructor2) {
|
| - checkTypes(
|
| - constructor1, constructor2, 'type',
|
| - constructor1.type, constructor2.type);
|
| - check(constructor1, constructor2, 'defaultValues.length',
|
| - constructor1.defaultValues.length,
|
| - constructor2.defaultValues.length);
|
| - constructor1.defaultValues.forEach((k, v) {
|
| - checkConstants(
|
| - constructor1, constructor2, 'defaultValue[$k]',
|
| - v, constructor2.defaultValues[k]);
|
| - });
|
| - check(constructor1, constructor2, 'fieldMap.length',
|
| - constructor1.fieldMap.length,
|
| - constructor2.fieldMap.length);
|
| - constructor1.fieldMap.forEach((k1, v1) {
|
| - bool matched = false;
|
| - constructor2.fieldMap.forEach((k2, v2) {
|
| - if (k1.name == k2.name &&
|
| - k1.library.canonicalUri == k2.library.canonicalUri) {
|
| - checkElementIdentities(
|
| - constructor1, constructor2, 'fieldMap[${k1.name}].key', k1, k2);
|
| - checkConstants(
|
| - constructor1, constructor2, 'fieldMap[${k1.name}].value', v1, v2);
|
| - matched = true;
|
| - }
|
| - });
|
| - if (!matched) {
|
| - throw 'Unmatched field $k1 = $v1';
|
| - }
|
| - });
|
| - checkConstants(
|
| - constructor1, constructor2, 'superConstructorInvocation',
|
| - constructor1.superConstructorInvocation,
|
| - constructor2.superConstructorInvocation);
|
| - }
|
| -
|
| - @override
|
| - visitRedirectingFactory(
|
| - RedirectingFactoryConstantConstructor constructor1,
|
| - RedirectingFactoryConstantConstructor constructor2) {
|
| - checkConstants(
|
| - constructor1, constructor2, 'targetConstructorInvocation',
|
| - constructor1.targetConstructorInvocation,
|
| - constructor2.targetConstructorInvocation);
|
| - }
|
| -
|
| - @override
|
| - visitRedirectingGenerative(
|
| - RedirectingGenerativeConstantConstructor constructor1,
|
| - RedirectingGenerativeConstantConstructor constructor2) {
|
| - check(constructor1, constructor2, 'defaultValues.length',
|
| - constructor1.defaultValues.length,
|
| - constructor2.defaultValues.length);
|
| - constructor1.defaultValues.forEach((k, v) {
|
| - checkConstants(
|
| - constructor1, constructor2, 'defaultValue[$k]',
|
| - v, constructor2.defaultValues[k]);
|
| - });
|
| - checkConstants(
|
| - constructor1, constructor2, 'thisConstructorInvocation',
|
| - constructor1.thisConstructorInvocation,
|
| - constructor2.thisConstructorInvocation);
|
| - }
|
| -}
|
| -
|
| -/// Check the equivalence of the two lists of elements, [list1] and [list2].
|
| -///
|
| -/// Uses [object1], [object2] and [property] to provide context for failures.
|
| -checkElementLists(Object object1, Object object2, String property,
|
| - Iterable<Element> list1, Iterable<Element> list2) {
|
| - checkListEquivalence(object1, object2, property,
|
| - list1, list2, checkElementProperties);
|
| -}
|
| -
|
| -/// Visitor that checks for equivalence of [Element] properties.
|
| -class ElementPropertyEquivalence extends BaseElementVisitor<dynamic, Element> {
|
| - const ElementPropertyEquivalence();
|
| -
|
| - void visit(Element element1, Element element2) {
|
| - if (element1 == null && element2 == null) return;
|
| - element1 = element1.declaration;
|
| - element2 = element2.declaration;
|
| - if (element1 == element2) return;
|
| - check(element1, element2, 'kind', element1.kind, element2.kind);
|
| - element1.accept(this, element2);
|
| - check(element1, element2, 'isSynthesized',
|
| - element1.isSynthesized, element2.isSynthesized);
|
| - }
|
| -
|
| - @override
|
| - void visitElement(Element e, Element arg) {
|
| - throw new UnsupportedError("Unsupported element $e");
|
| - }
|
| -
|
| - @override
|
| - void visitLibraryElement(LibraryElement element1, LibraryElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name', element1.name, element2.name);
|
| - check(element1, element2, 'libraryName',
|
| - element1.libraryName, element2.libraryName);
|
| - visitMembers(element1, element2);
|
| - visit(element1.entryCompilationUnit, element2.entryCompilationUnit);
|
| -
|
| - checkElementLists(
|
| - element1, element2, 'compilationUnits',
|
| - LibrarySerializer.getCompilationUnits(element1),
|
| - LibrarySerializer.getCompilationUnits(element2));
|
| -
|
| - checkElementListIdentities(
|
| - element1, element2, 'imports',
|
| - LibrarySerializer.getImports(element1),
|
| - LibrarySerializer.getImports(element2));
|
| - checkElementListIdentities(
|
| - element1, element2, 'exports', element1.exports, element2.exports);
|
| -
|
| - checkElementListIdentities(
|
| - element1, element2, 'importScope',
|
| - LibrarySerializer.getImportedElements(element1),
|
| - LibrarySerializer.getImportedElements(element2));
|
| -
|
| - checkElementListIdentities(
|
| - element1, element2, 'exportScope',
|
| - LibrarySerializer.getExportedElements(element1),
|
| - LibrarySerializer.getExportedElements(element2));
|
| - }
|
| -
|
| - @override
|
| - void visitCompilationUnitElement(CompilationUnitElement element1,
|
| - CompilationUnitElement element2) {
|
| - check(element1, element2,
|
| - 'name',
|
| - element1.name, element2.name);
|
| - checkElementIdentities(
|
| - element1, element2, 'library',
|
| - element1.library, element2.library);
|
| - check(element1, element2,
|
| - 'script.resourceUri',
|
| - element1.script.resourceUri, element2.script.resourceUri);
|
| - List<Element> members1 = <Element>[];
|
| - List<Element> members2 = <Element>[];
|
| - element1.forEachLocalMember((Element member) {
|
| - members1.add(member);
|
| - });
|
| - element2.forEachLocalMember((Element member) {
|
| - members2.add(member);
|
| - });
|
| - checkElementListIdentities(
|
| - element1, element2, 'localMembers', members1, members2);
|
| - }
|
| -
|
| - void visitMembers(ScopeContainerElement element1,
|
| - ScopeContainerElement element2) {
|
| - Set<String> names = new Set<String>();
|
| - Iterable<Element> members1 = element1.isLibrary
|
| - ? LibrarySerializer.getMembers(element1)
|
| - : ClassSerializer.getMembers(element1);
|
| - Iterable<Element> members2 = element2.isLibrary
|
| - ? LibrarySerializer.getMembers(element2)
|
| - : ClassSerializer.getMembers(element2);
|
| - for (Element member in members1) {
|
| - names.add(member.name);
|
| - }
|
| - for (Element member in members2) {
|
| - names.add(member.name);
|
| - }
|
| - element1 = element1.implementation;
|
| - element2 = element2.implementation;
|
| - for (String name in names) {
|
| - Element member1 = element1.localLookup(name);
|
| - Element member2 = element2.localLookup(name);
|
| - if (member1 == null) {
|
| - String message =
|
| - 'Missing member for $member2 in\n ${members1.join('\n ')}';
|
| - if (member2.isAbstractField) {
|
| - // TODO(johnniwinther): Ensure abstract fields are handled correctly.
|
| - //print(message);
|
| - continue;
|
| - } else {
|
| - throw message;
|
| - }
|
| - }
|
| - if (member2 == null) {
|
| - String message =
|
| - 'Missing member for $member1 in\n ${members2.join('\n ')}';
|
| - if (member1.isAbstractField) {
|
| - // TODO(johnniwinther): Ensure abstract fields are handled correctly.
|
| - //print(message);
|
| - continue;
|
| - } else {
|
| - throw message;
|
| - }
|
| - }
|
| - visit(member1, member2);
|
| - }
|
| - }
|
| -
|
| - @override
|
| - void visitClassElement(ClassElement element1, ClassElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name',
|
| - element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkElementIdentities(
|
| - element1, element2, 'library',
|
| - element1.library, element2.library);
|
| - checkElementIdentities(
|
| - element1, element2, 'compilationUnit',
|
| - element1.compilationUnit, element2.compilationUnit);
|
| - check(element1, element2, 'isObject',
|
| - element1.isObject, element2.isObject);
|
| - checkTypeLists(element1, element2, 'typeVariables',
|
| - element1.typeVariables, element2.typeVariables);
|
| - check(element1, element2, 'isAbstract',
|
| - element1.isAbstract, element2.isAbstract);
|
| - check(element1, element2, 'isUnnamedMixinApplication',
|
| - element1.isUnnamedMixinApplication, element2.isUnnamedMixinApplication);
|
| - check(element1, element2, 'isEnumClass',
|
| - element1.isEnumClass, element2.isEnumClass);
|
| - if (element1.isEnumClass) {
|
| - EnumClassElement enum1 = element1;
|
| - EnumClassElement enum2 = element2;
|
| - checkElementLists(enum1, enum2, 'enumValues',
|
| - enum1.enumValues, enum2.enumValues);
|
| - }
|
| - if (!element1.isObject) {
|
| - checkTypes(element1, element2, 'supertype',
|
| - element1.supertype, element2.supertype);
|
| - }
|
| - check(element1, element2, 'hierarchyDepth',
|
| - element1.hierarchyDepth, element2.hierarchyDepth);
|
| - checkTypeLists(
|
| - element1, element2, 'allSupertypes',
|
| - element1.allSupertypes.toList(),
|
| - element2.allSupertypes.toList());
|
| - OrderedTypeSet typeSet1 = element1.allSupertypesAndSelf;
|
| - OrderedTypeSet typeSet2 = element1.allSupertypesAndSelf;
|
| - checkListEquivalence(
|
| - element1, element2, 'allSupertypes',
|
| - typeSet1.levelOffsets,
|
| - typeSet2.levelOffsets,
|
| - check);
|
| - check(element1, element2, 'allSupertypesAndSelf.levels',
|
| - typeSet1.levels, typeSet2.levels);
|
| - checkTypeLists(
|
| - element1, element2, 'supertypes',
|
| - typeSet1.supertypes.toList(),
|
| - typeSet2.supertypes.toList());
|
| - checkTypeLists(
|
| - element1, element2, 'types',
|
| - typeSet1.types.toList(),
|
| - typeSet2.types.toList());
|
| -
|
| - checkTypeLists(
|
| - element1, element2, 'interfaces',
|
| - element1.interfaces.toList(),
|
| - element2.interfaces.toList());
|
| -
|
| - List<ConstructorElement> getConstructors(ClassElement cls) {
|
| - return cls.implementation.constructors.map((c) => c.declaration).toList();
|
| - }
|
| -
|
| - checkElementLists(
|
| - element1, element2, 'constructors',
|
| - getConstructors(element1),
|
| - getConstructors(element2));
|
| -
|
| - visitMembers(element1, element2);
|
| - }
|
| -
|
| - @override
|
| - void visitFieldElement(FieldElement element1, FieldElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name',
|
| - element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkTypes(
|
| - element1, element2, 'type',
|
| - element1.type, element2.type);
|
| - check(element1, element2, 'isConst',
|
| - element1.isConst, element2.isConst);
|
| - check(element1, element2, 'isFinal',
|
| - element1.isFinal, element2.isFinal);
|
| - checkConstants(
|
| - element1, element2, 'constant',
|
| - element1.constant, element2.constant);
|
| - check(element1, element2, 'isTopLevel',
|
| - element1.isTopLevel, element2.isTopLevel);
|
| - check(element1, element2, 'isStatic',
|
| - element1.isStatic, element2.isStatic);
|
| - check(element1, element2, 'isInstanceMember',
|
| - element1.isInstanceMember, element2.isInstanceMember);
|
| -
|
| - checkElementIdentities(
|
| - element1, element2, 'library',
|
| - element1.library, element2.library);
|
| - checkElementIdentities(
|
| - element1, element2, 'compilationUnit',
|
| - element1.compilationUnit, element2.compilationUnit);
|
| - checkElementIdentities(
|
| - element1, element2, 'enclosingClass',
|
| - element1.enclosingClass, element2.enclosingClass);
|
| - }
|
| -
|
| - @override
|
| - void visitFunctionElement(FunctionElement element1,
|
| - FunctionElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name',
|
| - element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkTypes(
|
| - element1, element2, 'type',
|
| - element1.type, element2.type);
|
| - checkListEquivalence(
|
| - element1, element2, 'parameters',
|
| - element1.parameters, element2.parameters,
|
| - checkElementProperties);
|
| - check(element1, element2, 'isOperator',
|
| - element1.isOperator, element2.isOperator);
|
| - check(
|
| - element1, element2, 'asyncMarker',
|
| - element1.asyncMarker,
|
| - element2.asyncMarker);
|
| -
|
| - checkElementIdentities(
|
| - element1, element2, 'library',
|
| - element1.library, element2.library);
|
| - checkElementIdentities(
|
| - element1, element2, 'compilationUnit',
|
| - element1.compilationUnit, element2.compilationUnit);
|
| - checkElementIdentities(
|
| - element1, element2, 'enclosingClass',
|
| - element1.enclosingClass, element2.enclosingClass);
|
| -
|
| - check(
|
| - element1, element2, 'functionSignature.type',
|
| - element1.functionSignature.type,
|
| - element2.functionSignature.type,
|
| - areTypesEquivalent);
|
| - checkElementLists(
|
| - element1, element2, 'functionSignature.requiredParameters',
|
| - element1.functionSignature.requiredParameters,
|
| - element2.functionSignature.requiredParameters);
|
| - checkElementLists(
|
| - element1, element2, 'functionSignature.optionalParameters',
|
| - element1.functionSignature.optionalParameters,
|
| - element2.functionSignature.optionalParameters);
|
| - check(
|
| - element1, element2, 'functionSignature.requiredParameterCount',
|
| - element1.functionSignature.requiredParameterCount,
|
| - element2.functionSignature.requiredParameterCount);
|
| - check(
|
| - element1, element2, 'functionSignature.optionalParameterCount',
|
| - element1.functionSignature.optionalParameterCount,
|
| - element2.functionSignature.optionalParameterCount);
|
| - check(
|
| - element1, element2, 'functionSignature.optionalParametersAreNamed',
|
| - element1.functionSignature.optionalParametersAreNamed,
|
| - element2.functionSignature.optionalParametersAreNamed);
|
| - check(
|
| - element1, element2, 'functionSignature.hasOptionalParameters',
|
| - element1.functionSignature.hasOptionalParameters,
|
| - element2.functionSignature.hasOptionalParameters);
|
| - check(
|
| - element1, element2, 'functionSignature.parameterCount',
|
| - element1.functionSignature.parameterCount,
|
| - element2.functionSignature.parameterCount);
|
| - checkElementLists(
|
| - element1, element2, 'functionSignature.orderedOptionalParameters',
|
| - element1.functionSignature.orderedOptionalParameters,
|
| - element2.functionSignature.orderedOptionalParameters);
|
| - }
|
| -
|
| - @override
|
| - void visitConstructorElement(ConstructorElement element1,
|
| - ConstructorElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - checkElementIdentities(
|
| - element1, element2, 'enclosingClass',
|
| - element1.enclosingClass, element2.enclosingClass);
|
| - check(
|
| - element1, element2, 'name',
|
| - element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkListEquivalence(
|
| - element1, element2, 'parameters',
|
| - element1.parameters, element2.parameters,
|
| - checkElementProperties);
|
| - checkTypes(
|
| - element1, element2, 'type',
|
| - element1.type, element2.type);
|
| - check(element1, element2, 'isConst',
|
| - element1.isConst, element2.isConst);
|
| - check(element1, element2, 'isExternal',
|
| - element1.isExternal, element2.isExternal);
|
| - if (element1.isConst && !element1.isExternal) {
|
| - constantConstructorEquivalence(
|
| - element1.constantConstructor,
|
| - element2.constantConstructor);
|
| - }
|
| - check(element1, element2, 'isRedirectingGenerative',
|
| - element1.isRedirectingGenerative, element2.isRedirectingGenerative);
|
| - check(element1, element2, 'isRedirectingFactory',
|
| - element1.isRedirectingFactory, element2.isRedirectingFactory);
|
| - checkElementIdentities(element1, element2, 'effectiveTarget',
|
| - element1.effectiveTarget, element2.effectiveTarget);
|
| - checkElementIdentities(element1, element2, 'definingConstructor',
|
| - element1.definingConstructor, element2.definingConstructor);
|
| - check(
|
| - element1, element2, 'effectiveTargetType',
|
| - element1.computeEffectiveTargetType(element1.enclosingClass.thisType),
|
| - element2.computeEffectiveTargetType(element2.enclosingClass.thisType),
|
| - areTypesEquivalent);
|
| - checkElementIdentities(element1, element2, 'immediateRedirectionTarget',
|
| - element1.immediateRedirectionTarget,
|
| - element2.immediateRedirectionTarget);
|
| - checkElementIdentities(element1, element2, 'redirectionDeferredPrefix',
|
| - element1.redirectionDeferredPrefix, element2.redirectionDeferredPrefix);
|
| - }
|
| -
|
| - @override
|
| - void visitAbstractFieldElement(AbstractFieldElement element1,
|
| - AbstractFieldElement element2) {
|
| - visit(element1.getter, element2.getter);
|
| - visit(element1.setter, element2.setter);
|
| - }
|
| -
|
| - @override
|
| - void visitTypeVariableElement(TypeVariableElement element1,
|
| - TypeVariableElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name', element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - check(element1, element2, 'index', element1.index, element2.index);
|
| - checkTypes(
|
| - element1, element2, 'type',
|
| - element1.type, element2.type);
|
| - checkTypes(
|
| - element1, element2, 'bound',
|
| - element1.bound, element2.bound);
|
| - }
|
| -
|
| - @override
|
| - void visitTypedefElement(TypedefElement element1,
|
| - TypedefElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - check(element1, element2, 'name', element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkTypes(
|
| - element1, element2, 'alias',
|
| - element1.alias, element2.alias);
|
| - checkTypeLists(
|
| - element1, element2, 'typeVariables',
|
| - element1.typeVariables, element2.typeVariables);
|
| - checkElementIdentities(
|
| - element1, element2, 'library',
|
| - element1.library, element2.library);
|
| - checkElementIdentities(
|
| - element1, element2, 'compilationUnit',
|
| - element1.compilationUnit, element2.compilationUnit);
|
| - // TODO(johnniwinther): Check the equivalence of typedef parameters.
|
| - }
|
| -
|
| - @override
|
| - void visitParameterElement(ParameterElement element1,
|
| - ParameterElement element2) {
|
| - checkElementIdentities(null, null, null, element1, element2);
|
| - checkElementIdentities(
|
| - element1, element2, 'functionDeclaration',
|
| - element1.functionDeclaration, element2.functionDeclaration);
|
| - check(element1, element2, 'name', element1.name, element2.name);
|
| - check(element1, element2, 'sourcePosition',
|
| - element1.sourcePosition, element2.sourcePosition);
|
| - checkTypes(
|
| - element1, element2, 'type',
|
| - element1.type, element2.type);
|
| - check(
|
| - element1, element2, 'isOptional',
|
| - element1.isOptional, element2.isOptional);
|
| - check(
|
| - element1, element2, 'isNamed',
|
| - element1.isNamed, element2.isNamed);
|
| - check(
|
| - element1, element2, 'isFinal',
|
| - element1.isFinal, element2.isFinal);
|
| - check(element1, element2, 'name', element1.name, element2.name);
|
| - if (element1.isOptional) {
|
| - checkConstants(
|
| - element1, element2, 'constant',
|
| - element1.constant, element2.constant);
|
| - }
|
| - checkElementIdentities(
|
| - element1, element2, 'compilationUnit',
|
| - element1.compilationUnit, element2.compilationUnit);
|
| - }
|
| -
|
| - @override
|
| - void visitFieldParameterElement(InitializingFormalElement element1,
|
| - InitializingFormalElement element2) {
|
| - visitParameterElement(element1, element2);
|
| - checkElementIdentities(
|
| - element1, element2, 'fieldElement',
|
| - element1.fieldElement, element2.fieldElement);
|
| - }
|
| -
|
| - @override
|
| - void visitImportElement(ImportElement element1, ImportElement element2) {
|
| - check(element1, element2, 'uri', element1.uri, element2.uri);
|
| - check(
|
| - element1, element2, 'isDeferred',
|
| - element1.isDeferred, element2.isDeferred);
|
| - checkElementProperties(
|
| - element1, element2, 'prefix',
|
| - element1.prefix, element2.prefix);
|
| - checkElementIdentities(
|
| - element1, element2, 'importedLibrary',
|
| - element1.importedLibrary, element2.importedLibrary);
|
| - }
|
| -
|
| - @override
|
| - void visitExportElement(ExportElement element1, ExportElement element2) {
|
| - check(element1, element2, 'uri', element1.uri, element2.uri);
|
| - checkElementIdentities(
|
| - element1, element2, 'importedLibrary',
|
| - element1.exportedLibrary, element2.exportedLibrary);
|
| - }
|
| -
|
| - @override
|
| - void visitPrefixElement(PrefixElement element1, PrefixElement element2) {
|
| - check(
|
| - element1, element2, 'isDeferred',
|
| - element1.isDeferred, element2.isDeferred);
|
| - checkElementIdentities(
|
| - element1, element2, 'importedLibrary',
|
| - element1.deferredImport, element2.deferredImport);
|
| - // TODO(johnniwinther): Check members.
|
| - }
|
| -}
|
|
|