OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library mirrors; | 5 library mirrors; |
6 | 6 |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 import 'dart:uri'; | 8 import 'dart:uri'; |
9 | 9 |
10 // TODO(rnystrom): Use "package:" URL (#4968). | 10 // TODO(rnystrom): Use "package:" URL (#4968). |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 TypeMirror get voidType; | 68 TypeMirror get voidType; |
69 } | 69 } |
70 | 70 |
71 | 71 |
72 /** | 72 /** |
73 * An entity in the mirror system. | 73 * An entity in the mirror system. |
74 */ | 74 */ |
75 abstract class Mirror { | 75 abstract class Mirror { |
76 static const String UNARY_MINUS = 'unary-'; | 76 static const String UNARY_MINUS = 'unary-'; |
77 | 77 |
| 78 // TODO(johnniwinther): Do we need this on all mirrors? |
78 /** | 79 /** |
79 * Returns the mirror system which contains this mirror. | 80 * Returns the mirror system which contains this mirror. |
80 */ | 81 */ |
81 MirrorSystem get mirrors; | 82 MirrorSystem get mirrors; |
82 } | 83 } |
83 | 84 |
84 abstract class DeclarationMirror implements Mirror { | 85 abstract class DeclarationMirror implements Mirror { |
85 /** | 86 /** |
86 * The simple name of the entity. The simple name is unique within the | 87 * The simple name of the entity. The simple name is unique within the |
87 * scope of the entity declaration. | 88 * scope of the entity declaration. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 */ | 134 */ |
134 bool get isPrivate; | 135 bool get isPrivate; |
135 | 136 |
136 /** | 137 /** |
137 * Is this declaration top-level? | 138 * Is this declaration top-level? |
138 * | 139 * |
139 * This is defined to be equivalent to: | 140 * This is defined to be equivalent to: |
140 * [:mirror.owner != null && mirror.owner is LibraryMirror:] | 141 * [:mirror.owner != null && mirror.owner is LibraryMirror:] |
141 */ | 142 */ |
142 bool get isTopLevel; | 143 bool get isTopLevel; |
| 144 |
| 145 /** |
| 146 * A list of the metadata associated with this declaration. |
| 147 */ |
| 148 List<InstanceMirror> get metadata; |
| 149 } |
| 150 |
| 151 abstract class ObjectMirror implements Mirror { |
| 152 /** |
| 153 * Invokes a getter and returns a mirror on the result. The getter |
| 154 * can be the implicit getter for a field or a user-defined getter |
| 155 * method. |
| 156 */ |
| 157 Future<InstanceMirror> getField(String fieldName); |
143 } | 158 } |
144 | 159 |
145 /** | 160 /** |
| 161 * An [InstanceMirror] reflects an instance of a Dart language object. |
| 162 */ |
| 163 abstract class InstanceMirror implements ObjectMirror { |
| 164 /** |
| 165 * A mirror on the type of the reflectee. |
| 166 */ |
| 167 ClassMirror get type; |
| 168 |
| 169 /** |
| 170 * Does [reflectee] contain the instance reflected by this mirror? |
| 171 * This will always be true in the local case (reflecting instances |
| 172 * in the same isolate), but only true in the remote case if this |
| 173 * mirror reflects a simple value. |
| 174 * |
| 175 * A value is simple if one of the following holds: |
| 176 * - the value is null |
| 177 * - the value is of type [num] |
| 178 * - the value is of type [bool] |
| 179 * - the value is of type [String] |
| 180 */ |
| 181 bool get hasReflectee; |
| 182 |
| 183 /** |
| 184 * If the [InstanceMirror] reflects an instance it is meaningful to |
| 185 * have a local reference to, we provide access to the actual |
| 186 * instance here. |
| 187 * |
| 188 * If you access [reflectee] when [hasReflectee] is false, an |
| 189 * exception is thrown. |
| 190 */ |
| 191 get reflectee; |
| 192 } |
| 193 |
| 194 /** |
| 195 * Specialized [InstanceMirror] used for reflection on constant lists. |
| 196 */ |
| 197 abstract class ListInstanceMirror |
| 198 implements InstanceMirror, Sequence<Future<InstanceMirror>> { |
| 199 |
| 200 } |
| 201 |
| 202 /** |
| 203 * Specialized [InstanceMirror] used for reflection on constant maps. |
| 204 */ |
| 205 abstract class MapInstanceMirror implements InstanceMirror { |
| 206 /** |
| 207 * Returns a collection containing all the keys in the map. |
| 208 */ |
| 209 Collection<String> get keys; |
| 210 |
| 211 /** |
| 212 * Returns a future on the instance mirror of the value for the given key or |
| 213 * null if key is not in the map. |
| 214 */ |
| 215 Future<InstanceMirror> operator[](String key); |
| 216 |
| 217 /** |
| 218 * The number of {key, value} pairs in the map. |
| 219 */ |
| 220 int get length; |
| 221 } |
| 222 |
| 223 /** |
| 224 * Specialized [InstanceMirror] used for reflection on type constants. |
| 225 */ |
| 226 abstract class TypeInstanceMirror implements InstanceMirror { |
| 227 /** |
| 228 * Returns the type mirror for the type represented by the reflected type |
| 229 * constant. |
| 230 */ |
| 231 TypeMirror get representedType; |
| 232 } |
| 233 |
| 234 /** |
146 * Common interface for classes and libraries. | 235 * Common interface for classes and libraries. |
147 */ | 236 */ |
148 abstract class ContainerMirror implements Mirror { | 237 abstract class ContainerMirror implements Mirror { |
149 | 238 |
150 /** | 239 /** |
151 * An immutable map from from names to mirrors for all members in this | 240 * An immutable map from from names to mirrors for all members in this |
152 * container. | 241 * container. |
153 */ | 242 */ |
154 Map<String, MemberMirror> get members; | 243 Map<String, MemberMirror> get members; |
155 } | 244 } |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 /** | 702 /** |
614 * Returns the URI where the source originated. | 703 * Returns the URI where the source originated. |
615 */ | 704 */ |
616 Uri get sourceUri; | 705 Uri get sourceUri; |
617 | 706 |
618 /** | 707 /** |
619 * Returns the text of this source. | 708 * Returns the text of this source. |
620 */ | 709 */ |
621 String get sourceText; | 710 String get sourceText; |
622 } | 711 } |
| 712 |
| 713 /** |
| 714 * Class used for encoding dartdoc comments as metadata annotations. |
| 715 */ |
| 716 class DartdocComment { |
| 717 final String text; |
| 718 |
| 719 const DartdocComment(this.text); |
| 720 } |
OLD | NEW |