Index: pkg/dev_compiler/lib/src/compiler/element_helpers.dart |
diff --git a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart |
index 39a2e471e5182e36e642613d0ec6d3224e6c63fd..28da6a6e61ea9058e9a14959bdb0640bf18d8e4c 100644 |
--- a/pkg/dev_compiler/lib/src/compiler/element_helpers.dart |
+++ b/pkg/dev_compiler/lib/src/compiler/element_helpers.dart |
@@ -16,7 +16,12 @@ import 'package:analyzer/dart/ast/ast.dart' |
MethodInvocation, |
SimpleIdentifier; |
import 'package:analyzer/dart/element/element.dart' |
- show ClassElement, Element, ExecutableElement, FunctionElement; |
+ show |
+ ClassElement, |
+ Element, |
+ ExecutableElement, |
+ FunctionElement, |
+ LibraryElement; |
import 'package:analyzer/dart/element/type.dart' |
show DartType, InterfaceType, ParameterizedType; |
import 'package:analyzer/src/dart/element/type.dart' show DynamicTypeImpl; |
@@ -139,3 +144,34 @@ List<ClassElement> getSuperclasses(ClassElement cls) { |
} |
return result; |
} |
+ |
+List<ClassElement> getSuperclassesInSameLibrary(ClassElement cls) { |
+ var result = <ClassElement>[]; |
+ var visited = new HashSet<ClassElement>(); |
+ var library = cls.library; |
+ while (cls != null && visited.add(cls)) { |
+ for (var mixinType in cls.mixins.reversed) { |
vsm
2017/03/27 22:31:27
I think we should get nested mixins (see https://c
Jennifer Messerly
2017/03/27 23:16:27
hmmm. Those guys unfortunately break assumptions a
|
+ var mixin = mixinType.element; |
+ if (mixin != null && mixin.library == library) result.add(mixin); |
+ } |
+ var superclass = cls.supertype?.element; |
+ if (superclass?.library != library) break; |
vsm
2017/03/27 22:31:27
Don't we need to keep going in case we've got some
Jennifer Messerly
2017/03/27 23:16:28
Let me investigate based on the use cases. I only
|
+ |
+ result.add(superclass); |
+ cls = superclass; |
+ } |
+ return result; |
+} |
+ |
+List<ClassElement> getImmediateSuperclasses(ClassElement c) { |
+ var result = <ClassElement>[]; |
+ for (var m in c.mixins.reversed) { |
+ result.add(m.element); |
+ } |
+ var s = c.supertype; |
+ if (s != null) result.add(s.element); |
+ return result; |
+} |
+ |
+bool isSdkInternalRuntime(LibraryElement l) => |
+ l.isInSdk && l.source.uri.toString() == 'dart:_runtime'; |