Index: sdk/lib/_internal/compiler/implementation/elements/elements.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart |
index 5dd07122299be26446d4fc6e777e00f208a263c3..b7ab61e44e4aa1f55ca93910da6ca7191450a3d2 100644 |
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart |
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart |
@@ -243,6 +243,9 @@ abstract class Element implements Spannable { |
Element get enclosingMember; |
Element get outermostEnclosingMemberOrTopLevel; |
+ /// The enclosing class that defines the type environment for this element. |
+ ClassElement get contextClass; |
+ |
FunctionElement asFunctionElement(); |
/// Is [:true:] if this element has a corresponding patch. |
@@ -899,7 +902,33 @@ abstract class ConstructorBodyElement extends FunctionElement { |
* declarations and typedefs. |
*/ |
abstract class TypeDeclarationElement extends Element implements AstElement { |
+ /** |
+ * The `this type` for this type declaration. |
+ * |
+ * The type of [:this:] is the generic type based on this element in which |
+ * the type arguments are the declared type variables. For instance, |
+ * [:List<E>:] for [:List:] and [:Map<K,V>:] for [:Map:]. |
+ * |
+ * For a class declaration this is the type of [:this:]. |
+ */ |
GenericType get thisType; |
+ |
+ /** |
+ * The raw type for this type declaration. |
+ * |
+ * The raw type is the generic type base on this element in which the type |
+ * arguments are all [dynamic]. For instance [:List<dynamic>:] for [:List:] |
+ * and [:Map<dynamic,dynamic>:] for [:Map:]. For non-generic classes [rawType] |
+ * is the same as [thisType]. |
+ * |
+ * The [rawType] field is a canonicalization of the raw type and should be |
+ * used to distinguish explicit and implicit uses of the [dynamic] |
+ * type arguments. For instance should [:List:] be the [rawType] of the |
+ * [:List:] class element whereas [:List<dynamic>:] should be its own |
+ * instantiation of [InterfaceType] with [:dynamic:] as type argument. Using |
+ * this distinction, we can print the raw type with type arguments only when |
+ * the input source has used explicit type arguments. |
+ */ |
GenericType get rawType; |
/** |
@@ -921,12 +950,21 @@ abstract class ClassElement extends TypeDeclarationElement |
InterfaceType get rawType; |
InterfaceType get thisType; |
- |
ClassElement get superclass; |
+ /// The direct supertype of this class. |
DartType get supertype; |
+ |
+ /// Ordered set of all supertypes of this class including the class itself. |
OrderedTypeSet get allSupertypesAndSelf; |
+ |
+ /// A list of all supertypes of this class excluding the class itself. |
Link<DartType> get allSupertypes; |
+ |
+ /// Returns the this type of this class as an instance of [cls]. |
+ InterfaceType asInstanceOf(ClassElement cls); |
+ |
+ /// A list of all direct superinterfaces of this class. |
Link<DartType> get interfaces; |
bool get hasConstructor; |