| 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);
 | 
| 
 |