Chromium Code Reviews| Index: pkg/analyzer2dart/lib/src/modely.dart |
| diff --git a/pkg/analyzer2dart/lib/src/modely.dart b/pkg/analyzer2dart/lib/src/modely.dart |
| index 4e0a804aeaaf47c1a4827f5119e9ccd0237d098e..81150572086b70a2b36b22ba5386388e8bd1e15b 100644 |
| --- a/pkg/analyzer2dart/lib/src/modely.dart |
| +++ b/pkg/analyzer2dart/lib/src/modely.dart |
| @@ -237,9 +237,6 @@ class LibraryElementY extends ElementY with AnalyzableElementY |
| void addToScope(element, listener) => unsupported('addToScope'); |
| @override |
| - void set canUseNative(bool value) => unsupported('canUseNative'); |
|
Johnni Winther
2015/01/28 13:38:01
Cleanup.
|
| - |
| - @override |
| bool get canUseNative => unsupported('canUseNative'); |
| @override |
| @@ -347,6 +344,7 @@ abstract class TopLevelElementMixin implements ElementY { |
| abstract class FunctionElementMixin |
| implements ElementY, dart2js.FunctionElement { |
| + analyzer.ExecutableElement get element; |
| // TODO(johnniwinther): Ensure the correct semantics of this. |
| @override |
| @@ -372,6 +370,14 @@ abstract class FunctionElementMixin |
| @override |
| get asyncMarker => unsupported('asyncMarker'); |
| + |
| + @override |
| + List<dart2js.ParameterElement> get parameters { |
| + return element.parameters.map(converter.convertElement).toList(); |
| + } |
| + |
| + @override |
| + dart2js.FunctionType get type => converter.convertType(element.type); |
| } |
| class TopLevelFunctionElementY extends ElementY |
| @@ -385,9 +391,6 @@ class TopLevelFunctionElementY extends ElementY |
| @override |
| dart2js.ElementKind get kind => dart2js.ElementKind.FUNCTION; |
| - @override |
| - dart2js.FunctionType get type => converter.convertType(element.type); |
| - |
| TopLevelFunctionElementY(ElementConverter converter, |
| analyzer.FunctionElement element) |
| : super(converter, element); |
| @@ -405,9 +408,6 @@ class LocalFunctionElementY extends ElementY |
| dart2js.ElementKind get kind => dart2js.ElementKind.FUNCTION; |
| @override |
| - dart2js.FunctionType get type => converter.convertType(element.type); |
| - |
| - @override |
| bool get isAbstract => false; |
| @override |
| @@ -439,6 +439,12 @@ class ParameterElementY extends ElementY |
| @override |
| bool get isConst => false; |
| + @override |
| + bool get isNamed => element.parameterKind == ParameterKind.NAMED; |
| + |
| + @override |
| + bool get isOptional => element.parameterKind.isOptional; |
| + |
| ParameterElementY(ElementConverter converter, |
| analyzer.ParameterElement element) |
| : super(converter, element) { |
| @@ -486,7 +492,6 @@ class TypeDeclarationElementY extends ElementY |
| @override |
| get typeVariables => unsupported('typeVariables'); |
| - |
| } |
| class ClassElementY extends TypeDeclarationElementY |
| @@ -499,6 +504,50 @@ class ClassElementY extends TypeDeclarationElementY |
| @override |
| bool get isObject => element.type.isObject; |
| + // TODO(johnniwinther): Ensure the correct semantics. |
| + // TODO(paulberry,brianwilkerson): [ClassElement.isTypedef] should probably |
| + // be renamed to [ClassElement.isNamedMixinApplication]. |
| + @override |
| + bool get isMixinApplication => element.isTypedef; |
| + |
| + @override |
| + bool get isUnnamedMixinApplication => false; |
| + |
| + @override |
| + bool get isEnumClass => element.isEnum; |
| + |
| + @override |
| + bool get isAbstract => element.isAbstract; |
| + |
| + // TODO(johnniwinther): Semantic difference: Dart2js points to unnamed |
| + // mixin applications, analyzer points to the type in the extends clause or |
| + // Object if omitted. |
| + @override |
| + dart2js.DartType get supertype { |
| + return element.supertype != null |
| + ? converter.convertType(element.supertype) |
| + : null; |
| + } |
| + |
| + @override |
| + util.Link<dart2js.DartType> get interfaces { |
| + // TODO(johnniwinther): Support interfaces. |
| + return const util.Link<dart2js.DartType>(); |
| + } |
| + |
| + // TODO(johnniwinther): Support generic classes. |
| + @override |
| + List<dart2js.DartType> get typeVariables => const []; |
| + |
| + @override |
| + bool get isStatic => false; |
| + |
| + @override |
| + bool get isTopLevel => true; |
| + |
| + @override |
| + dart2js.ClassElement get enclosingClass => this; |
| + |
| ClassElementY(ElementConverter converter, analyzer.ClassElement element) |
| : super(converter, element); |
| @@ -584,18 +633,12 @@ class ClassElementY extends TypeDeclarationElementY |
| bool implementsInterface(intrface) => unsupported('implementsInterface'); |
| @override |
| - get interfaces => unsupported('interfaces'); |
| - |
| - @override |
| bool get isProxy => unsupported('isProxy'); |
| @override |
| bool isSubclassOf(cls) => unsupported('isSubclassOf'); |
| @override |
| - get isUnnamedMixinApplication => unsupported('isUnnamedMixinApplication'); |
| - |
| - @override |
| localLookup(String elementName) => unsupported('localLookup'); |
| @override |
| @@ -637,19 +680,8 @@ class ClassElementY extends TypeDeclarationElementY |
| void reverseBackendMembers() => unsupported('reverseBackendMembers'); |
| @override |
| - void setDefaultConstructor(constructor, compiler) { |
| - unsupported('setDefaultConstructor'); |
| - } |
| - |
| - @override |
| dart2js.ClassElement get superclass => unsupported('superclass'); |
| - // TODO(johnniwinther): Semantic difference: Dart2js points to unnamed |
| - // mixin applications, analyzer points to the type in the extends clause or |
| - // Object if omitted. |
| - @override |
| - dart2js.DartType get supertype => unsupported('supertype'); |
| - |
| @override |
| int get supertypeLoadState => unsupported('supertypeLoadState'); |
| @@ -657,9 +689,6 @@ class ClassElementY extends TypeDeclarationElementY |
| validateConstructorLookupResults(selector, result, noMatch) { |
| unsupported('validateConstructorLookupResults'); |
| } |
| - |
| - @override |
| - bool get isEnumClass => unsupported('isEnum'); |
| } |
| class TypedefElementY extends TypeDeclarationElementY |
| @@ -758,23 +787,45 @@ class LocalVariableElementY extends ElementY |
| dart2js.DartType get type => unsupported('type'); |
| } |
| -class ConstructorElementY extends ElementY |
| - with AnalyzableElementY, |
| - AstElementY, |
| - FunctionElementMixin |
| - implements dart2js.ConstructorElement { |
| +abstract class ClassMemberMixin implements ElementY { |
| + analyzer.ClassMemberElement get element; |
| - analyzer.ConstructorElement get element => super.element; |
| + @override |
| + dart2js.ClassElement get contextClass => enclosingClass; |
| @override |
| dart2js.ClassElement get enclosingClass { |
| return converter.convertElement(element.enclosingElement); |
| } |
| + @override |
| + bool get isClassMember => true; |
| +} |
| + |
| +class ConstructorElementY extends ElementY |
| + with AnalyzableElementY, |
| + AstElementY, |
| + FunctionElementMixin, |
| + ClassMemberMixin |
| + implements dart2js.ConstructorElement { |
| + |
| + analyzer.ConstructorElement get element => super.element; |
| + |
| // TODO(johnniwinther): Support redirecting/factory constructors. |
| @override |
| dart2js.ElementKind get kind => dart2js.ElementKind.GENERATIVE_CONSTRUCTOR; |
| + // TODO(johnniwinther): Support factory constructors. |
| + @override |
| + bool get isFactoryConstructor => false; |
| + |
| + // TODO(johnniwinther): Support redirecting factory constructors. |
| + @override |
| + bool get isRedirectingFactory => false; |
| + |
| + @override |
| + bool get isStatic => false; |
| + |
| ConstructorElementY(ElementConverter converter, |
| analyzer.ConstructorElement element) |
| : super(converter, element); |
| @@ -792,11 +843,5 @@ class ConstructorElementY extends ElementY |
| get immediateRedirectionTarget => unsupported('immediateRedirectionTarget'); |
| @override |
| - bool get isRedirectingFactory => unsupported('isRedirectingFactory'); |
| - |
| - @override |
| get nestedClosures => unsupported('nestedClosures'); |
| - |
| - @override |
| - get type => unsupported('type'); |
| } |