| Index: pkg/compiler/lib/src/serialization/impact_serialization.dart
|
| diff --git a/pkg/compiler/lib/src/serialization/impact_serialization.dart b/pkg/compiler/lib/src/serialization/impact_serialization.dart
|
| index 04168888bf2d19abd0b074fd6b16b61400af9f7e..7e74259bf912d0b1411128905fa9437cfd44294c 100644
|
| --- a/pkg/compiler/lib/src/serialization/impact_serialization.dart
|
| +++ b/pkg/compiler/lib/src/serialization/impact_serialization.dart
|
| @@ -4,6 +4,7 @@
|
|
|
| library dart2js.serialization.impact;
|
|
|
| +import '../common.dart';
|
| import '../common/resolution.dart';
|
| import '../constants/expressions.dart';
|
| import '../dart_types.dart';
|
| @@ -19,12 +20,13 @@ import 'serialization_util.dart';
|
| /// Visitor that serializes a [ResolutionImpact] object using an
|
| /// [ObjectEncoder].
|
| class ImpactSerializer implements WorldImpactVisitor {
|
| + final Element element;
|
| final ObjectEncoder objectEncoder;
|
| final ListEncoder staticUses;
|
| final ListEncoder dynamicUses;
|
| final ListEncoder typeUses;
|
|
|
| - ImpactSerializer(ObjectEncoder objectEncoder)
|
| + ImpactSerializer(this.element, ObjectEncoder objectEncoder)
|
| : this.objectEncoder = objectEncoder,
|
| staticUses = objectEncoder.createList(Key.STATIC_USES),
|
| dynamicUses = objectEncoder.createList(Key.DYNAMIC_USES),
|
| @@ -64,14 +66,10 @@ class ImpactSerializer implements WorldImpactVisitor {
|
|
|
| @override
|
| void visitStaticUse(StaticUse staticUse) {
|
| - if (staticUse.element.isGenerativeConstructor &&
|
| - staticUse.element.enclosingClass.isUnnamedMixinApplication) {
|
| - // TODO(johnniwinther): Handle static use of forwarding constructors.
|
| - return;
|
| - }
|
| ObjectEncoder object = staticUses.createObject();
|
| object.setEnum(Key.KIND, staticUse.kind);
|
| - object.setElement(Key.ELEMENT, staticUse.element);
|
| + serializeElementReference(
|
| + element, Key.ELEMENT, Key.NAME, object, staticUse.element);
|
| }
|
|
|
| @override
|
| @@ -95,29 +93,35 @@ class DeserializedResolutionImpact extends WorldImpact
|
| final Iterable<TypeUse> typeUses;
|
|
|
| DeserializedResolutionImpact(
|
| - {this.constSymbolNames,
|
| - this.constantLiterals,
|
| - this.dynamicUses,
|
| + {this.constSymbolNames: const <String>[],
|
| + this.constantLiterals: const <ConstantExpression>[],
|
| + this.dynamicUses: const <DynamicUse>[],
|
| EnumSet<Feature> features,
|
| - this.listLiterals,
|
| - this.mapLiterals,
|
| - this.staticUses,
|
| - this.typeUses})
|
| + this.listLiterals: const <ListLiteralUse>[],
|
| + this.mapLiterals: const <MapLiteralUse>[],
|
| + this.staticUses: const <StaticUse>[],
|
| + this.typeUses: const <TypeUse>[]})
|
| : this._features = features;
|
|
|
| - Iterable<Feature> get features => _features.iterable(Feature.values);
|
| + Iterable<Feature> get features {
|
| + return _features != null
|
| + ? _features.iterable(Feature.values)
|
| + : const <Feature>[];
|
| + }
|
| }
|
|
|
| class ImpactDeserializer {
|
| /// Deserializes a [WorldImpact] from [objectDecoder].
|
| - static ResolutionImpact deserializeImpact(ObjectDecoder objectDecoder) {
|
| + static ResolutionImpact deserializeImpact(
|
| + Element element, ObjectDecoder objectDecoder) {
|
| ListDecoder staticUseDecoder = objectDecoder.getList(Key.STATIC_USES);
|
| List<StaticUse> staticUses = <StaticUse>[];
|
| for (int index = 0; index < staticUseDecoder.length; index++) {
|
| ObjectDecoder object = staticUseDecoder.getObject(index);
|
| StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values);
|
| - Element element = object.getElement(Key.ELEMENT);
|
| - staticUses.add(new StaticUse.internal(element, kind));
|
| + Element usedElement =
|
| + deserializeElementReference(element, Key.ELEMENT, Key.NAME, object);
|
| + staticUses.add(new StaticUse.internal(usedElement, kind));
|
| }
|
|
|
| ListDecoder dynamicUseDecoder = objectDecoder.getList(Key.DYNAMIC_USES);
|
|
|