OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 package com.google.dart.compiler.ast.viz; | |
6 | |
7 import java.io.IOException; | |
8 import java.io.OutputStreamWriter; | |
9 import java.util.HashMap; | |
10 import java.util.Map; | |
11 | |
12 import com.google.dart.compiler.ast.DartNode; | |
13 import com.google.dart.compiler.ast.DartUnit; | |
14 | |
15 /** | |
16 * Write the AST in to System out. | |
17 */ | |
18 public class ConsoleWriter extends BaseASTWriter { | |
19 Map<DartNode,Integer> indentMap; | |
20 OutputStreamWriter out; | |
21 | |
22 public ConsoleWriter(String outputDir) { | |
23 super(outputDir); | |
24 this.indentMap = new HashMap<DartNode, Integer>(); | |
25 out = new OutputStreamWriter(System.out); | |
26 } | |
27 | |
28 @Override | |
29 protected void startHook() { | |
30 // Do nothing | |
31 } | |
32 | |
33 @Override | |
34 protected void endHook() { | |
zundel
2011/11/15 14:49:54
Guava has a shortcut for closing streams like this
shauvik
2011/11/15 23:53:14
Cool!
On 2011/11/15 14:49:54, zundel wrote:
shauvik
2011/11/15 23:53:14
Done.
| |
35 try { | |
36 out.flush(); | |
37 out.close(); | |
38 } catch (IOException e) { | |
39 System.err.println("Error flushing AST output stream"); | |
40 e.printStackTrace(); | |
41 } | |
42 } | |
43 | |
44 public void write(String nodeType, DartNode node){ | |
45 write(nodeType, node, ""); | |
46 } | |
47 | |
48 public void write(String nodeType, DartNode node, String data) { | |
49 StringBuffer sb = new StringBuffer(); | |
50 int indent = 0; | |
51 DartNode parent = node.getParent(); | |
52 if(parent != null){ | |
53 indent = this.indentMap.get(parent) + 1; | |
54 } | |
55 for(int i=0;i<indent;i++) { | |
56 sb.append(TAB); | |
57 } | |
58 try{ | |
59 out.write(sb.toString()); | |
60 out.write(nodeType); | |
61 if(!data.equals("")){ | |
62 out.write(" ("+data+")"); | |
zundel
2011/11/15 14:49:54
style: spaces before and after +
shauvik
2011/11/15 23:53:14
Done.
| |
63 } | |
64 out.write('\n'); | |
65 }catch (IOException e) { | |
66 | |
67 } | |
68 } | |
69 | |
70 @Override | |
71 public void visitChildren(DartNode node) { | |
72 //Setup Indentation | |
zundel
2011/11/15 14:49:54
style: space after //
shauvik
2011/11/15 23:53:14
Done.
| |
73 DartNode parent = node.getParent(); | |
74 if(parent == null){ //DartUnit's parent is null | |
75 this.indentMap.put(node, 0); | |
76 }else{ | |
zundel
2011/11/15 14:49:54
style: } else {
shauvik
2011/11/15 23:53:14
Done.
| |
77 int parentIndent = this.indentMap.get(parent); | |
78 this.indentMap.put(node, parentIndent+1); | |
79 } | |
80 | |
81 node.visitChildren(this); | |
82 } | |
83 | |
84 @Override | |
85 public Object visitUnit(DartUnit node) { | |
86 if(!isIgnored(node)){ | |
87 visitChildren(node); | |
88 } | |
89 return null; | |
90 } | |
91 } | |
OLD | NEW |