| Index: lib/compiler/implementation/compiler.dart
|
| ===================================================================
|
| --- lib/compiler/implementation/compiler.dart (revision 7416)
|
| +++ lib/compiler/implementation/compiler.dart (working copy)
|
| @@ -300,6 +300,7 @@
|
| });
|
| }
|
| native.processNativeClasses(this, universe.libraries.getValues());
|
| + computeSubclasses();
|
| enqueue(new WorkItem.toCompile(main));
|
| codegenProgress.reset();
|
| while (!worklist.isEmpty()) {
|
| @@ -316,6 +317,29 @@
|
| }
|
| }
|
|
|
| + void addSubtypes(ClassElement cls) {
|
| + for (Type type in cls.allSupertypes) {
|
| + List<Element> subtypes = universe.subtypes.putIfAbsent(
|
| + type.element,
|
| + () => <ClassElement>[]);
|
| + subtypes.add(cls);
|
| + }
|
| + }
|
| +
|
| + void computeSubclasses() {
|
| + universe.libraries.getValues().forEach((LibraryElement library) {
|
| + for (Link<Element> link = library.topLevelElements;
|
| + !link.isEmpty();
|
| + link = link.tail) {
|
| + Element element = link.head;
|
| + if (!element.isClass()) continue;
|
| + ClassElement cls = element;
|
| + resolveClass(cls);
|
| + addSubtypes(cls);
|
| + }
|
| + });
|
| + }
|
| +
|
| TreeElements analyzeElement(Element element) {
|
| assert(parser !== null);
|
| Node tree = parser.parse(element);
|
|
|