Index: tests/compiler/dart2js/serialization/helper.dart |
diff --git a/tests/compiler/dart2js/serialization/helper.dart b/tests/compiler/dart2js/serialization/helper.dart |
index c7719b317580624c2a5d7a80f5162c1473791e1e..095915bd8fd0cdd9459a8160ada0ab448c2f882f 100644 |
--- a/tests/compiler/dart2js/serialization/helper.dart |
+++ b/tests/compiler/dart2js/serialization/helper.dart |
@@ -103,11 +103,14 @@ Serializer serialize( |
assert(compiler.serialization.supportSerialization); |
Serializer serializer = new Serializer(); |
- serializer.plugins.add(compiler.backend.serialization.serializer); |
- serializer.plugins.add(new ResolutionImpactSerializer(compiler.resolution)); |
+ SerializerPlugin backendSerializer = |
+ compiler.backend.serialization.serializer; |
+ serializer.plugins.add(backendSerializer); |
+ serializer.plugins.add(new ResolutionImpactSerializer( |
+ compiler.resolution, backendSerializer)); |
if (serializeResolvedAst) { |
- serializer.plugins.add( |
- new ResolvedAstSerializerPlugin(compiler.resolution, compiler.backend)); |
+ serializer.plugins.add(new ResolvedAstSerializerPlugin( |
+ compiler.resolution, backendSerializer)); |
} |
for (LibraryElement library in libraries) { |
@@ -137,28 +140,34 @@ const String WORLD_IMPACT_TAG = 'worldImpact'; |
class ResolutionImpactSerializer extends SerializerPlugin { |
final Resolution resolution; |
+ final SerializerPlugin nativeDataSerializer; |
- ResolutionImpactSerializer(this.resolution); |
+ ResolutionImpactSerializer(this.resolution, this.nativeDataSerializer); |
@override |
void onElement(Element element, ObjectEncoder createEncoder(String tag)) { |
if (resolution.hasBeenResolved(element)) { |
ResolutionImpact impact = resolution.getResolutionImpact(element); |
ObjectEncoder encoder = createEncoder(WORLD_IMPACT_TAG); |
- new ImpactSerializer(element, encoder).serialize(impact); |
+ new ImpactSerializer(element, encoder, nativeDataSerializer) |
+ .serialize(impact); |
} |
} |
} |
class ResolutionImpactDeserializer extends DeserializerPlugin { |
Map<Element, ResolutionImpact> impactMap = <Element, ResolutionImpact>{}; |
+ final DeserializerPlugin nativeDataDeserializer; |
+ |
+ ResolutionImpactDeserializer(this.nativeDataDeserializer); |
@override |
void onElement(Element element, ObjectDecoder getDecoder(String tag)) { |
ObjectDecoder decoder = getDecoder(WORLD_IMPACT_TAG); |
if (decoder != null) { |
impactMap[element] = |
- ImpactDeserializer.deserializeImpact(element, decoder); |
+ ImpactDeserializer.deserializeImpact( |
+ element, decoder, nativeDataDeserializer); |
} |
} |
} |
@@ -167,34 +176,53 @@ class _DeserializerSystem extends DeserializerSystem { |
final Compiler _compiler; |
final Deserializer _deserializer; |
final List<LibraryElement> deserializedLibraries = <LibraryElement>[]; |
- final ResolutionImpactDeserializer _resolutionImpactDeserializer = |
- new ResolutionImpactDeserializer(); |
+ final ResolutionImpactDeserializer _resolutionImpactDeserializer; |
final ResolvedAstDeserializerPlugin _resolvedAstDeserializer; |
final ImpactTransformer _impactTransformer; |
- final bool _deserializeResolvedAst; |
+ final bool deserializeResolvedAst; |
- _DeserializerSystem( |
+ factory _DeserializerSystem( |
Compiler compiler, |
- this._deserializer, |
- this._impactTransformer, |
- {bool deserializeResolvedAst: false}) |
- : this._compiler = compiler, |
- this._deserializeResolvedAst = deserializeResolvedAst, |
- this._resolvedAstDeserializer = deserializeResolvedAst |
- ? new ResolvedAstDeserializerPlugin( |
- compiler.parsingContext, compiler.backend) : null { |
- _deserializer.plugins.add(_resolutionImpactDeserializer); |
- if (_deserializeResolvedAst) { |
- _deserializer.plugins.add(_resolvedAstDeserializer); |
+ Deserializer deserializer, |
+ ImpactTransformer impactTransformer, |
+ {bool deserializeResolvedAst: false}) { |
+ List<DeserializerPlugin> plugins = <DeserializerPlugin>[]; |
+ DeserializerPlugin backendDeserializer = |
+ compiler.backend.serialization.deserializer; |
+ deserializer.plugins.add(backendDeserializer); |
+ ResolutionImpactDeserializer resolutionImpactDeserializer = |
+ new ResolutionImpactDeserializer(backendDeserializer); |
+ deserializer.plugins.add(resolutionImpactDeserializer); |
+ ResolvedAstDeserializerPlugin resolvedAstDeserializer; |
+ if (deserializeResolvedAst) { |
+ resolvedAstDeserializer = new ResolvedAstDeserializerPlugin( |
+ compiler.parsingContext, backendDeserializer); |
+ deserializer.plugins.add(resolvedAstDeserializer); |
} |
+ return new _DeserializerSystem._( |
+ compiler, |
+ deserializer, |
+ impactTransformer, |
+ resolutionImpactDeserializer, |
+ resolvedAstDeserializer, |
+ deserializeResolvedAst: deserializeResolvedAst); |
} |
+ _DeserializerSystem._( |
+ this._compiler, |
+ this._deserializer, |
+ this._impactTransformer, |
+ this._resolutionImpactDeserializer, |
+ this._resolvedAstDeserializer, |
+ {this.deserializeResolvedAst: false}); |
+ |
+ |
@override |
Future<LibraryElement> readLibrary(Uri resolvedUri) { |
LibraryElement library = _deserializer.lookupLibrary(resolvedUri); |
if (library != null) { |
deserializedLibraries.add(library); |
- if (_deserializeResolvedAst) { |
+ if (deserializeResolvedAst) { |
return Future.forEach(library.compilationUnits, |
(CompilationUnitElement compilationUnit) { |
ScriptZ script = compilationUnit.script; |
@@ -274,9 +302,9 @@ const String RESOLVED_AST_TAG = 'resolvedAst'; |
class ResolvedAstSerializerPlugin extends SerializerPlugin { |
final Resolution resolution; |
- final Backend backend; |
+ final SerializerPlugin nativeDataSerializer; |
- ResolvedAstSerializerPlugin(this.resolution, this.backend); |
+ ResolvedAstSerializerPlugin(this.resolution, this.nativeDataSerializer); |
@override |
void onElement(Element element, ObjectEncoder createEncoder(String tag)) { |
@@ -290,14 +318,14 @@ class ResolvedAstSerializerPlugin extends SerializerPlugin { |
new ResolvedAstSerializer( |
objectEncoder, |
resolvedAst, |
- backend.serialization.serializer).serialize(); |
+ nativeDataSerializer).serialize(); |
} |
} |
} |
class ResolvedAstDeserializerPlugin extends DeserializerPlugin { |
final ParsingContext parsingContext; |
- final Backend backend; |
+ final DeserializerPlugin nativeDataDeserializer; |
final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{}; |
Map<ExecutableElement, ResolvedAst> _resolvedAstMap = |
@@ -306,7 +334,8 @@ class ResolvedAstDeserializerPlugin extends DeserializerPlugin { |
<MemberElement, ObjectDecoder>{}; |
Map<Uri, Token> beginTokenMap = <Uri, Token>{}; |
- ResolvedAstDeserializerPlugin(this.parsingContext, this.backend); |
+ ResolvedAstDeserializerPlugin( |
+ this.parsingContext, this.nativeDataDeserializer); |
bool hasResolvedAst(ExecutableElement element) { |
return _resolvedAstMap.containsKey(element) || |
@@ -320,7 +349,7 @@ class ResolvedAstDeserializerPlugin extends DeserializerPlugin { |
if (decoder != null) { |
ResolvedAstDeserializer.deserialize( |
element.memberContext, decoder, parsingContext, findToken, |
- backend.serialization.deserializer, |
+ nativeDataDeserializer, |
_resolvedAstMap); |
_decoderMap.remove(element); |
resolvedAst = _resolvedAstMap[element]; |