Index: pkg/compiler/lib/src/enqueue.dart |
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart |
index ad1d3b973388bc1645642395d996d6c673f6265c..a68e3da8a999f763255025577e824a015564e2eb 100644 |
--- a/pkg/compiler/lib/src/enqueue.dart |
+++ b/pkg/compiler/lib/src/enqueue.dart |
@@ -54,7 +54,6 @@ class EnqueueTask extends CompilerTask { |
this, |
compiler.options, |
compiler.resolution, |
- compiler.enqueuerFilter, |
compiler.options.analyzeOnly && compiler.options.analyzeMain |
? const DirectEnqueuerStrategy() |
: const TreeShakingEnqueuerStrategy(), |
@@ -137,7 +136,6 @@ class ResolutionEnqueuer extends EnqueuerImpl { |
final CompilerTask task; |
final String name; |
final Resolution resolution; |
- final QueueFilter filter; |
final CompilerOptions options; |
final Backend backend; |
final GlobalDependencyRegistry globalDependencies; |
@@ -161,7 +159,6 @@ class ResolutionEnqueuer extends EnqueuerImpl { |
this.task, |
this.options, |
this.resolution, |
- this.filter, |
this.strategy, |
this.globalDependencies, |
Backend backend, |
@@ -243,7 +240,7 @@ class ResolutionEnqueuer extends EnqueuerImpl { |
} |
bool checkNoEnqueuedInvokedInstanceMethods() { |
- return filter.checkNoEnqueuedInvokedInstanceMethods(this); |
+ return strategy.checkEnqueuerConsistency(this); |
} |
void processInstantiatedClassMembers(ClassElement cls) { |
@@ -548,7 +545,7 @@ class ResolutionEnqueuer extends EnqueuerImpl { |
do { |
while (queue.isNotEmpty) { |
// TODO(johnniwinther): Find an optimal process order. |
- filter.processWorkItem(f, queue.removeLast()); |
+ strategy.processWorkItem(f, queue.removeLast()); |
} |
List recents = recentClasses.toList(growable: false); |
recentClasses.clear(); |
@@ -705,28 +702,6 @@ class ResolutionEnqueuer extends EnqueuerImpl { |
} |
} |
-/// Parameterizes filtering of which work items are enqueued. |
-class QueueFilter { |
- bool checkNoEnqueuedInvokedInstanceMethods(EnqueuerImpl enqueuer) { |
- enqueuer.task.measure(() { |
- // Run through the classes and see if we need to compile methods. |
- for (ClassElement classElement |
- in enqueuer.universe.directlyInstantiatedClasses) { |
- for (ClassElement currentClass = classElement; |
- currentClass != null; |
- currentClass = currentClass.superclass) { |
- enqueuer.processInstantiatedClassMembers(currentClass); |
- } |
- } |
- }); |
- return true; |
- } |
- |
- void processWorkItem(void f(WorkItem work), WorkItem work) { |
- f(work); |
- } |
-} |
- |
void removeFromSet(Map<String, Set<Element>> map, Element element) { |
Set<Element> set = map[element.name]; |
if (set == null) return; |
@@ -734,7 +709,6 @@ void removeFromSet(Map<String, Set<Element>> map, Element element) { |
} |
/// Strategy used by the enqueuer to populate the world. |
-// TODO(johnniwinther): Merge this interface with [QueueFilter]. |
class EnqueuerStrategy { |
const EnqueuerStrategy(); |
@@ -749,6 +723,27 @@ class EnqueuerStrategy { |
/// Process a dynamic use for a call site in live code. |
void processDynamicUse(EnqueuerImpl enqueuer, DynamicUse dynamicUse) {} |
+ |
+ /// Check enqueuer consistency after the queue has been closed. |
+ bool checkEnqueuerConsistency(EnqueuerImpl enqueuer) { |
+ enqueuer.task.measure(() { |
+ // Run through the classes and see if we need to enqueue more methods. |
+ for (ClassElement classElement |
+ in enqueuer.universe.directlyInstantiatedClasses) { |
+ for (ClassElement currentClass = classElement; |
+ currentClass != null; |
+ currentClass = currentClass.superclass) { |
+ enqueuer.processInstantiatedClassMembers(currentClass); |
+ } |
+ } |
+ }); |
+ return true; |
+ } |
+ |
+ /// Process [work] using [f]. |
+ void processWorkItem(void f(WorkItem work), WorkItem work) { |
+ f(work); |
+ } |
} |
/// Strategy that only enqueues directly used elements. |
@@ -762,7 +757,7 @@ class DirectEnqueuerStrategy extends EnqueuerStrategy { |
} |
/// Strategy used for tree-shaking. |
-class TreeShakingEnqueuerStrategy implements EnqueuerStrategy { |
+class TreeShakingEnqueuerStrategy extends EnqueuerStrategy { |
const TreeShakingEnqueuerStrategy(); |
@override |