Index: dart/lib/compiler/implementation/elements/elements.dart |
diff --git a/dart/lib/compiler/implementation/elements/elements.dart b/dart/lib/compiler/implementation/elements/elements.dart |
index 7651855f6ffeedc1a4aaa394eed1ce8f2451412f..15140168f51e0fdd4f72f4955de575a3cf888cf3 100644 |
--- a/dart/lib/compiler/implementation/elements/elements.dart |
+++ b/dart/lib/compiler/implementation/elements/elements.dart |
@@ -131,9 +131,13 @@ class Element implements Hashable { |
bool isField() => kind === ElementKind.FIELD; |
bool isGetter() => kind === ElementKind.GETTER; |
bool isSetter() => kind === ElementKind.SETTER; |
+ bool isAccessor() => isGetter() || isSetter(); |
+ bool isForeign() => kind === ElementKind.FOREIGN; |
bool impliesType() => (kind.category & ElementCategory.IMPLIES_TYPE) != 0; |
bool isExtendable() => (kind.category & ElementCategory.IS_EXTENDABLE) != 0; |
+ bool isTopLevel() => enclosingElement.isCompilationUnit(); |
+ |
bool isAssignable() { |
if (modifiers != null && modifiers.isFinal()) return false; |
if (isFunction() || isGenerativeConstructor()) return false; |
@@ -188,7 +192,23 @@ class Element implements Hashable { |
return null; |
} |
- toString() => '$kind(${name.slowToString()})'; |
+ Element getOutermostEnclosingMemberOrTopLevel() { |
+ for (Element e = this; e !== null; e = e.enclosingElement) { |
+ if (e.isMember() || e.isTopLevel()) { |
+ return e; |
+ } |
+ } |
+ return null; |
+ } |
+ |
+ toString() { |
+ if (isMember()) { |
+ String holderName = enclosingElement.name.slowToString(); |
+ return '$kind($holderName#${name.slowToString()})'; |
+ } else { |
+ return '$kind(${name.slowToString()})'; |
+ } |
+ } |
bool _isNative = false; |
void setNative() { _isNative = true; } |