Chromium Code Reviews| Index: lib/mirrors/mirrors.dart |
| =================================================================== |
| --- lib/mirrors/mirrors.dart (revision 9071) |
| +++ 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]. |
| + * The isolate of origin for this [Mirror]. |
|
cshapiro
2012/06/28 23:57:47
I am confused by the names. The type is an Isolat
turnidge
2012/07/09 23:45:17
Fixed the comment. In an upcoming CL, this will b
|
| */ |
| 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. |
| */ |