| Index: sdk/lib/_internal/compiler/implementation/enqueue.dart | 
| diff --git a/sdk/lib/_internal/compiler/implementation/enqueue.dart b/sdk/lib/_internal/compiler/implementation/enqueue.dart | 
| index 8c101a4ed2a9c447a1db7863277ba93f002fbbb7..a00c365e2d766fdf465c8ef3533ce6bba95218ff 100644 | 
| --- a/sdk/lib/_internal/compiler/implementation/enqueue.dart | 
| +++ b/sdk/lib/_internal/compiler/implementation/enqueue.dart | 
| @@ -40,7 +40,7 @@ abstract class Enqueuer { | 
| = new Map<String, Set<Element>>(); | 
| final Map<String, Set<Element>> instanceFunctionsByName | 
| = new Map<String, Set<Element>>(); | 
| -  final Set<ClassElement> _seenClasses = new Set<ClassElement>(); | 
| +  final Set<ClassElement> _processedClasses = new Set<ClassElement>(); | 
| Set<ClassElement> recentClasses = new Setlet<ClassElement>(); | 
| final Universe universe = new Universe(); | 
|  | 
| @@ -91,7 +91,7 @@ abstract class Enqueuer { | 
| registry.registerDependency(cls); | 
| cls.ensureResolved(compiler); | 
| universe.registerTypeInstantiation(type, byMirrors: mirrorUsage); | 
| -      onRegisterInstantiatedClass(cls); | 
| +      processInstantiatedClass(cls); | 
| }); | 
| } | 
|  | 
| @@ -105,7 +105,7 @@ abstract class Enqueuer { | 
| return filter.checkNoEnqueuedInvokedInstanceMethods(this); | 
| } | 
|  | 
| -  void processInstantiatedClass(ClassElement cls) { | 
| +  void processInstantiatedClassMembers(ClassElement cls) { | 
| cls.implementation.forEachMember(processInstantiatedClassMember); | 
| } | 
|  | 
| @@ -214,17 +214,17 @@ abstract class Enqueuer { | 
| void enableNoSuchMethod(Element element) {} | 
| void enableIsolateSupport() {} | 
|  | 
| -  void onRegisterInstantiatedClass(ClassElement cls) { | 
| +  void processInstantiatedClass(ClassElement cls) { | 
| task.measure(() { | 
| -      if (_seenClasses.contains(cls)) return; | 
| +      if (_processedClasses.contains(cls)) return; | 
| // The class must be resolved to compute the set of all | 
| // supertypes. | 
| cls.ensureResolved(compiler); | 
|  | 
| void processClass(ClassElement cls) { | 
| -        if (_seenClasses.contains(cls)) return; | 
| +        if (_processedClasses.contains(cls)) return; | 
|  | 
| -        _seenClasses.add(cls); | 
| +        _processedClasses.add(cls); | 
| recentClasses.add(cls); | 
| cls.ensureResolved(compiler); | 
| cls.implementation.forEachMember(processInstantiatedClassMember); | 
| @@ -410,7 +410,7 @@ abstract class Enqueuer { | 
| // as recently seen, as we do not know how many rounds of resolution might | 
| // have run before tree shaking is disabled and thus everything is | 
| // enqueued. | 
| -      recents = _seenClasses.toSet(); | 
| +      recents = _processedClasses.toSet(); | 
| compiler.log('Enqueuing everything'); | 
| for (LibraryElement lib in compiler.libraryLoader.libraries) { | 
| enqueueReflectiveElementsInLibrary(lib, recents); | 
| @@ -639,7 +639,7 @@ abstract class Enqueuer { | 
|  | 
| void forgetElement(Element element) { | 
| universe.forgetElement(element, compiler); | 
| -    _seenClasses.remove(element); | 
| +    _processedClasses.remove(element); | 
| } | 
| } | 
|  | 
| @@ -682,13 +682,6 @@ class ResolutionEnqueuer extends Enqueuer { | 
| resolvedElements.add(element); | 
| } | 
|  | 
| -  /// Returns [:true:] if [element] has actually been used. | 
| -  bool isLive(Element element) { | 
| -    if (_seenClasses.contains(element)) return true; | 
| -    if (hasBeenResolved(element)) return true; | 
| -    return false; | 
| -  } | 
| - | 
| /** | 
| * Decides whether an element should be included to satisfy requirements | 
| * of the mirror system. | 
| @@ -888,11 +881,12 @@ class QueueFilter { | 
| bool checkNoEnqueuedInvokedInstanceMethods(Enqueuer enqueuer) { | 
| enqueuer.task.measure(() { | 
| // Run through the classes and see if we need to compile methods. | 
| -      for (ClassElement classElement in enqueuer.universe.instantiatedClasses) { | 
| +      for (ClassElement classElement in | 
| +               enqueuer.universe.directlyInstantiatedClasses) { | 
| for (ClassElement currentClass = classElement; | 
| currentClass != null; | 
| currentClass = currentClass.superclass) { | 
| -          enqueuer.processInstantiatedClass(currentClass); | 
| +          enqueuer.processInstantiatedClassMembers(currentClass); | 
| } | 
| } | 
| }); | 
|  |