| Index: reflectable/lib/src/transformer_implementation.dart
|
| diff --git a/reflectable/lib/src/transformer_implementation.dart b/reflectable/lib/src/transformer_implementation.dart
|
| index d9bf08f01afce9aac6512fed1a83ab9f607c0b3d..6525af45de8d4e8bf4c2afe4b0c8ebe92105adc6 100644
|
| --- a/reflectable/lib/src/transformer_implementation.dart
|
| +++ b/reflectable/lib/src/transformer_implementation.dart
|
| @@ -68,6 +68,8 @@ class ClassDomain {
|
| final ClassElement classElement;
|
| final Iterable<MethodElement> invokableMethods;
|
| final Iterable<MethodElement> declaredMethods;
|
| + final Iterable<PropertyAccessorElement> declaredAccessors;
|
| + final Iterable<ConstructorElement> constructors;
|
|
|
| ReflectorDomain reflectorDomain;
|
| String staticClassMirrorName;
|
| @@ -75,14 +77,12 @@ class ClassDomain {
|
| String get baseName => classElement.name;
|
|
|
| ClassDomain(this.classElement, this.invokableMethods, this.declaredMethods,
|
| - this.reflectorDomain);
|
| + this.declaredAccessors, this.constructors, this.reflectorDomain);
|
|
|
| Iterable<ExecutableElement> get declarations {
|
| - // TODO(sigurdm): Include constructors.
|
| // TODO(sigurdm): Include fields.
|
| - // TODO(sigurdm): Include getters and setters.
|
| // TODO(sigurdm): Include type variables (if we decide to keep them).
|
| - return [declaredMethods].expand((x) => x);
|
| + return [declaredMethods, declaredAccessors, constructors].expand((x) => x);
|
| }
|
|
|
| /// Returns an integer encoding the kind and attributes of the given
|
| @@ -94,14 +94,15 @@ class ClassDomain {
|
| } else if (element is ConstructorElement) {
|
| if (element.isFactory) {
|
| result = constants.factoryConstructor;
|
| - } else if (element.redirectedConstructor != null) {
|
| - result = constants.redirectingConstructor;
|
| } else {
|
| result = constants.generativeConstructor;
|
| }
|
| if (element.isConst) {
|
| result += constants.constAttribute;
|
| }
|
| + if (element.redirectedConstructor != null) {
|
| + result += constants.redirectingConstructor;
|
| + }
|
| } else {
|
| result = constants.method;
|
| }
|
| @@ -117,13 +118,22 @@ class ClassDomain {
|
| return result;
|
| }
|
|
|
| + String nameOfDeclaration(ExecutableElement element) {
|
| + if (element is ConstructorElement) {
|
| + return element.name == ""
|
| + ? classElement.name
|
| + : "${classElement.name}.${element.name}";
|
| + }
|
| + return element.name;
|
| + }
|
| +
|
| /// Returns a String with the textual representation of the declarations-map.
|
| String get declarationsString {
|
| Iterable<String> declarationParts = declarations.map(
|
| - (ExecutableElement instanceMember) {
|
| - return '"${instanceMember.name}": '
|
| - 'new MethodMirrorImpl("${instanceMember.name}", '
|
| - '${_declarationDescriptor(instanceMember)}, this)';
|
| + (ExecutableElement declaration) {
|
| + return '"${nameOfDeclaration(declaration)}": '
|
| + 'new MethodMirrorImpl("${declaration.name}", '
|
| + '${_declarationDescriptor(declaration)}, this)';
|
| });
|
| return "{${declarationParts.join(", ")}}";
|
| }
|
| @@ -389,8 +399,9 @@ class TransformerImplementation {
|
| Iterable<MethodElement> declaredMethods(
|
| ClassElement classElement, Capabilities capabilities) {
|
| return classElement.methods.where((MethodElement method) {
|
| + if (method.isAbstract) return false;
|
| if (method.isStatic) {
|
| - // TODO(sigurdm): Ask capability about support.
|
| + // TODO(sigurdm): Ask capabilities about support.
|
| return true;
|
| } else {
|
| return capabilities.supportsInstanceInvoke(method.name);
|
| @@ -398,6 +409,26 @@ class TransformerImplementation {
|
| });
|
| }
|
|
|
| + Iterable<PropertyAccessorElement> declaredAccessors(
|
| + ClassElement classElement, Capabilities capabilities) {
|
| + return classElement.accessors.where((PropertyAccessorElement accessor) {
|
| + if (accessor.isStatic) {
|
| + // TODO(sigurdm): Ask capabilities about support.
|
| + return true;
|
| + } else {
|
| + return capabilities.supportsInstanceInvoke(accessor.name);
|
| + }
|
| + });
|
| + }
|
| +
|
| + Iterable<ConstructorElement> declaredConstructors(
|
| + ClassElement classElement, Capabilities capabilities) {
|
| + return classElement.constructors.where((ConstructorElement constructor) {
|
| + // TODO(sigurdm): Ask capabilities about support.
|
| + return true;
|
| + });
|
| + }
|
| +
|
| Iterable<MethodElement> invocableInstanceMethods(
|
| ClassElement classElement, Capabilities capabilities) {
|
| return allMethods(classElement).where((MethodElement method) {
|
| @@ -464,8 +495,13 @@ class TransformerImplementation {
|
| invocableInstanceMethods(type, domain.capabilities).toList();
|
| List<MethodElement> declaredMethodsOfClass =
|
| declaredMethods(type, domain.capabilities).toList();
|
| - domain.annotatedClasses.add(new ClassDomain(
|
| - type, instanceMethods, declaredMethodsOfClass, domain));
|
| + List<PropertyAccessorElement> declaredAccessorsOfClass =
|
| + declaredAccessors(type, domain.capabilities).toList();
|
| + List<ConstructorElement> declaredConstructorsOfClass =
|
| + declaredConstructors(type, domain.capabilities).toList();
|
| + domain.annotatedClasses.add(new ClassDomain(type, instanceMethods,
|
| + declaredMethodsOfClass, declaredAccessorsOfClass,
|
| + declaredConstructorsOfClass, domain));
|
| }
|
| }
|
| }
|
|
|