1 /***************************************************************************************
2 * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package org.codehaus.aspectwerkz.annotation.expression;
9
10 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTAnnotation;
11 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTArray;
12 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTBoolean;
13 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTChar;
14 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTFloat;
15 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTHex;
16 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTIdentifier;
17 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTInteger;
18 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTKeyValuePair;
19 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTOct;
20 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTRoot;
21 import org.codehaus.aspectwerkz.annotation.expression.ast.ASTString;
22 import org.codehaus.aspectwerkz.annotation.expression.ast.AnnotationParserVisitor;
23 import org.codehaus.aspectwerkz.annotation.expression.ast.SimpleNode;
24
25 /***
26 * @author <a href="mailto:jboner@codehaus.org">Jonas Bonér </a>
27 */
28 public class DumpVisitor implements AnnotationParserVisitor {
29 private ASTRoot m_root;
30
31 private int indent = 0;
32
33 private DumpVisitor(final ASTRoot root) {
34 m_root = root;
35 }
36
37 public static void dumpAST(final ASTRoot root) {
38 DumpVisitor dumper = new DumpVisitor(root);
39 dumper.visit(dumper.m_root, null);
40 }
41
42 public Object visit(SimpleNode node, Object data) {
43 System.out.println(indentString() + node);
44 ++indent;
45 int nr = node.jjtGetNumChildren();
46 for (int i = 0; i < nr; i++) {
47 data = node.jjtGetChild(i).jjtAccept(this, data);
48 }
49 --indent;
50 return data;
51 }
52
53 public Object visit(ASTRoot node, Object data) {
54 System.out.println(indentString() + node);
55 ++indent;
56 int nr = node.jjtGetNumChildren();
57 for (int i = 0; i < nr; i++) {
58 data = node.jjtGetChild(i).jjtAccept(this, data);
59 }
60 --indent;
61 return data;
62 }
63
64 public Object visit(ASTAnnotation node, Object data) {
65 System.out.println(indentString() + node);
66 ++indent;
67 int nr = node.jjtGetNumChildren();
68 for (int i = 0; i < nr; i++) {
69 data = node.jjtGetChild(i).jjtAccept(this, data);
70 }
71 --indent;
72 return data;
73 }
74
75 public Object visit(ASTKeyValuePair node, Object data) {
76 System.out.println(indentString() + node);
77 ++indent;
78 int nr = node.jjtGetNumChildren();
79 for (int i = 0; i < nr; i++) {
80 data = node.jjtGetChild(i).jjtAccept(this, data);
81 }
82 --indent;
83 return data;
84 }
85
86 public Object visit(ASTArray node, Object data) {
87 System.out.println(indentString() + node);
88 ++indent;
89 int nr = node.jjtGetNumChildren();
90 for (int i = 0; i < nr; i++) {
91 data = node.jjtGetChild(i).jjtAccept(this, data);
92 }
93 --indent;
94 return data;
95 }
96
97 public Object visit(ASTIdentifier node, Object data) {
98 System.out.println(indentString() + node);
99 return data;
100 }
101
102 public Object visit(ASTBoolean node, Object data) {
103 System.out.println(indentString() + node);
104 return data;
105 }
106
107 public Object visit(ASTChar node, Object data) {
108 System.out.println(indentString() + node);
109 return data;
110 }
111
112 public Object visit(ASTString node, Object data) {
113 System.out.println(indentString() + node);
114 return data;
115 }
116
117 public Object visit(ASTInteger node, Object data) {
118 System.out.println(indentString() + node);
119 return data;
120 }
121
122 public Object visit(ASTFloat node, Object data) {
123 System.out.println(indentString() + node);
124 return data;
125 }
126
127 public Object visit(ASTHex node, Object data) {
128 System.out.println(indentString() + node);
129 return data;
130 }
131
132 public Object visit(ASTOct node, Object data) {
133 System.out.println(indentString() + node);
134 return data;
135 }
136
137 private String indentString() {
138 StringBuffer sb = new StringBuffer();
139 for (int i = 0; i < indent; ++i) {
140 sb.append(" ");
141 }
142 return sb.toString();
143 }
144 }