| Index: pkg/compiler/lib/src/universe/class_set.dart
|
| diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
|
| index ac856a2802b6f84db10c158034822b74b4c3a9a6..b4189767efb3e31b5fd7cf57b29a377af629b042 100644
|
| --- a/pkg/compiler/lib/src/universe/class_set.dart
|
| +++ b/pkg/compiler/lib/src/universe/class_set.dart
|
| @@ -35,7 +35,6 @@ import '../util/util.dart' show Link;
|
| ///
|
| class ClassHierarchyNode {
|
| final ClassElement cls;
|
| - ClassElement _leastUpperInstantiatedSubclass;
|
|
|
| /// `true` if [cls] has been directly instantiated.
|
| ///
|
| @@ -102,55 +101,15 @@ class ClassHierarchyNode {
|
| includeUninstantiated: includeUninstantiated);
|
| }
|
|
|
| - /// Returns the most specific subclass of [cls] (including [cls]) that is
|
| - /// directly instantiated or a superclass of all directly instantiated
|
| - /// subclasses. If [cls] is not instantiated, `null` is returned.
|
| - ClassElement getLubOfInstantiatedSubclasses() {
|
| - if (!isInstantiated) return null;
|
| - if (_leastUpperInstantiatedSubclass == null) {
|
| - _leastUpperInstantiatedSubclass =
|
| - _computeLeastUpperInstantiatedSubclass();
|
| - }
|
| - return _leastUpperInstantiatedSubclass;
|
| - }
|
| -
|
| - ClassElement _computeLeastUpperInstantiatedSubclass() {
|
| - if (isDirectlyInstantiated) {
|
| - return cls;
|
| - }
|
| - ClassHierarchyNode subclass;
|
| - for (Link<ClassHierarchyNode> link = _directSubclasses;
|
| - !link.isEmpty;
|
| - link = link.tail) {
|
| - if (link.head.isInstantiated) {
|
| - if (subclass == null) {
|
| - subclass = link.head;
|
| - } else {
|
| - return cls;
|
| - }
|
| - }
|
| - }
|
| - if (subclass != null) {
|
| - return subclass.getLubOfInstantiatedSubclasses();
|
| - }
|
| - return cls;
|
| - }
|
| -
|
| void printOn(StringBuffer sb, String indentation,
|
| {bool instantiatedOnly: false,
|
| - bool sorted: true,
|
| ClassElement withRespectTo}) {
|
|
|
| bool isRelatedTo(ClassElement subclass) {
|
| - return subclass == withRespectTo ||
|
| - subclass.implementsInterface(withRespectTo);
|
| + return subclass.implementsInterface(withRespectTo);
|
| }
|
|
|
| - sb.write(indentation);
|
| - if (cls.isAbstract) {
|
| - sb.write('abstract ');
|
| - }
|
| - sb.write('class ${cls.name}:');
|
| + sb.write('$indentation$cls');
|
| if (isDirectlyInstantiated) {
|
| sb.write(' directly');
|
| }
|
| @@ -161,14 +120,11 @@ class ClassHierarchyNode {
|
| if (_directSubclasses.isEmpty) {
|
| sb.write(']');
|
| } else {
|
| - var subclasses = _directSubclasses;
|
| - if (sorted) {
|
| - subclasses = _directSubclasses.toList()..sort((a, b) {
|
| - return a.cls.name.compareTo(b.cls.name);
|
| - });
|
| - }
|
| bool needsComma = false;
|
| - for (ClassHierarchyNode child in subclasses) {
|
| + for (Link<ClassHierarchyNode> link = _directSubclasses;
|
| + !link.isEmpty;
|
| + link = link.tail) {
|
| + ClassHierarchyNode child = link.head;
|
| if (instantiatedOnly && !child.isInstantiated) {
|
| continue;
|
| }
|
| @@ -184,7 +140,6 @@ class ClassHierarchyNode {
|
| sb,
|
| '$indentation ',
|
| instantiatedOnly: instantiatedOnly,
|
| - sorted: sorted,
|
| withRespectTo: withRespectTo);
|
| needsComma = true;
|
| }
|
| @@ -256,7 +211,6 @@ class ClassHierarchyNode {
|
| ///
|
| class ClassSet {
|
| final ClassHierarchyNode node;
|
| - ClassElement _leastUpperInstantiatedSubtype;
|
|
|
| List<ClassHierarchyNode> _directSubtypes;
|
|
|
| @@ -357,42 +311,6 @@ class ClassSet {
|
| }
|
| }
|
|
|
| - /// Returns the most specific subtype of [cls] (including [cls]) that is
|
| - /// directly instantiated or a superclass of all directly instantiated
|
| - /// subtypes. If no subtypes of [cls] are instantiated, `null` is returned.
|
| - ClassElement getLubOfInstantiatedSubtypes() {
|
| - if (_leastUpperInstantiatedSubtype == null) {
|
| - _leastUpperInstantiatedSubtype = _computeLeastUpperInstantiatedSubtype();
|
| - }
|
| - return _leastUpperInstantiatedSubtype;
|
| - }
|
| -
|
| - ClassElement _computeLeastUpperInstantiatedSubtype() {
|
| - if (node.isDirectlyInstantiated) {
|
| - return cls;
|
| - }
|
| - if (_directSubtypes == null) {
|
| - return node.getLubOfInstantiatedSubclasses();
|
| - }
|
| - ClassHierarchyNode subtype;
|
| - if (node.isInstantiated) {
|
| - subtype = node;
|
| - }
|
| - for (ClassHierarchyNode subnode in _directSubtypes) {
|
| - if (subnode.isInstantiated) {
|
| - if (subtype == null) {
|
| - subtype = subnode;
|
| - } else {
|
| - return cls;
|
| - }
|
| - }
|
| - }
|
| - if (subtype != null) {
|
| - return subtype.getLubOfInstantiatedSubclasses();
|
| - }
|
| - return null;
|
| - }
|
| -
|
| String toString() {
|
| StringBuffer sb = new StringBuffer();
|
| sb.write('[\n');
|
|
|