Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(349)

Unified Diff: reflectable/lib/src/transformer_implementation.dart

Issue 1181993003: Add support for getters, setters and constructors in declarations of classMirrors. (Closed) Base URL: https://github.com/dart-lang/reflectable.git@master
Patch Set: Reintroduce abstract members in declarations Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « reflectable/lib/src/mirrors_unimpl.dart ('k') | test_reflectable/.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
}
}
« no previous file with comments | « reflectable/lib/src/mirrors_unimpl.dart ('k') | test_reflectable/.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698