| 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 91492e2e7f22b50ffa624337f151e403234d3092..500a6790f5d3285743f803a6efec45ebc2ca9907 100644
|
| --- a/pkg/compiler/lib/src/serialization/modelz.dart
|
| +++ b/pkg/compiler/lib/src/serialization/modelz.dart
|
| @@ -319,6 +319,8 @@ class AbstractFieldElementZ extends ElementZ implements AbstractFieldElement {
|
|
|
| AbstractFieldElementZ(this.name, this.getter, this.setter);
|
|
|
| + FunctionElement get _canonicalElement => getter != null ? getter : setter;
|
| +
|
| @override
|
| ElementKind get kind => ElementKind.ABSTRACT_FIELD;
|
|
|
| @@ -328,19 +330,16 @@ class AbstractFieldElementZ extends ElementZ implements AbstractFieldElement {
|
| }
|
|
|
| @override
|
| - LibraryElement get library {
|
| - return getter != null ? getter.library : setter.library;
|
| - }
|
| + LibraryElement get library => _canonicalElement.library;
|
|
|
| @override
|
| - Element get enclosingElement {
|
| - return getter != null ? getter.enclosingElement : setter.enclosingElement;
|
| - }
|
| + Element get enclosingElement => _canonicalElement.enclosingElement;
|
|
|
| @override
|
| - SourceSpan get sourcePosition {
|
| - return getter != null ? getter.sourcePosition : setter.sourcePosition;
|
| - }
|
| + SourceSpan get sourcePosition => _canonicalElement.sourcePosition;
|
| +
|
| + @override
|
| + ClassElement get enclosingClass => _canonicalElement.enclosingClass;
|
| }
|
|
|
| class LibraryElementZ extends DeserializedElementZ
|
| @@ -853,7 +852,7 @@ class ClassElementZ extends DeserializedElementZ
|
| bool get isEnumClass => false;
|
|
|
| @override
|
| - bool get isProxy => _unsupported('isProxy');
|
| + bool get isProxy => _decoder.getBool(Key.IS_PROXY);
|
|
|
| @override
|
| bool get isUnnamedMixinApplication {
|
| @@ -1120,6 +1119,61 @@ class InstanceFunctionElementZ extends FunctionElementZ
|
| : super(decoder);
|
| }
|
|
|
| +abstract class LocalExecutableMixin
|
| + implements DeserializedElementZ, ExecutableElement, LocalElement {
|
| + ExecutableElement _executableContext;
|
| +
|
| + @override
|
| + Element get enclosingElement => executableContext;
|
| +
|
| + @override
|
| + ExecutableElement get executableContext {
|
| + if (_executableContext == null) {
|
| + _executableContext = _decoder.getElement(Key.EXECUTABLE_CONTEXT);
|
| + }
|
| + return _executableContext;
|
| + }
|
| +
|
| + @override
|
| + MemberElement get memberContext => executableContext.memberContext;
|
| +
|
| + @override
|
| + bool get isLocal => true;
|
| +
|
| + @override
|
| + LibraryElement get library => memberContext.library;
|
| +
|
| + @override
|
| + CompilationUnitElement get compilationUnit {
|
| + return memberContext.compilationUnit;
|
| + }
|
| +
|
| + @override
|
| + bool get hasTreeElements => memberContext.hasTreeElements;
|
| +
|
| + @override
|
| + TreeElements get treeElements => memberContext.treeElements;
|
| +}
|
| +
|
| +class LocalFunctionElementZ extends DeserializedElementZ
|
| + with LocalExecutableMixin,
|
| + AstElementMixin,
|
| + ParametersMixin,
|
| + FunctionTypedElementMixin,
|
| + TypedElementMixin
|
| + implements LocalFunctionElement {
|
| + LocalFunctionElementZ(ObjectDecoder decoder)
|
| + : super(decoder);
|
| +
|
| + @override
|
| + accept(ElementVisitor visitor, arg) {
|
| + return visitor.visitFunctionElement(this, arg);
|
| + }
|
| +
|
| + @override
|
| + ElementKind get kind => ElementKind.FUNCTION;
|
| +}
|
| +
|
| abstract class GetterElementZ extends DeserializedElementZ
|
| with AnalyzableElementMixin,
|
| AstElementMixin,
|
|
|