Index: sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart |
index 5ae18d7c68b2cd7aff3f4e5b3cbc3287757f41f9..ad90a7a8cf30ae2b2eed919f23428b0f41853fe8 100644 |
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart |
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart |
@@ -458,6 +458,19 @@ class Dart2JsCompilationUnitMirror extends Dart2JsMirror with ContainerMixin { |
Uri get uri => _element.script.resourceUri; |
} |
+class ResolvedNode { |
+ final node; |
+ final _elements; |
+ final _mirrorSystem; |
+ ResolvedNode(this.node, this._elements, this._mirrorSystem); |
+ |
+ Mirror resolvedMirror(node) { |
+ var element = _elements[node]; |
+ if (element == null) return null; |
+ return _convertElementToDeclarationMirror(_mirrorSystem, element); |
+ } |
+} |
+ |
/** |
* Transitional class that allows access to features that have not yet |
* made it to the mirror API. |
@@ -470,4 +483,33 @@ class BackDoor { |
return library._element.compilationUnits.toList().map( |
(cu) => new Dart2JsCompilationUnitMirror(cu, library)).toList(); |
} |
+ |
+ static Iterable metadataSyntaxOf(Dart2JsElementMirror declaration) { |
+ Compiler compiler = declaration.mirrorSystem.compiler; |
+ return declaration._element.metadata.toList().map( |
+ (MetadataAnnotation metadata) { |
+ var node = metadata.parseNode(compiler); |
+ Element annotatedElement = metadata.annotatedElement; |
+ var context = annotatedElement.enclosingElement; |
+ if (context == null) { |
+ context = annotatedElement; |
+ } |
+ return new ResolvedNode( |
+ node, context.treeElements, declaration.mirrorSystem); |
+ }); |
+ } |
+ |
+ static ResolvedNode initializerSyntaxOf(Dart2JsFieldMirror variable) { |
+ var node = variable._variable.initializer; |
+ if (node == null) return null; |
+ return new ResolvedNode( |
+ node, variable._variable.treeElements, variable.mirrorSystem); |
+ } |
+ |
+ static ResolvedNode defaultValueSyntaxOf(Dart2JsParameterMirror parameter) { |
+ if (!parameter.hasDefaultValue) return null; |
+ var node = parameter._element.initializer; |
+ return new ResolvedNode( |
+ node, parameter.owner._element.treeElements, parameter.mirrorSystem); |
+ } |
} |