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

Unified Diff: sdk/lib/_internal/dartdoc/lib/universe_serializer.dart

Issue 12217077: Generate separate json files for each library. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: PTAL Created 7 years, 10 months 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
Index: sdk/lib/_internal/dartdoc/lib/universe_serializer.dart
diff --git a/sdk/lib/_internal/dartdoc/lib/universe_serializer.dart b/sdk/lib/_internal/dartdoc/lib/universe_serializer.dart
index d69b8a0a8b4c013bb3265451fd19f1cc4ba074f1..f2ffbcfecb88ecbd65c572587a34a7182bb50c9d 100755
--- a/sdk/lib/_internal/dartdoc/lib/universe_serializer.dart
+++ b/sdk/lib/_internal/dartdoc/lib/universe_serializer.dart
@@ -14,8 +14,18 @@ import '../../compiler/implementation/mirrors/dart2js_mirror.dart' as dart2js;
import '../../libraries.dart';
import 'dartdoc.dart';
+String _stripUri(String uri) {
+ String prefix = "/dart/";
+ int start = uri.indexOf(prefix);
+ if (start != -1) {
+ return uri.substring(start + prefix.length);
+ } else {
+ return uri;
+ }
+}
+
/**
- * Base class for all nodes.
+ * Base class for all elements in the AST.
*/
class Element {
/** Human readable type name for the node. */
@@ -28,8 +38,22 @@ class Element {
final String comment;
/** Children of the node. */
List<Element> children;
+ /** Whether the element is private. */
+ final bool isPrivate;
+
+ /**
+ * Uri containing the definition of the element.
+ */
+ String uri;
+ /**
+ * Line in the original source file that starts the definition of the element.
+ */
+ String line;
- Element(this.kind, this.name, this.id, this.comment);
+ Element(Mirror mirror, this.kind, this.name, this.id, this.comment)
+ : line = mirror.location.line.toString(),
+ isPrivate = _optionalBool(mirror.isPrivate),
+ uri = _stripUri(mirror.location.sourceUri.toString());
void addChild(Element child) {
if (children == null) {
@@ -37,6 +61,24 @@ class Element {
}
children.add(child);
}
+
+ /**
+ * Remove all URIs that exactly match the parent node's URI.
+ * This reduces output file size by about 20%.
+ */
+ void stripDuplicateUris(String parentUri, parentLine) {
+ if (children != null) {
+ for (var child in children) {
+ child.stripDuplicateUris(uri, line);
+ }
+ }
+ if (parentUri == uri) {
+ uri = null;
+ }
+ if (line == parentLine) {
+ line = null;
+ }
+ }
}
/**
@@ -45,12 +87,18 @@ class Element {
*/
bool _optionalBool(bool value) => value == true ? true : null;
+Reference _optionalReference(Mirror mirror) {
+ return (mirror != null && mirror.simpleName != "Dynamic_" &&
+ mirror.simpleName != "dynamic") ?
+ new Reference(mirror) : null;
+}
+
/**
* [Element] describing a Dart library.
*/
class LibraryElement extends Element {
LibraryElement(String name, LibraryMirror mirror)
- : super('library', name, mirror.uri.toString(), computeComment(mirror)) {
+ : super(mirror, 'library', name, name, computeComment(mirror)) {
mirror.functions.forEach((childName, childMirror) {
addChild(new MethodElement(childName, childMirror));
@@ -82,22 +130,26 @@ class LibraryElement extends Element {
class ClassElement extends Element {
/** Base class.*/
final Reference superclass;
+ /** Whether the class is abstract. */
+ final bool isAbstract;
/** Interfaces the class implements. */
List<Reference> interfaces;
ClassElement(String name, ClassMirror mirror)
- : super('class', mirror.simpleName, name, computeComment(mirror)),
- superclass = mirror.superclass != null ?
- new Reference(mirror.superclass) : null {
+ : super(mirror, 'class', mirror.simpleName, name, computeComment(mirror)),
+ superclass = _optionalReference(mirror.superclass),
+ isAbstract = _optionalBool(mirror.isAbstract) {
for (var interface in mirror.superinterfaces) {
if (this.interfaces == null) {
this.interfaces = <Reference>[];
}
- this.interfaces.add(new Reference(interface));
+ this.interfaces.add(_optionalReference(interface));
}
mirror.methods.forEach((childName, childMirror) {
- addChild(new MethodElement(childName, childMirror));
+ if (!childMirror.isConstructor && !childMirror.isGetter) {
+ addChild(new MethodElement(childName, childMirror));
+ }
});
mirror.getters.forEach((childName, childMirror) {
@@ -111,6 +163,10 @@ class ClassElement extends Element {
mirror.constructors.forEach((constructorName, methodMirror) {
addChild(new MethodElement(constructorName, methodMirror, 'constructor'));
});
+
+ for (var typeVariable in mirror.originalDeclaration.typeVariables) {
+ addChild(new TypeParameterElement(typeVariable));
+ }
}
}
@@ -123,9 +179,8 @@ class GetterElement extends Element {
final bool isStatic;
GetterElement(String name, MethodMirror mirror)
- : super('property', mirror.simpleName, name, computeComment(mirror)),
- ref = mirror.returnType != null ?
- new Reference(mirror.returnType) : null,
+ : super(mirror, 'property', mirror.simpleName, name, computeComment(mirror)),
+ ref = _optionalReference(mirror.returnType),
isStatic = _optionalBool(mirror.isStatic);
}
@@ -140,10 +195,9 @@ class MethodElement extends Element {
final bool isStatic;
MethodElement(String name, MethodMirror mirror, [String kind = 'method'])
- : super(kind, name, '$name${mirror.parameters.length}()',
+ : super(mirror, kind, name, '$name${mirror.parameters.length}()',
computeComment(mirror)),
- returnType = mirror.returnType != null ?
- new Reference(mirror.returnType) : null,
+ returnType = _optionalReference(mirror.returnType),
isSetter = _optionalBool(mirror.isSetter),
isOperator = _optionalBool(mirror.isOperator),
isStatic = _optionalBool(mirror.isStatic) {
@@ -164,32 +218,67 @@ class ParameterElement extends Element {
final bool isOptional;
ParameterElement(ParameterMirror mirror)
- : super('param', mirror.simpleName, mirror.simpleName, null),
- ref = new Reference(mirror.type),
+ : super(mirror, 'param', mirror.simpleName, mirror.simpleName, null),
+ ref = _optionalReference(mirror.type),
isOptional = _optionalBool(mirror.isOptional) {
}
}
/**
+ * Element describing a generic type parameter.
+ */
+class TypeParameterElement extends Element {
+ /**
+ * Upper bound for the parameter.
+ *
+ * In the following code sample, [:Bar:] is an upper bound:
+ * [: class Bar<T extends Foo> { } :]
+ */
+ Reference upperBound;
+
+ TypeParameterElement(TypeMirror mirror)
+ : super(mirror, 'typeparam', mirror.simpleName, mirror.simpleName, null),
+ upperBound = mirror.upperBound != null && !mirror.upperBound.isObject ?
+ new Reference(mirror.upperBound) : null;
+}
+
+/**
* Element describing a variable.
*/
class VariableElement extends Element {
/** Type of the variable. */
final Reference ref;
+ /** Whether the variable is static. */
final bool isStatic;
+ /** Whether the variable is final. */
+ final bool isFinal;
VariableElement(String name, VariableMirror mirror)
- : super('property', mirror.simpleName, name, null),
- ref = new Reference(mirror.type),
- isStatic = _optionalBool(mirror.isStatic);
+ : super(mirror, 'variable', mirror.simpleName, name, null),
+ ref = _optionalReference(mirror.type),
+ isStatic = _optionalBool(mirror.isStatic),
+ isFinal = _optionalBool(mirror.isFinal);
}
-// TODO(jacobr): this seems incomplete.
+
/**
- * Element describing a typedef element.
+ * Element describing a typedef.
*/
+
class TypedefElement extends Element {
+ /** Return type of the typedef. */
+ final Reference returnType;
+
TypedefElement(String name, TypedefMirror mirror)
- : super('typedef', mirror.simpleName, name, computeComment(mirror));
+ : super(mirror, 'typedef', mirror.simpleName, name,
+ computeComment(mirror)),
+ returnType = _optionalReference(mirror.value.returnType) {
+ for (var param in mirror.value.parameters) {
+ addChild(new ParameterElement(param));
+ }
+ for (var typeVariable in mirror.originalDeclaration.typeVariables) {
+ addChild(new TypeParameterElement(typeVariable));
+ }
+ }
}
/**
@@ -201,14 +290,13 @@ class Reference {
List<Reference> arguments;
Reference(Mirror mirror)
- : name = mirror.simpleName,
+ : name = mirror.displayName,
refId = getId(mirror) {
if (mirror is ClassMirror) {
- if (mirror is !TypedefMirror
- && mirror.typeArguments.length > 0) {
+ if (mirror is !TypedefMirror && !mirror.typeArguments.isEmpty) {
arguments = <Reference>[];
for (var typeArg in mirror.typeArguments) {
- arguments.add(new Reference(typeArg));
+ arguments.add(_optionalReference(typeArg));
}
}
}
@@ -216,11 +304,8 @@ class Reference {
static String getId(Mirror mirror) {
String id = mirror.simpleName;
- if (mirror is MemberMirror) {
- MemberMirror memberMirror = mirror;
- if (memberMirror.owner != null) {
- id = '${getId(memberMirror.owner)}/$id';
- }
+ if (mirror.owner != null) {
+ id = '${getId(mirror.owner)}/$id';
}
return id;
}

Powered by Google App Engine
This is Rietveld 408576698