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)); |
} |
} |
} |