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

Unified Diff: pkg/analysis_server/lib/src/status/element_writer.dart

Issue 934603003: Add properties to the element tree (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add missed file Created 5 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: pkg/analysis_server/lib/src/status/element_writer.dart
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index 6625a4378fc3f8cdef250484dfbf298fdca8d271..ecae4a93e4efab59bdb5182b82262ecb4a0392fc 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -7,33 +7,39 @@ library analysis_server.src.status.element_writer;
import 'dart:convert';
import 'package:analysis_server/src/get_handler.dart';
+import 'package:analysis_server/src/status/tree_writer.dart';
import 'package:analyzer/src/generated/element.dart';
+import 'dart:collection';
scheglov 2015/02/16 21:20:29 Sort members?
Brian Wilkerson 2015/02/16 21:41:35 Done
/**
* A visitor that will produce an HTML representation of an element structure.
*/
-class ElementWriter extends GeneralizingElementVisitor {
- /**
- * The buffer on which the HTML is to be written.
- */
- final StringBuffer buffer;
-
- /**
- * The current level of indentation.
- */
- int indentLevel = 0;
-
+class ElementWriter extends GeneralizingElementVisitor with TreeWriter {
/**
* Initialize a newly created element writer to write the HTML representation
* of visited elements on the given [buffer].
*/
- ElementWriter(this.buffer);
+ ElementWriter(StringBuffer buffer) {
+ this.buffer = buffer;
+ }
@override
void visitElement(Element element) {
- for (int i = 0; i < indentLevel; i++) {
- buffer.write('&#x250A;&nbsp;&nbsp;&nbsp;');
+ _writeElement(element);
+ writeProperties(_computeProperties(element));
+ indentLevel++;
+ try {
+ element.visitChildren(this);
+ } finally {
+ indentLevel--;
}
+ }
+
+ /**
+ * Write a representation of the given [node] to the buffer.
+ */
+ void _writeElement(Element element) {
+ indent();
if (element.isSynthetic) {
buffer.write('<i>');
}
@@ -55,11 +61,118 @@ class ElementWriter extends GeneralizingElementVisitor {
}
}
buffer.write('<br>');
- indentLevel++;
- try {
- element.visitChildren(this);
- } finally {
- indentLevel--;
+ }
+
+ /**
+ * Write a representation of the properties of the given [node] to the buffer.
+ */
+ Map<String, Object> _computeProperties(Element element) {
+ Map<String, Object> properties = new HashMap<String, Object>();
+
+ properties['isDeprecated'] = element.isDeprecated;
+ properties['isOverride'] = element.isOverride;
+ properties['metadata'] = element.metadata;
+ properties['nameOffset'] = element.nameOffset;
+ if (element is ClassElement) {
+ properties['hasNonFinalField'] = element.hasNonFinalField;
+ properties['hasReferenceToSuper'] = element.hasReferenceToSuper;
+ properties['hasStaticMember'] = element.hasStaticMember;
+ properties['interfaces'] = element.interfaces;
+ properties['isAbstract'] = element.isAbstract;
+ properties['isEnum'] = element.isEnum;
+ properties['isOrInheritsProxy'] = element.isOrInheritsProxy;
+ properties['isProxy'] = element.isProxy;
+ properties['isTypedef'] = element.isTypedef;
+ properties['isValidMixin'] = element.isValidMixin;
+ properties['mixins'] = element.mixins;
+ properties['supertype'] = element.supertype;
+ properties['type'] = element.type;
+ }
+ if (element is CompilationUnitElement) {
+ properties['isEnumConstant'] = element.hasLoadLibraryFunction;
+ properties['source'] = element.source;
+ }
+ if (element is ConstFieldElementImpl) {
+ properties['evaluationResult'] = element.evaluationResult;
+ }
+ if (element is ConstLocalVariableElementImpl) {
+ properties['evaluationResult'] = element.evaluationResult;
+ }
+ if (element is ConstTopLevelVariableElementImpl) {
+ properties['evaluationResult'] = element.evaluationResult;
+ }
+ if (element is ConstructorElement) {
+ properties['isConst'] = element.isConst;
+ properties['isDefaultConstructor'] = element.isDefaultConstructor;
+ properties['isFactory'] = element.isFactory;
+ properties['redirectedConstructor'] = element.redirectedConstructor;
+ }
+ if (element is ExecutableElement) {
+ properties['isAsynchronous'] = element.isAsynchronous;
+ properties['isGenerator'] = element.isGenerator;
+ properties['isOperator'] = element.isOperator;
+ properties['isStatic'] = element.isStatic;
+ properties['isSynchronous'] = element.isSynchronous;
+ properties['returnType'] = element.returnType;
+ properties['type'] = element.type;
+ }
+ if (element is ExportElement) {
+ properties['combinators'] = element.combinators;
+ properties['library'] = element.library;
+ }
+ if (element is FieldElement) {
+ properties['isEnumConstant'] = element.isEnumConstant;
+ }
+ if (element is FieldFormalParameterElement) {
+ properties['field'] = element.field;
+ }
+ if (element is FunctionTypeAliasElement) {
+ properties['returnType'] = element.returnType;
+ properties['type'] = element.type;
}
+ if (element is ImportElement) {
+ properties['combinators'] = element.combinators;
+ properties['library'] = element.library;
+ }
+ if (element is LibraryElement) {
+ properties['definingCompilationUnit'] = element.definingCompilationUnit;
+ properties['entryPoint'] = element.entryPoint;
+ properties['hasExtUri'] = element.hasExtUri;
+ properties['hasLoadLibraryFunction'] = element.hasLoadLibraryFunction;
+ properties['isBrowserApplication'] = element.isBrowserApplication;
+ }
+ if (element is LocalElement) {
+ properties['visibleRange'] = element.visibleRange;
+ }
+ if (element is MethodElement) {
+ properties['isAbstract'] = element.isAbstract;
+ }
+ if (element is ParameterElement) {
+ properties['defaultValueCode'] = element.defaultValueCode;
+ properties['isInitializingFormal'] = element.isInitializingFormal;
+ properties['parameterKind'] = element.parameterKind;
+ }
+ if (element is PropertyAccessorElement) {
+ properties['isAbstract'] = element.isAbstract;
+ properties['isGetter'] = element.isGetter;
+ properties['isSetter'] = element.isSetter;
+ }
+ if (element is PropertyInducingElement) {
+ properties['isStatic'] = element.isStatic;
+ properties['propagatedType'] = element.propagatedType;
+ }
+ if (element is TypeParameterElement) {
+ properties['bound'] = element.bound;
+ }
+ if (element is UriReferencedElement) {
+ properties['uri'] = element.uri;
+ }
+ if (element is VariableElement) {
+ properties['isConst'] = element.isConst;
+ properties['isFinal'] = element.isFinal;
+ properties['type'] = element.type;
+ }
+
+ return properties;
}
}

Powered by Google App Engine
This is Rietveld 408576698