| 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 {
|
|
|