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

Unified Diff: pkg/docgen/lib/src/models/model_helpers.dart

Issue 716913005: Replace ResolvedNode by ConstantExpression. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 1 month 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 | « pkg/docgen/lib/src/models/annotation.dart ('k') | pkg/docgen/test/metadata_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/docgen/lib/src/models/model_helpers.dart
diff --git a/pkg/docgen/lib/src/models/model_helpers.dart b/pkg/docgen/lib/src/models/model_helpers.dart
index e131472f0ea01e30d571e2a9473599def7a5b312..526ab4aca58ce95dff5faf9fc97d1b2642f87905 100644
--- a/pkg/docgen/lib/src/models/model_helpers.dart
+++ b/pkg/docgen/lib/src/models/model_helpers.dart
@@ -6,6 +6,8 @@ library docgen.model_helpers;
import 'dart:collection';
+import 'package:compiler/src/constants/expressions.dart';
+
import '../exports/dart2js_mirrors.dart' as dart2js_mirrors;
import '../exports/mirrors_util.dart' as dart2js_util;
import '../exports/source_mirrors.dart';
@@ -53,22 +55,119 @@ String getDefaultValue(ParameterMirror mirror) {
return '${mirror.defaultValue}';
}
-// TODO(johnniwinther): Use the `ConstExp` classes instead of `ResolvedNode`.
/// Returns a list of meta annotations assocated with a mirror.
List<Annotation> createAnnotations(DeclarationMirror mirror,
Library owningLibrary) {
var annotations = [];
- for (dart2js_mirrors.ResolvedNode node in
- dart2js_mirrors.BackDoor.metadataSyntaxOf(mirror)) {
- var docgenAnnotation = new Annotation(node, owningLibrary);
- if (!_SKIPPED_ANNOTATIONS.contains(dart2js_util.qualifiedNameOf(
- docgenAnnotation.mirror))) {
+ var info = new AnnotationInfo(mirror, owningLibrary);
+ for (var expr in dart2js_mirrors.BackDoor.metadataSyntaxOf(mirror)) {
+ var docgenAnnotation = expr.accept(const AnnotationCreator(), info);
+ if (docgenAnnotation != null &&
+ !_SKIPPED_ANNOTATIONS.contains(
+ dart2js_util.qualifiedNameOf(docgenAnnotation.mirror))) {
annotations.add(docgenAnnotation);
}
}
return annotations;
}
+class AnnotationInfo {
+ final Mirror mirror;
+ final Library owningLibrary;
+
+ AnnotationInfo(this.mirror, this.owningLibrary);
+}
+
+class AnnotationCreator
+ extends ConstantExpressionVisitor<AnnotationInfo, Annotation> {
+
+ const AnnotationCreator();
+
+ Annotation createAnnotation(var element,
+ AnnotationInfo context,
+ [List<String> parameters = const <String>[]]) {
+ var mirror =
+ dart2js_mirrors.BackDoor.getMirrorFromElement(context.mirror, element);
+ if (mirror != null) {
+ return new Annotation(context.owningLibrary, mirror, parameters);
+ }
+ return null;
+ }
+
+ @override
+ Annotation visitBinary(BinaryConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitConcatenate(ConcatenateConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitConditional(ConditionalConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitConstructed(ConstructedConstantExpresssion exp,
+ [AnnotationInfo context]) {
+ return createAnnotation(exp.target, context,
+ exp.arguments.map((a) => a.getText()).toList());
+ }
+
+ @override
+ Annotation visitFunction(FunctionConstantExpression exp,
+ [AnnotationInfo context]) {
+ return createAnnotation(exp.element, context);
+ }
+
+ @override
+ Annotation visitList(ListConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitMap(MapConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitPrimitive(PrimitiveConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitSymbol(SymbolConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitType(TypeConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitUnary(UnaryConstantExpression exp,
+ [AnnotationInfo context]) {
+ return null;
+ }
+
+ @override
+ Annotation visitVariable(VariableConstantExpression exp,
+ [AnnotationInfo context]) {
+ return createAnnotation(exp.element, context);
+ }
+}
+
/// A declaration is private if itself is private, or the owner is private.
bool isHidden(DeclarationSourceMirror mirror) {
if (mirror is LibraryMirror) {
« no previous file with comments | « pkg/docgen/lib/src/models/annotation.dart ('k') | pkg/docgen/test/metadata_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698