Index: lib/mirrors/mirrors.dart |
=================================================================== |
--- lib/mirrors/mirrors.dart (revision 9490) |
+++ lib/mirrors/mirrors.dart (working copy) |
@@ -15,7 +15,6 @@ |
// ...the getter is named 'myField' and the setter is named |
// 'myField='. This allows us to assign unique names to getters and |
// setters for the purposes of member lookup. |
-// TODO(turnidge): Implement getter/setter lookup. |
// |
// TODO(turnidge): Finish implementing this api. |
@@ -48,7 +47,7 @@ |
*/ |
interface Mirror { |
/** |
- * The isolate of orgin for this [Mirror]. |
+ * A mirror on the originating isolate for this [Mirror]. |
*/ |
final IsolateMirror isolate; |
} |
@@ -92,8 +91,6 @@ |
* Invokes the named function and returns a mirror on the result. |
* |
* TODO(turnidge): Properly document. |
- * |
- * TODO(turnidge): what to do if invoke causes the death of the reflectee? |
*/ |
Future<InstanceMirror> invoke(String memberName, |
List<Object> positionalArguments, |
@@ -118,17 +115,16 @@ |
* If the [InstanceMirror] refers to a simple value, we provide |
* access to the actual value here. |
* |
- * A value is simple if: |
- * - it is null |
- * - it is of type [num] |
- * - it is of type [bool] |
- * - it is of type [String] |
+ * A value is simple if one of the following holds: |
+ * - the value is null |
+ * - the value is of type [num] |
+ * - the value is of type [bool] |
+ * - the value is of type [String] |
* |
* If you access [simpleValue] when [hasSimpleValue] is false an |
* exception is thrown. |
*/ |
final simpleValue; |
- |
} |
/** |
@@ -170,14 +166,26 @@ |
/** |
* An immutable map from from names to mirrors for all members of |
- * this type, including inherited members. |
+ * this type. |
* |
* The members of an interface are its constructors, methods, |
* fields, getters, and setters. |
* |
- * TODO(turnidge): Currently empty. |
+ * This does not include inherited members. |
*/ |
Map<String, Mirror> members(); |
+ |
+ /** |
+ * An immutable map from names to mirrors for all method, |
+ * constructor, getter, and setter declarations in this library. |
+ */ |
+ Map<String, MethodMirror> methods(); |
+ |
+ /** |
+ * An immutable map from names to mirrors for all variable |
+ * declarations in this library. |
+ */ |
+ Map<String, VariableMirror> variables(); |
} |
/** |
@@ -200,18 +208,160 @@ |
final String url; |
/** |
- * An immutable map from from top-level names to mirrors for all |
- * members in this library. |
+ * An immutable map from from names to mirrors for all members in |
+ * this library. |
* |
* The members of a library are its top-level classes, interfaces, |
* functions, variables, getters, and setters. |
- * |
- * TODO(turnidge): Currently only contains classes and interfaces. |
*/ |
Map<String, Mirror> members(); |
+ |
+ /** |
+ * An immutable map from names to mirrors for all class and |
+ * interface declarations in this library. |
+ */ |
+ Map<String, InterfaceMirror> classes(); |
+ |
+ /** |
+ * An immutable map from names to mirrors for all function |
+ * declarations in this library. |
+ */ |
+ Map<String, MethodMirror> functions(); |
+ |
+ /** |
+ * An immutable map from names to mirrors for all variable |
+ * declarations in this library. |
+ */ |
+ Map<String, VariableMirror> variables(); |
} |
/** |
+ * A [MethodMirror] reflects a Dart language function, method, |
+ * constructor, getter, or setter. |
+ */ |
+interface MethodMirror { |
+ /** |
+ * The name of this function. |
+ */ |
+ final String simpleName; |
+ |
+ /** |
+ * A mirror on the owner of this function. This is the declaration |
+ * immediately surrounding the reflectee. |
+ * |
+ * For top-level functions, this will be a [LibraryMirror] and for |
+ * methods, constructors, getters, and setters, this will be an |
+ * [InterfaceMirror]. |
+ */ |
+ Mirror owner; |
+ |
+ // Ownership |
+ |
+ /** |
+ * Does this mirror reflect a top-level function? |
+ */ |
+ bool isTopLevel; |
+ |
+ /** |
+ * Does this mirror reflect a static method? |
+ * |
+ * For the purposes of the mirrors library, a top-level function is |
+ * considered static. |
+ */ |
+ bool isStatic; |
+ |
+ // Method kind |
+ |
+ /** |
+ * Does this mirror reflect a regular function or method? |
+ * |
+ * A method is regular if it is not a getter, setter, or constructor. |
+ */ |
+ bool isMethod; |
+ |
+ /** |
+ * Does this mirror reflect an abstract method? |
+ */ |
+ bool isAbstract; |
+ |
+ /** |
+ * Does this mirror reflect a getter? |
+ */ |
+ bool isGetter; |
+ |
+ /** |
+ * Does this mirror reflect a setter? |
+ */ |
+ bool isSetter; |
+ |
+ /** |
+ * Does this mirror reflect a constructor? |
+ */ |
+ bool isConstructor; |
+ |
+ // Constructor kind |
+ |
+ /** |
+ * Does this mirror reflect a const constructor? |
+ */ |
+ bool isConstConstructor; |
+ |
+ /** |
+ * Does this mirror reflect a generative constructor? |
+ */ |
+ bool isGenerativeConstructor; |
+ |
+ /** |
+ * Does this mirror reflect a redirecting constructor? |
+ */ |
+ bool isRedirectingConstructor; |
+ |
+ /** |
+ * Does this mirror reflect a factory constructor? |
+ */ |
+ bool isFactoryConstructor; |
+} |
+ |
+ |
+/** |
+ * A [VariableMirror] reflects a Dart language variable. |
+ */ |
+interface VariableMirror { |
+ /** |
+ * The name of this variable |
+ */ |
+ final String simpleName; |
+ |
+ /** |
+ * A mirror on the owner of this method. The owner is the |
+ * declaration immediately surrounding the reflectee. |
+ * |
+ * For top-level variables, this will be a [LibraryMirror] and for |
+ * class and interface variables, this will be an [InterfaceMirror]. |
+ */ |
+ Mirror owner; |
+ |
+ /** |
+ * Does this mirror reflect a top-level variable? |
+ */ |
+ bool isTopLevel; |
+ |
+ /** |
+ * Does this mirror reflect a static variable? |
+ * |
+ * For the purposes of the mirror library, top-level variables are |
+ * implicitly declared static. |
+ */ |
+ bool isStatic; |
+ |
+ /** |
+ * Does this mirror reflect a final variable? |
+ */ |
+ bool isFinal; |
+} |
+ |
+ |
+/** |
* When an error occurs during the mirrored execution of code, a |
* [MirroredError] is thrown. |
* |
@@ -230,7 +380,7 @@ |
* the reflector and reflectee share the same isolate, then they |
* will both suffer. If the reflector and reflectee are in distinct |
* isolates, then we hope to provide some information about the |
- * isolate death, but this is yet to be implemented. |
+ * isolate death, but this has yet to be implemented. |
* |
* TODO(turnidge): Specify the behavior for remote fatal errors. |
*/ |