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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analysis_server.src.status.element_writer; 5 library analysis_server.src.status.element_writer;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 8
9 import 'package:analysis_server/src/get_handler.dart'; 9 import 'package:analysis_server/src/get_handler.dart';
10 import 'package:analysis_server/src/status/tree_writer.dart';
10 import 'package:analyzer/src/generated/element.dart'; 11 import 'package:analyzer/src/generated/element.dart';
12 import 'dart:collection';
scheglov 2015/02/16 21:20:29 Sort members?
Brian Wilkerson 2015/02/16 21:41:35 Done
11 13
12 /** 14 /**
13 * A visitor that will produce an HTML representation of an element structure. 15 * A visitor that will produce an HTML representation of an element structure.
14 */ 16 */
15 class ElementWriter extends GeneralizingElementVisitor { 17 class ElementWriter extends GeneralizingElementVisitor with TreeWriter {
16 /**
17 * The buffer on which the HTML is to be written.
18 */
19 final StringBuffer buffer;
20
21 /**
22 * The current level of indentation.
23 */
24 int indentLevel = 0;
25
26 /** 18 /**
27 * Initialize a newly created element writer to write the HTML representation 19 * Initialize a newly created element writer to write the HTML representation
28 * of visited elements on the given [buffer]. 20 * of visited elements on the given [buffer].
29 */ 21 */
30 ElementWriter(this.buffer); 22 ElementWriter(StringBuffer buffer) {
23 this.buffer = buffer;
24 }
31 25
32 @override 26 @override
33 void visitElement(Element element) { 27 void visitElement(Element element) {
34 for (int i = 0; i < indentLevel; i++) { 28 _writeElement(element);
35 buffer.write('&#x250A;&nbsp;&nbsp;&nbsp;'); 29 writeProperties(_computeProperties(element));
30 indentLevel++;
31 try {
32 element.visitChildren(this);
33 } finally {
34 indentLevel--;
36 } 35 }
36 }
37
38 /**
39 * Write a representation of the given [node] to the buffer.
40 */
41 void _writeElement(Element element) {
42 indent();
37 if (element.isSynthetic) { 43 if (element.isSynthetic) {
38 buffer.write('<i>'); 44 buffer.write('<i>');
39 } 45 }
40 buffer.write(HTML_ESCAPE.convert(element.toString())); 46 buffer.write(HTML_ESCAPE.convert(element.toString()));
41 if (element.isSynthetic) { 47 if (element.isSynthetic) {
42 buffer.write('</i>'); 48 buffer.write('</i>');
43 } 49 }
44 buffer.write(' <span style="color:gray">('); 50 buffer.write(' <span style="color:gray">(');
45 buffer.write(element.runtimeType); 51 buffer.write(element.runtimeType);
46 buffer.write(')</span>'); 52 buffer.write(')</span>');
47 if (element is! LibraryElement) { 53 if (element is! LibraryElement) {
48 String name = element.name; 54 String name = element.name;
49 if (name != null) { 55 if (name != null) {
50 buffer.write('&nbsp;&nbsp;['); 56 buffer.write('&nbsp;&nbsp;[');
51 buffer.write(GetHandler.makeLink(GetHandler.INDEX_ELEMENT_BY_NAME, { 57 buffer.write(GetHandler.makeLink(GetHandler.INDEX_ELEMENT_BY_NAME, {
52 'name': name 58 'name': name
53 }, 'search index')); 59 }, 'search index'));
54 buffer.write(']'); 60 buffer.write(']');
55 } 61 }
56 } 62 }
57 buffer.write('<br>'); 63 buffer.write('<br>');
58 indentLevel++; 64 }
59 try { 65
60 element.visitChildren(this); 66 /**
61 } finally { 67 * Write a representation of the properties of the given [node] to the buffer.
62 indentLevel--; 68 */
69 Map<String, Object> _computeProperties(Element element) {
70 Map<String, Object> properties = new HashMap<String, Object>();
71
72 properties['isDeprecated'] = element.isDeprecated;
73 properties['isOverride'] = element.isOverride;
74 properties['metadata'] = element.metadata;
75 properties['nameOffset'] = element.nameOffset;
76 if (element is ClassElement) {
77 properties['hasNonFinalField'] = element.hasNonFinalField;
78 properties['hasReferenceToSuper'] = element.hasReferenceToSuper;
79 properties['hasStaticMember'] = element.hasStaticMember;
80 properties['interfaces'] = element.interfaces;
81 properties['isAbstract'] = element.isAbstract;
82 properties['isEnum'] = element.isEnum;
83 properties['isOrInheritsProxy'] = element.isOrInheritsProxy;
84 properties['isProxy'] = element.isProxy;
85 properties['isTypedef'] = element.isTypedef;
86 properties['isValidMixin'] = element.isValidMixin;
87 properties['mixins'] = element.mixins;
88 properties['supertype'] = element.supertype;
89 properties['type'] = element.type;
63 } 90 }
91 if (element is CompilationUnitElement) {
92 properties['isEnumConstant'] = element.hasLoadLibraryFunction;
93 properties['source'] = element.source;
94 }
95 if (element is ConstFieldElementImpl) {
96 properties['evaluationResult'] = element.evaluationResult;
97 }
98 if (element is ConstLocalVariableElementImpl) {
99 properties['evaluationResult'] = element.evaluationResult;
100 }
101 if (element is ConstTopLevelVariableElementImpl) {
102 properties['evaluationResult'] = element.evaluationResult;
103 }
104 if (element is ConstructorElement) {
105 properties['isConst'] = element.isConst;
106 properties['isDefaultConstructor'] = element.isDefaultConstructor;
107 properties['isFactory'] = element.isFactory;
108 properties['redirectedConstructor'] = element.redirectedConstructor;
109 }
110 if (element is ExecutableElement) {
111 properties['isAsynchronous'] = element.isAsynchronous;
112 properties['isGenerator'] = element.isGenerator;
113 properties['isOperator'] = element.isOperator;
114 properties['isStatic'] = element.isStatic;
115 properties['isSynchronous'] = element.isSynchronous;
116 properties['returnType'] = element.returnType;
117 properties['type'] = element.type;
118 }
119 if (element is ExportElement) {
120 properties['combinators'] = element.combinators;
121 properties['library'] = element.library;
122 }
123 if (element is FieldElement) {
124 properties['isEnumConstant'] = element.isEnumConstant;
125 }
126 if (element is FieldFormalParameterElement) {
127 properties['field'] = element.field;
128 }
129 if (element is FunctionTypeAliasElement) {
130 properties['returnType'] = element.returnType;
131 properties['type'] = element.type;
132 }
133 if (element is ImportElement) {
134 properties['combinators'] = element.combinators;
135 properties['library'] = element.library;
136 }
137 if (element is LibraryElement) {
138 properties['definingCompilationUnit'] = element.definingCompilationUnit;
139 properties['entryPoint'] = element.entryPoint;
140 properties['hasExtUri'] = element.hasExtUri;
141 properties['hasLoadLibraryFunction'] = element.hasLoadLibraryFunction;
142 properties['isBrowserApplication'] = element.isBrowserApplication;
143 }
144 if (element is LocalElement) {
145 properties['visibleRange'] = element.visibleRange;
146 }
147 if (element is MethodElement) {
148 properties['isAbstract'] = element.isAbstract;
149 }
150 if (element is ParameterElement) {
151 properties['defaultValueCode'] = element.defaultValueCode;
152 properties['isInitializingFormal'] = element.isInitializingFormal;
153 properties['parameterKind'] = element.parameterKind;
154 }
155 if (element is PropertyAccessorElement) {
156 properties['isAbstract'] = element.isAbstract;
157 properties['isGetter'] = element.isGetter;
158 properties['isSetter'] = element.isSetter;
159 }
160 if (element is PropertyInducingElement) {
161 properties['isStatic'] = element.isStatic;
162 properties['propagatedType'] = element.propagatedType;
163 }
164 if (element is TypeParameterElement) {
165 properties['bound'] = element.bound;
166 }
167 if (element is UriReferencedElement) {
168 properties['uri'] = element.uri;
169 }
170 if (element is VariableElement) {
171 properties['isConst'] = element.isConst;
172 properties['isFinal'] = element.isFinal;
173 properties['type'] = element.type;
174 }
175
176 return properties;
64 } 177 }
65 } 178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698