| Index: pkg/compiler/lib/src/serialization/modelz.dart
|
| diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart
|
| index 36ec45caac15caf7317b8c064403a2627c358f38..ef385bba54e2e94665107003d05d5787f7ee5361 100644
|
| --- a/pkg/compiler/lib/src/serialization/modelz.dart
|
| +++ b/pkg/compiler/lib/src/serialization/modelz.dart
|
| @@ -301,7 +301,9 @@ abstract class ContainerMixin
|
| }
|
| }
|
|
|
| -class AbstractFieldElementZ extends ElementZ implements AbstractFieldElement {
|
| +class AbstractFieldElementZ extends ElementZ
|
| + with AbstractFieldElementCommon
|
| + implements AbstractFieldElement {
|
| final String name;
|
| final GetterElementZ getter;
|
| final SetterElementZ setter;
|
| @@ -346,6 +348,18 @@ class AbstractFieldElementZ extends ElementZ implements AbstractFieldElement {
|
|
|
| @override
|
| ClassElement get enclosingClass => _canonicalElement.enclosingClass;
|
| +
|
| + @override
|
| + bool get isClassMember => _canonicalElement.isClassMember;
|
| +
|
| + @override
|
| + bool get isInstanceMember => _canonicalElement.isInstanceMember;
|
| +
|
| + @override
|
| + bool get isStatic => _canonicalElement.isStatic;
|
| +
|
| + @override
|
| + bool get isTopLevel => _canonicalElement.isTopLevel;
|
| }
|
|
|
| class LibraryElementZ extends DeserializedElementZ
|
| @@ -568,6 +582,9 @@ class CompilationUnitElementZ extends DeserializedElementZ
|
| SourceSpan get sourcePosition => new SourceSpan(script.resourceUri, 0, 0);
|
|
|
| @override
|
| + bool get isTopLevel => false;
|
| +
|
| + @override
|
| accept(ElementVisitor visitor, arg) {
|
| return visitor.visitCompilationUnitElement(this, arg);
|
| }
|
| @@ -669,6 +686,9 @@ abstract class InstanceMemberMixin implements DeserializedElementZ {
|
|
|
| @override
|
| bool get isInstanceMember => true;
|
| +
|
| + @override
|
| + bool get isClassMember => true;
|
| }
|
|
|
| abstract class StaticMemberMixin implements DeserializedElementZ {
|
| @@ -677,6 +697,9 @@ abstract class StaticMemberMixin implements DeserializedElementZ {
|
|
|
| @override
|
| bool get isStatic => true;
|
| +
|
| + @override
|
| + bool get isClassMember => true;
|
| }
|
|
|
| abstract class TypedElementMixin implements DeserializedElementZ, TypedElement {
|
| @@ -960,16 +983,18 @@ class UnnamedMixinApplicationElementZ extends ElementZ
|
| MixinApplicationElementMixin {
|
| final String name;
|
| final ClassElement _subclass;
|
| - final InterfaceType supertype;
|
| - final Link<DartType> interfaces;
|
| + final InterfaceType _supertypeBase;
|
| + final InterfaceType _mixinBase;
|
| + InterfaceType _supertype;
|
| + Link<DartType> _interfaces;
|
| OrderedTypeSet _allSupertypesAndSelf;
|
| Link<ConstructorElement> _constructors;
|
|
|
| UnnamedMixinApplicationElementZ(
|
| ClassElement subclass, InterfaceType supertype, InterfaceType mixin)
|
| : this._subclass = subclass,
|
| - this.supertype = supertype,
|
| - this.interfaces = const Link<DartType>().prepend(mixin),
|
| + this._supertypeBase = supertype,
|
| + this._mixinBase = mixin,
|
| this.name = "${supertype.name}+${mixin.name}";
|
|
|
| @override
|
| @@ -979,6 +1004,9 @@ class UnnamedMixinApplicationElementZ extends ElementZ
|
| bool get isTopLevel => true;
|
|
|
| @override
|
| + bool get isAbstract => true;
|
| +
|
| + @override
|
| bool get isUnnamedMixinApplication => true;
|
|
|
| Link<ConstructorElement> get constructors {
|
| @@ -1024,6 +1052,45 @@ class UnnamedMixinApplicationElementZ extends ElementZ
|
| }
|
|
|
| @override
|
| + InterfaceType get supertype {
|
| + if (_supertype == null) {
|
| + // Substitute the type variables in [_supertypeBase] provided by
|
| + // [_subclass] with the type variables in this unnamed mixin application.
|
| + //
|
| + // For instance
|
| + // class S<S.T> {}
|
| + // class M<M.T> {}
|
| + // class C<C.T> extends S<C.T> with M<C.T> {}
|
| + // the unnamed mixin application should be
|
| + // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {}
|
| + // but the supertype is provided as S<C.T> and we need to substitute S+M.T
|
| + // for C.T.
|
| + _supertype = _supertypeBase.subst(typeVariables, _subclass.typeVariables);
|
| + }
|
| + return _supertype;
|
| + }
|
| +
|
| + @override
|
| + Link<DartType> get interfaces {
|
| + if (_interfaces == null) {
|
| + // Substitute the type variables in [_mixinBase] provided by
|
| + // [_subclass] with the type variables in this unnamed mixin application.
|
| + //
|
| + // For instance
|
| + // class S<S.T> {}
|
| + // class M<M.T> {}
|
| + // class C<C.T> extends S<C.T> with M<C.T> {}
|
| + // the unnamed mixin application should be
|
| + // abstract class S+M<S+M.T> extends S<S+M.T> implements M<S+M.T> {}
|
| + // but the mixin is provided as M<C.T> and we need to substitute S+M.T
|
| + // for C.T.
|
| + _interfaces = const Link<DartType>()
|
| + .prepend(_mixinBase.subst(typeVariables, _subclass.typeVariables));
|
| + }
|
| + return _interfaces;
|
| + }
|
| +
|
| + @override
|
| accept(ElementVisitor visitor, arg) {
|
| return visitor.visitMixinApplicationElement(this, arg);
|
| }
|
| @@ -1293,6 +1360,9 @@ class ForwardingConstructorElementZ extends ElementZ
|
| bool get isConst => false;
|
|
|
| @override
|
| + bool get isClassMember => true;
|
| +
|
| + @override
|
| ConstantConstructor get constantConstructor => null;
|
|
|
| @override
|
| @@ -1493,6 +1563,9 @@ abstract class FunctionElementZ extends DeserializedElementZ
|
| }
|
|
|
| @override
|
| + bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT);
|
| +
|
| + @override
|
| bool get isOperator => _decoder.getBool(Key.IS_OPERATOR);
|
| }
|
|
|
| @@ -1594,6 +1667,9 @@ abstract class GetterElementZ extends DeserializedElementZ
|
| }
|
|
|
| @override
|
| + bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT);
|
| +
|
| + @override
|
| AsyncMarker get asyncMarker => AsyncMarker.SYNC;
|
| }
|
|
|
| @@ -1634,6 +1710,9 @@ abstract class SetterElementZ extends DeserializedElementZ
|
| }
|
|
|
| @override
|
| + bool get isAbstract => _decoder.getBool(Key.IS_ABSTRACT);
|
| +
|
| + @override
|
| AsyncMarker get asyncMarker => AsyncMarker.SYNC;
|
| }
|
|
|
|
|