| Index: pkg/compiler/lib/src/js_backend/backend.dart
 | 
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
 | 
| index 40c11cac147899c33c317ea8aed085d157d44a87..e04aa6c8a991b49aea15f26be89224a53ecfd80c 100644
 | 
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
 | 
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
 | 
| @@ -449,9 +449,6 @@ class JavaScriptBackend extends Backend {
 | 
|    /// these constants must be registered.
 | 
|    final List<Dependency> metadataConstants = <Dependency>[];
 | 
|  
 | 
| -  /// Set of elements for which metadata has been registered as dependencies.
 | 
| -  final Set<Element> _registeredMetadata = new Set<Element>();
 | 
| -
 | 
|    /// List of elements that the user has requested for reflection.
 | 
|    final Set<Element> targetsUsed = new Set<Element>();
 | 
|  
 | 
| @@ -1057,6 +1054,14 @@ class JavaScriptBackend extends Backend {
 | 
|      }
 | 
|    }
 | 
|  
 | 
| +  void registerMetadataConstant(MetadataAnnotation metadata,
 | 
| +      Element annotatedElement, Registry registry) {
 | 
| +    assert(registry.isForResolution);
 | 
| +    ConstantValue constant = constants.getConstantValueForMetadata(metadata);
 | 
| +    registerCompileTimeConstant(constant, registry);
 | 
| +    metadataConstants.add(new Dependency(constant, annotatedElement));
 | 
| +  }
 | 
| +
 | 
|    void registerInstantiatedClass(
 | 
|        ClassElement cls, Enqueuer enqueuer, Registry registry) {
 | 
|      _processClass(cls, enqueuer, registry);
 | 
| @@ -1267,7 +1272,6 @@ class JavaScriptBackend extends Backend {
 | 
|      super.onResolutionComplete();
 | 
|      computeMembersNeededForReflection();
 | 
|      rti.computeClassesNeedingRti();
 | 
| -    _registeredMetadata.clear();
 | 
|    }
 | 
|  
 | 
|    onTypeInferenceComplete() {
 | 
| @@ -2300,60 +2304,17 @@ class JavaScriptBackend extends Backend {
 | 
|        reporter.log('Retaining metadata.');
 | 
|  
 | 
|        compiler.libraryLoader.libraries.forEach(retainMetadataOf);
 | 
| -
 | 
| -      if (enqueuer.isResolutionQueue) {
 | 
| -        /// Register the constant value of [metadata] as live in resolution.
 | 
| -        void registerMetadataConstant(MetadataAnnotation metadata) {
 | 
| -          ConstantValue constant =
 | 
| -              constants.getConstantValueForMetadata(metadata);
 | 
| -          Dependency dependency =
 | 
| -              new Dependency(constant, metadata.annotatedElement);
 | 
| -          metadataConstants.add(dependency);
 | 
| -          registerCompileTimeConstant(dependency.constant,
 | 
| -              new EagerRegistry('EagerRegistry for ${dependency}', enqueuer));
 | 
| -        }
 | 
| -
 | 
| -        // TODO(johnniwinther): We should have access to all recently processed
 | 
| -        // elements and process these instead.
 | 
| -        processMetadata(compiler.enqueuer.resolution.processedElements,
 | 
| -            registerMetadataConstant);
 | 
| -      } else {
 | 
| -        for (Dependency dependency in metadataConstants) {
 | 
| -          registerCompileTimeConstant(dependency.constant,
 | 
| -              new EagerRegistry('EagerRegistry for ${dependency}', enqueuer));
 | 
| -        }
 | 
| +      for (Dependency dependency in metadataConstants) {
 | 
| +        registerCompileTimeConstant(dependency.constant,
 | 
| +            new EagerRegistry('EagerRegistry for ${dependency}', enqueuer));
 | 
| +      }
 | 
| +      if (!enqueuer.isResolutionQueue) {
 | 
|          metadataConstants.clear();
 | 
|        }
 | 
|      }
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
| -  /// Call [registerMetadataConstant] on all metadata from [elements].
 | 
| -  void processMetadata(Iterable<Element> elements,
 | 
| -      void onMetadata(MetadataAnnotation metadata)) {
 | 
| -    void processLibraryMetadata(LibraryElement library) {
 | 
| -      if (_registeredMetadata.add(library)) {
 | 
| -        library.metadata.forEach(onMetadata);
 | 
| -        for (ImportElement import in library.imports) {
 | 
| -          import.metadata.forEach(onMetadata);
 | 
| -        }
 | 
| -      }
 | 
| -    }
 | 
| -
 | 
| -    void processElementMetadata(Element element) {
 | 
| -      if (_registeredMetadata.add(element)) {
 | 
| -        element.metadata.forEach(onMetadata);
 | 
| -        if (element.enclosingClass != null) {
 | 
| -          processElementMetadata(element.enclosingClass);
 | 
| -        } else {
 | 
| -          processLibraryMetadata(element.library);
 | 
| -        }
 | 
| -      }
 | 
| -    }
 | 
| -
 | 
| -    elements.forEach(processElementMetadata);
 | 
| -  }
 | 
| -
 | 
|    void onQueueClosed() {
 | 
|      lookupMapAnalysis.onQueueClosed();
 | 
|      jsInteropAnalysis.onQueueClosed();
 | 
| @@ -3076,8 +3037,6 @@ class Dependency {
 | 
|    final Element annotatedElement;
 | 
|  
 | 
|    const Dependency(this.constant, this.annotatedElement);
 | 
| -
 | 
| -  String toString() => '$annotatedElement:${constant.toStructuredText()}';
 | 
|  }
 | 
|  
 | 
|  class JavaScriptImpactStrategy extends ImpactStrategy {
 | 
| 
 |