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

Side by Side Diff: site/try/poi/scope_information_visitor.dart

Issue 1056133008: Fix other tests in 'try' after elementvisitor changes (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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
« no previous file with comments | « site/try/poi/poi.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 trydart.poi.scope_information_visitor; 5 library trydart.poi.scope_information_visitor;
6 6
7 import 'package:compiler/src/elements/modelx.dart' as modelx; 7 import 'package:compiler/src/elements/modelx.dart' as modelx;
8 8
9 import 'package:compiler/src/elements/modelx.dart' show 9 import 'package:compiler/src/elements/modelx.dart' show
10 CompilationUnitElementX, 10 CompilationUnitElementX,
11 FieldElementX; 11 FieldElementX;
12 12
13 import 'package:compiler/src/elements/visitor.dart' show 13 import 'package:compiler/src/elements/visitor.dart' show
14 ElementVisitor; 14 BaseElementVisitor;
15 15
16 import 'package:compiler/src/dart2jslib.dart' show 16 import 'package:compiler/src/dart2jslib.dart' show
17 Compiler; 17 Compiler;
18 18
19 import 'package:compiler/src/elements/elements.dart' show 19 import 'package:compiler/src/elements/elements.dart' show
20 AbstractFieldElement, 20 AbstractFieldElement,
21 ClassElement, 21 ClassElement,
22 CompilationUnitElement, 22 CompilationUnitElement,
23 Element, 23 Element,
24 ElementCategory, 24 ElementCategory,
25 FunctionElement, 25 FunctionElement,
26 LibraryElement, 26 LibraryElement,
27 ScopeContainerElement; 27 ScopeContainerElement;
28 28
29 import 'package:compiler/src/dart_types.dart' show 29 import 'package:compiler/src/dart_types.dart' show
30 DartType; 30 DartType;
31 31
32 /** 32 /**
33 * Serializes scope information about an element. This is accomplished by 33 * Serializes scope information about an element. This is accomplished by
34 * calling the [serialize] method on each element. Some elements need special 34 * calling the [serialize] method on each element. Some elements need special
35 * treatment, as their enclosing scope must also be serialized. 35 * treatment, as their enclosing scope must also be serialized.
36 */ 36 */
37 class ScopeInformationVisitor extends ElementVisitor/* <void> */ { 37 class ScopeInformationVisitor extends BaseElementVisitor/* <void> */ {
38 // TODO(ahe): Include function parameters and local variables. 38 // TODO(ahe): Include function parameters and local variables.
39 39
40 final Compiler compiler; 40 final Compiler compiler;
41 final Element currentElement; 41 final Element currentElement;
42 final int position; 42 final int position;
43 final StringBuffer buffer = new StringBuffer(); 43 final StringBuffer buffer = new StringBuffer();
44 int indentationLevel = 0; 44 int indentationLevel = 0;
45 ClassElement currentClass; 45 ClassElement currentClass;
46 46
47 bool sortMembers = false; 47 bool sortMembers = false;
48 48
49 bool ignoreImports = false; 49 bool ignoreImports = false;
50 50
51 ScopeInformationVisitor(this.compiler, this.currentElement, this.position); 51 ScopeInformationVisitor(this.compiler, this.currentElement, this.position);
52 52
53 String get indentation => ' ' * indentationLevel; 53 String get indentation => ' ' * indentationLevel;
54 54
55 StringBuffer get indented => buffer..write(indentation); 55 StringBuffer get indented => buffer..write(indentation);
56 56
57 void visitElement(Element e) { 57 void visitElement(Element e, _) {
58 serialize(e, omitEnclosing: false); 58 serialize(e, omitEnclosing: false);
59 } 59 }
60 60
61 void visitLibraryElement(LibraryElement e) { 61 void visitLibraryElement(LibraryElement e, _) {
62 bool isFirst = true; 62 bool isFirst = true;
63 forEach(Element member) { 63 forEach(Element member) {
64 if (!isFirst) { 64 if (!isFirst) {
65 buffer.write(','); 65 buffer.write(',');
66 } 66 }
67 buffer.write('\n'); 67 buffer.write('\n');
68 indented; 68 indented;
69 serialize(member); 69 serialize(member);
70 isFirst = false; 70 isFirst = false;
71 } 71 }
(...skipping 24 matching lines...) Expand all
96 buffer.write('\n'); 96 buffer.write('\n');
97 indentationLevel--; 97 indentationLevel--;
98 indented.write('}'); 98 indented.write('}');
99 }, 99 },
100 serializeMembers: () { 100 serializeMembers: () {
101 isFirst = true; 101 isFirst = true;
102 sortElements(localScope(e).values).forEach(forEach); 102 sortElements(localScope(e).values).forEach(forEach);
103 }); 103 });
104 } 104 }
105 105
106 void visitClassElement(ClassElement e) { 106 void visitClassElement(ClassElement e, _) {
107 currentClass = e; 107 currentClass = e;
108 serializeClassSide(e, isStatic: true); 108 serializeClassSide(e, isStatic: true);
109 } 109 }
110 110
111 /// Serializes one of the "sides" a class. The sides of a class are "instance 111 /// Serializes one of the "sides" a class. The sides of a class are "instance
112 /// side" and "class side". These terms are from Smalltalk. The instance side 112 /// side" and "class side". These terms are from Smalltalk. The instance side
113 /// is all the local instance members of the class (the members of the 113 /// is all the local instance members of the class (the members of the
114 /// mixin), and the class side is the equivalent for static members and 114 /// mixin), and the class side is the equivalent for static members and
115 /// constructors. 115 /// constructors.
116 /// The scope chain is ordered so that the "class side" is searched before 116 /// The scope chain is ordered so that the "class side" is searched before
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 buffer.write(','); 161 buffer.write(',');
162 } 162 }
163 buffer.write('\n'); 163 buffer.write('\n');
164 indented; 164 indented;
165 serialize(member); 165 serialize(member);
166 isFirst = false; 166 isFirst = false;
167 }); 167 });
168 }); 168 });
169 } 169 }
170 170
171 void visitScopeContainerElement(ScopeContainerElement e) { 171 void visitScopeContainerElement(ScopeContainerElement e, _) {
172 bool isFirst = true; 172 bool isFirst = true;
173 serialize(e, omitEnclosing: false, serializeMembers: () { 173 serialize(e, omitEnclosing: false, serializeMembers: () {
174 localMembersSorted(e).forEach((Element member) { 174 localMembersSorted(e).forEach((Element member) {
175 if (!isFirst) { 175 if (!isFirst) {
176 buffer.write(','); 176 buffer.write(',');
177 } 177 }
178 buffer.write('\n'); 178 buffer.write('\n');
179 indented; 179 indented;
180 serialize(member); 180 serialize(member);
181 isFirst = false; 181 isFirst = false;
182 }); 182 });
183 }); 183 });
184 } 184 }
185 185
186 void visitCompilationUnitElement(CompilationUnitElement e) { 186 void visitCompilationUnitElement(CompilationUnitElement e, _) {
187 e.enclosingElement.accept(this); 187 e.enclosingElement.accept(this, _);
188 } 188 }
189 189
190 void visitAbstractFieldElement(AbstractFieldElement e) { 190 void visitAbstractFieldElement(AbstractFieldElement e, _) {
191 throw new UnsupportedError('AbstractFieldElement cannot be serialized.'); 191 throw new UnsupportedError('AbstractFieldElement cannot be serialized.');
192 } 192 }
193 193
194 void serialize( 194 void serialize(
195 Element element, 195 Element element,
196 {bool omitEnclosing: true, 196 {bool omitEnclosing: true,
197 void serializeMembers(), 197 void serializeMembers(),
198 void serializeEnclosing(), 198 void serializeEnclosing(),
199 String kind, 199 String kind,
200 String name}) { 200 String name}) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 indentationLevel--; 266 indentationLevel--;
267 buffer.write('\n'); 267 buffer.write('\n');
268 indented.write(']'); 268 indented.write(']');
269 } 269 }
270 if (!omitEnclosing) { 270 if (!omitEnclosing) {
271 buffer.write(',\n'); 271 buffer.write(',\n');
272 indented.write('"enclosing": '); 272 indented.write('"enclosing": ');
273 if (serializeEnclosing != null) { 273 if (serializeEnclosing != null) {
274 serializeEnclosing(); 274 serializeEnclosing();
275 } else { 275 } else {
276 element.enclosingElement.accept(this); 276 element.enclosingElement.accept(this, null);
277 } 277 }
278 } 278 }
279 indentationLevel--; 279 indentationLevel--;
280 buffer.write('\n'); 280 buffer.write('\n');
281 indented.write('}'); 281 indented.write('}');
282 } 282 }
283 283
284 List<Element> localMembersSorted(ScopeContainerElement element) { 284 List<Element> localMembersSorted(ScopeContainerElement element) {
285 List<Element> result = <Element>[]; 285 List<Element> result = <Element>[];
286 element.forEachLocalMember((Element member) { 286 element.forEachLocalMember((Element member) {
287 result.add(member); 287 result.add(member);
288 }); 288 });
289 return sortElements(result); 289 return sortElements(result);
290 } 290 }
291 291
292 List<Element> sortElements(Iterable<Element> elements) { 292 List<Element> sortElements(Iterable<Element> elements) {
293 List<Element> result = new List<Element>.from(elements); 293 List<Element> result = new List<Element>.from(elements);
294 if (sortMembers) { 294 if (sortMembers) {
295 result.sort((Element a, Element b) => a.name.compareTo(b.name)); 295 result.sort((Element a, Element b) => a.name.compareTo(b.name));
296 } 296 }
297 return result; 297 return result;
298 } 298 }
299 } 299 }
300 300
301 modelx.ScopeX localScope(modelx.LibraryElementX element) => element.localScope; 301 modelx.ScopeX localScope(modelx.LibraryElementX element) => element.localScope;
302 302
303 modelx.ImportScope importScope(modelx.LibraryElementX element) { 303 modelx.ImportScope importScope(modelx.LibraryElementX element) {
304 return element.importScope; 304 return element.importScope;
305 } 305 }
OLDNEW
« no previous file with comments | « site/try/poi/poi.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698