| 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 44112048363739ad1362a00875ddf5e40cb3c253..b521f1b1641f1725c6f7ef13ab99f1c4d089f6bf 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
|
| @@ -838,19 +838,6 @@ class PrefixElement extends Element {
|
| class TypedefElement extends Element implements TypeDeclarationElement {
|
| Typedef cachedNode;
|
| TypedefType cachedType;
|
| -
|
| - /**
|
| - * Canonicalize raw version of [cachedType].
|
| - *
|
| - * See [ClassElement.rawType] for motivation.
|
| - *
|
| - * The [rawType] is computed together with [cachedType] in [computeType].
|
| - */
|
| - TypedefType rawType;
|
| -
|
| - /**
|
| - * The type annotation which defines this typedef.
|
| - */
|
| DartType alias;
|
|
|
| bool isResolved = false;
|
| @@ -875,16 +862,6 @@ class TypedefElement extends Element implements TypeDeclarationElement {
|
| Link<DartType> parameters =
|
| TypeDeclarationElement.createTypeVariables(this, node.typeParameters);
|
| cachedType = new TypedefType(this, parameters);
|
| - if (parameters.isEmpty) {
|
| - rawType = cachedType;
|
| - } else {
|
| - var dynamicParameters = const Link<DartType>();
|
| - parameters.forEach((_) {
|
| - dynamicParameters =
|
| - dynamicParameters.prepend(compiler.types.dynamicType);
|
| - });
|
| - rawType = new TypedefType(this, dynamicParameters);
|
| - }
|
| compiler.resolveTypedef(this);
|
| return cachedType;
|
| }
|
| @@ -1406,36 +1383,7 @@ abstract class TypeDeclarationElement implements Element {
|
| abstract class ClassElement extends ScopeContainerElement
|
| implements TypeDeclarationElement {
|
| final int id;
|
| - /**
|
| - * The type of [:this:] for this class declaration.
|
| - *
|
| - * The type of [:this:] is the interface 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:].
|
| - *
|
| - * This type is computed in [computeType].
|
| - */
|
| - InterfaceType thisType;
|
| -
|
| - /**
|
| - * The raw type for this class declaration.
|
| - *
|
| - * The raw type is the interface 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.
|
| - *
|
| - * This type is computed together with [thisType] in [computeType].
|
| - */
|
| - InterfaceType rawType;
|
| + InterfaceType type;
|
| DartType supertype;
|
| DartType defaultClass;
|
| Link<DartType> interfaces;
|
| @@ -1461,29 +1409,18 @@ abstract class ClassElement extends ScopeContainerElement
|
| ClassNode parseNode(Compiler compiler);
|
|
|
| InterfaceType computeType(compiler) {
|
| - if (thisType == null) {
|
| + if (type == null) {
|
| if (origin == null) {
|
| ClassNode node = parseNode(compiler);
|
| Link<DartType> parameters =
|
| TypeDeclarationElement.createTypeVariables(this,
|
| node.typeParameters);
|
| - thisType = new InterfaceType(this, parameters);
|
| - if (parameters.isEmpty) {
|
| - rawType = thisType;
|
| - } else {
|
| - var dynamicParameters = const Link<DartType>();
|
| - parameters.forEach((_) {
|
| - dynamicParameters =
|
| - dynamicParameters.prepend(compiler.types.dynamicType);
|
| - });
|
| - rawType = new InterfaceType(this, dynamicParameters);
|
| - }
|
| + type = new InterfaceType(this, parameters);
|
| } else {
|
| - thisType = origin.computeType(compiler);
|
| - rawType = origin.rawType;
|
| + type = origin.computeType(compiler);
|
| }
|
| }
|
| - return thisType;
|
| + return type;
|
| }
|
|
|
| bool get isPatched => patch != null;
|
| @@ -1498,7 +1435,7 @@ abstract class ClassElement extends ScopeContainerElement
|
| bool isObject(Compiler compiler) =>
|
| identical(declaration, compiler.objectClass);
|
|
|
| - Link<DartType> get typeVariables => thisType.typeArguments;
|
| + Link<DartType> get typeVariables => type.typeArguments;
|
|
|
| ClassElement ensureResolved(Compiler compiler) {
|
| if (resolutionState == STATE_NOT_STARTED) {
|
| @@ -1792,6 +1729,10 @@ abstract class ClassElement extends ScopeContainerElement
|
|
|
| Scope buildScope() => new ClassScope(enclosingElement.buildScope(), this);
|
|
|
| + Link<DartType> get allSupertypesAndSelf {
|
| + return allSupertypes.prepend(new InterfaceType(this));
|
| + }
|
| +
|
| String toString() {
|
| if (origin != null) {
|
| return 'patch ${super.toString()}';
|
|
|