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

Unified Diff: client/web/ast.dart

Issue 11636011: Web components based app to view dart docs. Still has rough edges. (Closed) Base URL: https://github.com/dart-lang/dart-api-app.git@master
Patch Set: Created 8 years 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 | « no previous file | client/web/doc_link.html » ('j') | client/web/doc_link.html » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/web/ast.dart
diff --git a/client/web/ast.dart b/client/web/ast.dart
index 1a4801c58d00730f0df700dc1065ed13d742319b..d5c982ea6243da1376d27df3c5c26239fc85ee73 100644
--- a/client/web/ast.dart
+++ b/client/web/ast.dart
@@ -49,15 +49,16 @@ Reference jsonDeserializeReference(Map json) {
}
/**
- * Deserializes JSON into [Element] or [Reference] objects.
+ * Deserializes JSON into an [Element] object.
*/
Element jsonDeserialize(Map json, Element parent) {
if (json == null) return null;
- if (!json.containsKey('kind')) {
+ var kind = json['kind'];
+ if (kind == null) {
throw "Unable to deserialize $json";
}
- switch (json['kind']) {
+ switch (kind) {
case 'class':
return new ClassElement(json, parent);
case 'typedef':
@@ -81,7 +82,7 @@ Element jsonDeserialize(Map json, Element parent) {
}
}
-List<Element> jsonDeserializeArray(List json, Element parent) {
+List<Element> _jsonDeserializeArray(List json, Element parent) {
var ret = <Element>[];
if (json != null) {
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 nit: consider switchting this to if (json == null
Jacob 2013/01/02 19:54:58 Done.
for (Map elementJson in json) {
@@ -91,7 +92,7 @@ List<Element> jsonDeserializeArray(List json, Element parent) {
return ret;
}
-List<Reference> jsonDeserializeReferenceArray(List json) {
+List<Reference> _jsonDeserializeReferenceArray(List json) {
var ret = <Reference>[];
if (json != null) {
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 same here
Jacob 2013/01/02 19:54:58 Done.
for (Map referenceJson in json) {
@@ -107,22 +108,33 @@ List<Reference> jsonDeserializeReferenceArray(List json) {
class Reference {
final String refId;
final String name;
+ final List<Reference> arguments;
+
Reference(Map json) :
name = json['name'],
- refId = json['refId'];
+ refId = json['refId'],
+ arguments = _jsonDeserializeReferenceArray(json['arguments']);
+
+ /**
+ * Short description appropriate for displaying in a tree control or other
+ * situtation where a short description is required.
+ */
+ String get shortDescription {
+ if (arguments.isEmpty) {
+ return name;
+ } else {
+ var params = Strings.join(
+ arguments.map((param) => param.shortDescription), ', ');
+ return '$name<$params>';
+ }
+ }
}
/**
* Lookup a library based on the [libraryId].
- *
- * If the library cannot be found, a stub dummy [Library] will be returned.
*/
LibraryElement lookupLibrary(String libraryId) {
- var library = libraries[libraryId];
- if (library == null) {
- library = new LibraryElement.stub(libraryId, null);
- }
- return library;
+ return libraries[libraryId];
}
/**
@@ -134,7 +146,7 @@ Element lookupReferenceId(String referenceId) {
var parts = referenceId.split(new RegExp('/'));
Element current = lookupLibrary(parts.first);
var result = <Element>[current];
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 'result' seems unused?
Jacob 2013/01/02 19:54:58 yep that was obsolete. fixed.
- for (var i = 1; i < parts.length; i++) {
+ for (var i = 1; i < parts.length && current != null; i++) {
var id = parts[i];
var next = null;
for (var child in current.children) {
@@ -143,9 +155,6 @@ Element lookupReferenceId(String referenceId) {
break;
}
}
- if (next == null) {
- next = new Element.stub(id, current);
- }
current = next;
}
return current;
@@ -160,7 +169,8 @@ _traverseWorld(void callback(Element)) {
}
}
-// TODO(jacobr): remove this method when templates handle safe HTML containing
+// TODO(jacobr): remove this method when templates handle [SafeHTML] containing
+// multiple top level nodes correct.
SafeHtml _markdownToSafeHtml(String text) {
// We currently have to insert an extra span for now because of
// https://github.com/dart-lang/dart-web-components/issues/212
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 dart-web-components ==> web-ui
Jacob 2013/01/02 19:54:58 Done.
@@ -209,6 +219,8 @@ class Element {
SafeHtml _commentHtml;
List<Element> _references;
+ List<Element> _typeParameters;
+
Element(Map json, this.parent) :
name = json['name'],
rawKind = json['kind'],
@@ -218,16 +230,21 @@ class Element {
_uri = json['uri'],
_line = json['line'],
loading = false {
- children = jsonDeserializeArray(json['children'], this);
+ children = _jsonDeserializeArray(json['children'], this);
}
/**
* Returns a kind name that make sense for the UI rather than the AST
* kinds. For example, setters are considered properties instead of
- * methods.
+ * methods in the UI but not the AST.
*/
String get uiKind => kind;
+ /**
+ * Longer possibly multiple word description of the [kind.
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 [kind. => [kind].
Jacob 2013/01/02 19:54:58 Done.
+ */
+ String get kindDescription => uiKind;
+
/** Invoke [callback] on this [Element] and all descendants. */
void traverse(void callback(Element)) {
callback(this);
@@ -237,7 +254,7 @@ class Element {
}
/**
- * Uri containing the definition of the element.
+ * Uri containing the source code for the definition of the element.
*/
String get uri {
Element current = this;
@@ -249,7 +266,7 @@ class Element {
}
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 maybe use a recursive pattern here instead: Strin
Jacob 2013/01/02 19:54:58 Done.
/**
- * Line in the original source file that starts the definition of the element.
+ * Line in the original source file that begins the definition of the element.
*/
String get line {
Element current = this;
@@ -260,16 +277,6 @@ class Element {
return null;
}
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 similary - use recursive pattern for line too.
Jacob 2013/01/02 19:54:58 Done.
- Element.stub(this.id, this.parent) :
- name = '???', // TODO(jacobr): remove/add
- _uri = null,
- _line = null,
- comment = null,
- rawKind = null,
- children = <Element>[],
- isPrivate = null,
- loading = true;
-
/**
* Globally unique identifier for this element.
*/
@@ -300,7 +307,6 @@ class Element {
List<Element> get references {
if (_references == null) {
_references = <Element>[];
- // TODO(jacobr): change to filterWorld and tweak meaning.
_traverseWorld((element) {
if (element.hasReference(refId)) {
_references.add(element);
@@ -322,6 +328,13 @@ class Element {
}
}
+ List<Element> get typeParameters {
+ if (_typeParameters == null) {
+ _typeParameters = _filterByKind('typeparam');
+ }
+ return _typeParameters;
+ }
+
/**
* [SafeHtml] for the comment associated with this [Element] generated from
* the markdow comment associated with the element.
@@ -337,7 +350,16 @@ class Element {
* Short description appropriate for displaying in a tree control or other
* situtation where a short description is required.
*/
- String get shortDescription => name;
+ String get shortDescription {
+ if (typeParameters.isEmpty) {
+ return name;
+ } else {
+ var params = Strings.join(
+ typeParameters.map((param) => param.shortDescription),
+ ', ');
+ return '$name<$params>';
+ }
+ }
/** Possibly normalized representation of the node kind. */
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 strange to see 'possibly' here, maybe explain we c
Jacob 2013/01/02 19:54:58 rewrote comment.
String get kind => rawKind;
@@ -414,7 +436,6 @@ class LibraryElement extends Element {
List<ElementBlock> _childBlocks;
LibraryElement(json, Element parent) : super(json, parent);
- LibraryElement.stub(String id, Element parent) : super.stub(id, parent);
/** Returns all classes defined by the library. */
Map<String, ClassElement> get classes {
@@ -440,7 +461,9 @@ class LibraryElement extends Element {
* the Library.
*/
List<ElementBlock> get childBlocks {
- if (_childBlocks == null) _childBlocks = _createElementBlocks(LIBRARY_KINDS);
+ if (_childBlocks == null) {
+ _childBlocks = _createElementBlocks(LIBRARY_KINDS);
+ }
return _childBlocks;
}
}
@@ -458,16 +481,13 @@ class ClassElement extends Element {
List<ClassElement> _superclasses;
List<ClassElement> _subclasses;
+ final bool isAbstract;
ClassElement(Map json, Element parent)
: super(json, parent),
- interfaces = jsonDeserializeReferenceArray(json['interfaces']),
- superclass = jsonDeserializeReference(json['superclass']);
-
- ClassElement.stub(String id, Element parent)
- : super.stub(id, parent),
- interfaces = [],
- superclass = null;
+ interfaces = _jsonDeserializeReferenceArray(json['interfaces']),
+ superclass = jsonDeserializeReference(json['superclass']),
+ isAbstract = json['isAbstract'];
/** Returns all superclasses of this class. */
List<ClassElement> get superclasses {
@@ -486,6 +506,9 @@ class ClassElement extends Element {
return _superclasses;
}
+ String get kindDescription =>
+ isAbstract == true ? 'abstract $uiKind' : uiKind;
+
/**
* Returns classes that directly extend or implement this class.
*/
@@ -524,9 +547,12 @@ class ClassElement extends Element {
}
}
+/**
+ * Element describing a typedef.
+ */
class TypedefElement extends Element {
final Reference returnType;
- List<ParameterElement> _parameters;
+ List<Element> _parameters;
TypedefElement(Map json, Element parent) : super(json, parent),
returnType = jsonDeserializeReference(json['returnType']);
@@ -534,7 +560,7 @@ class TypedefElement extends Element {
/**
* Returns a list of the parameters of the typedef.
*/
- List<ParameterElement> get parameters {
+ List<Element> get parameters {
if (_parameters == null) {
_parameters = _filterByKind('param');
}
@@ -584,12 +610,12 @@ abstract class MethodElementBase extends Element {
}
Reference get returnType;
- List<ParameterElement> _parameters;
+ List<Element> _parameters;
/**
* Returns a list of the parameters of the Method.
*/
- List<ParameterElement> get parameters {
+ List<Element> get parameters {
if (_parameters == null) {
_parameters = _filterByKind('param');
}
@@ -631,12 +657,23 @@ class TypeParameterElement extends Element {
super(json, parent),
upperBound = jsonDeserializeReference(json['upperBound']);
+ String get shortDescription {
+ if (upperBound == null) {
+ return name;
+ } else {
+ return '$name extends ${upperBound.shortDescription}';
Siggi Cherem (dart-lang) 2012/12/19 19:47:33 mmm. I wonder if we want to simply make shortDecri
Jacob 2013/01/02 19:54:58 I like to be specific about this as there are many
+ }
+ }
+
bool hasReference(String referenceId) {
if (super.hasReference(referenceId)) return true;
return upperBound != null && upperBound.refId == referenceId;
}
}
+/**
+ * Element describing a method.
+ */
class MethodElement extends MethodElementBase {
final Reference returnType;
@@ -645,6 +682,9 @@ class MethodElement extends MethodElementBase {
returnType = jsonDeserializeReference(json['returnType']);
}
+/**
+ * Element describing a property getter.
+ */
class PropertyElement extends MethodElementBase {
final Reference returnType;
@@ -654,6 +694,9 @@ class PropertyElement extends MethodElementBase {
returnType = jsonDeserializeReference(json['ref']);
}
+/**
+ * Element describing a variable.
+ */
class VariableElement extends MethodElementBase {
final Reference returnType;
/** Whether this variable is final. */
@@ -666,6 +709,9 @@ class VariableElement extends MethodElementBase {
isFinal = json['isFinal'];
}
+/**
+ * Element describing a constructor.
+ */
class ConstructorElement extends MethodElementBase {
ConstructorElement(json, Element parent) : super(json, parent);
« no previous file with comments | « no previous file | client/web/doc_link.html » ('j') | client/web/doc_link.html » ('J')

Powered by Google App Engine
This is Rietveld 408576698