View Javadoc

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.expression;
9   
10  import org.codehaus.aspectwerkz.expression.ast.ASTAnd;
11  import org.codehaus.aspectwerkz.expression.ast.ASTAttribute;
12  import org.codehaus.aspectwerkz.expression.ast.ASTCall;
13  import org.codehaus.aspectwerkz.expression.ast.ASTCflow;
14  import org.codehaus.aspectwerkz.expression.ast.ASTCflowBelow;
15  import org.codehaus.aspectwerkz.expression.ast.ASTClassPattern;
16  import org.codehaus.aspectwerkz.expression.ast.ASTConstructorPattern;
17  import org.codehaus.aspectwerkz.expression.ast.ASTExecution;
18  import org.codehaus.aspectwerkz.expression.ast.ASTExpression;
19  import org.codehaus.aspectwerkz.expression.ast.ASTFieldPattern;
20  import org.codehaus.aspectwerkz.expression.ast.ASTGet;
21  import org.codehaus.aspectwerkz.expression.ast.ASTHandler;
22  import org.codehaus.aspectwerkz.expression.ast.ASTMethodPattern;
23  import org.codehaus.aspectwerkz.expression.ast.ASTModifier;
24  import org.codehaus.aspectwerkz.expression.ast.ASTNot;
25  import org.codehaus.aspectwerkz.expression.ast.ASTOr;
26  import org.codehaus.aspectwerkz.expression.ast.ASTParameter;
27  import org.codehaus.aspectwerkz.expression.ast.ASTPointcutReference;
28  import org.codehaus.aspectwerkz.expression.ast.ASTRoot;
29  import org.codehaus.aspectwerkz.expression.ast.ASTSet;
30  import org.codehaus.aspectwerkz.expression.ast.ASTStaticInitialization;
31  import org.codehaus.aspectwerkz.expression.ast.ASTWithin;
32  import org.codehaus.aspectwerkz.expression.ast.ASTWithinCode;
33  import org.codehaus.aspectwerkz.expression.ast.ExpressionParserVisitor;
34  import org.codehaus.aspectwerkz.expression.ast.SimpleNode;
35  import org.codehaus.aspectwerkz.expression.ast.ASTArgs;
36  import org.codehaus.aspectwerkz.expression.ast.ASTArgParameter;
37  import org.codehaus.aspectwerkz.expression.ast.ASTHasField;
38  import org.codehaus.aspectwerkz.expression.ast.ASTHasMethod;
39  import org.codehaus.aspectwerkz.expression.ast.ASTTarget;
40  import org.codehaus.aspectwerkz.expression.ast.ASTThis;
41  import org.codehaus.aspectwerkz.expression.ast.Node;
42  
43  /***
44   * TODO: do we need that, there is a dump() method in jjtree API
45   *
46   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
47   * @author Michael Nascimento
48   */
49  public class DumpVisitor implements ExpressionParserVisitor {
50      private Node m_root;
51  
52      private int indent = 0;
53  
54      private DumpVisitor(final Node root) {
55          m_root = root;
56      }
57  
58      public static void dumpAST(final Node root) {
59          DumpVisitor dumper = new DumpVisitor(root);
60          dumper.visit((SimpleNode)dumper.m_root, null);
61      }
62  
63      public Object visit(SimpleNode node, Object data) {
64          System.out.println(indentString() + node);
65          ++indent;
66          data = node.jjtGetChild(0).jjtAccept(this, data);
67          --indent;
68          return data;
69      }
70  
71      public Object visit(ASTRoot node, Object data) {
72          System.out.println(indentString() + node);
73          ++indent;
74          data = node.jjtGetChild(0).jjtAccept(this, data);
75          --indent;
76          return data;
77      }
78  
79      public Object visit(ASTExpression node, Object data) {
80          System.out.println(indentString() + node);
81          ++indent;
82          data = node.jjtGetChild(0).jjtAccept(this, data);
83          --indent;
84          return data;
85      }
86  
87      public Object visit(ASTOr node, Object data) {
88          System.out.println(indentString() + node);
89          ++indent;
90          for (int i = 0; i < node.jjtGetNumChildren(); i++) {
91              data = node.jjtGetChild(i).jjtAccept(this, data);
92          }
93          --indent;
94          return data;
95      }
96  
97      public Object visit(ASTAnd node, Object data) {
98          System.out.println(indentString() + node);
99          ++indent;
100         for (int i = 0; i < node.jjtGetNumChildren(); i++) {
101             data = node.jjtGetChild(i).jjtAccept(this, data);
102         }
103         --indent;
104         return data;
105     }
106 
107     public Object visit(ASTNot node, Object data) {
108         System.out.println(indentString() + node);
109         ++indent;
110         data = node.jjtGetChild(0).jjtAccept(this, data);
111         --indent;
112         return data;
113     }
114 
115     public Object visit(ASTExecution node, Object data) {
116         System.out.println(indentString() + node);
117         ++indent;
118         data = node.jjtGetChild(0).jjtAccept(this, data);
119         --indent;
120         return data;
121     }
122 
123     public Object visit(ASTCall node, Object data) {
124         System.out.println(indentString() + node);
125         ++indent;
126         data = node.jjtGetChild(0).jjtAccept(this, data);
127         --indent;
128         return data;
129     }
130 
131     public Object visit(ASTSet node, Object data) {
132         System.out.println(indentString() + node);
133         ++indent;
134         data = node.jjtGetChild(0).jjtAccept(this, data);
135         --indent;
136         return data;
137     }
138 
139     public Object visit(ASTGet node, Object data) {
140         System.out.println(indentString() + node);
141         ++indent;
142         data = node.jjtGetChild(0).jjtAccept(this, data);
143         --indent;
144         return data;
145     }
146 
147     public Object visit(ASTHandler node, Object data) {
148         System.out.println(indentString() + node);
149         ++indent;
150         data = node.jjtGetChild(0).jjtAccept(this, data);
151         --indent;
152         return data;
153     }
154 
155     public Object visit(ASTWithin node, Object data) {
156         System.out.println(indentString() + node);
157         ++indent;
158         data = node.jjtGetChild(0).jjtAccept(this, data);
159         --indent;
160         return data;
161     }
162 
163     public Object visit(ASTWithinCode node, Object data) {
164         System.out.println(indentString() + node);
165         ++indent;
166         data = node.jjtGetChild(0).jjtAccept(this, data);
167         --indent;
168         return data;
169     }
170 
171     public Object visit(ASTStaticInitialization node, Object data) {
172         System.out.println(indentString() + node);
173         ++indent;
174         data = node.jjtGetChild(0).jjtAccept(this, data);
175         --indent;
176         return data;
177     }
178 
179     public Object visit(ASTCflow node, Object data) {
180         System.out.println(indentString() + node);
181         ++indent;
182         data = node.jjtGetChild(0).jjtAccept(this, data);
183         --indent;
184         return data;
185     }
186 
187     public Object visit(ASTCflowBelow node, Object data) {
188         System.out.println(indentString() + node);
189         ++indent;
190         data = node.jjtGetChild(0).jjtAccept(this, data);
191         --indent;
192         return data;
193     }
194 
195 
196     public Object visit(ASTHasMethod node, Object data) {
197         System.out.println(indentString() + node);
198         ++indent;
199         data = node.jjtGetChild(0).jjtAccept(this, data);
200         --indent;
201         return data;
202     }
203 
204 
205     public Object visit(ASTHasField node, Object data) {
206         System.out.println(indentString() + node);
207         ++indent;
208         data = node.jjtGetChild(0).jjtAccept(this, data);
209         --indent;
210         return data;
211     }
212 
213     public Object visit(ASTTarget node, Object data) {
214         System.out.println(indentString() + node);
215         ++indent;
216         System.out.println(node.getIdentifier());
217         --indent;
218         return data;
219     }
220 
221     public Object visit(ASTThis node, Object data) {
222         System.out.println(indentString() + node);
223         ++indent;
224         System.out.println(node.getIdentifier());
225         --indent;
226         return data;
227     }
228 
229     public Object visit(ASTClassPattern node, Object data) {
230         System.out.println(indentString() + node);
231         ++indent;
232         int nr = node.jjtGetNumChildren();
233         for (int i = 0; i < nr; i++) {
234             data = node.jjtGetChild(i).jjtAccept(this, data);
235         }
236         --indent;
237         return data;
238     }
239 
240     public Object visit(ASTMethodPattern node, Object data) {
241         System.out.println(indentString() + node);
242         ++indent;
243         int nr = node.jjtGetNumChildren();
244         for (int i = 0; i < nr; i++) {
245             data = node.jjtGetChild(i).jjtAccept(this, data);
246         }
247         --indent;
248         return data;
249     }
250 
251     public Object visit(ASTConstructorPattern node, Object data) {
252         System.out.println(indentString() + node);
253         ++indent;
254         int nr = node.jjtGetNumChildren();
255         for (int i = 0; i < nr; i++) {
256             data = node.jjtGetChild(i).jjtAccept(this, data);
257         }
258         --indent;
259         return data;
260     }
261 
262     public Object visit(ASTFieldPattern node, Object data) {
263         System.out.println(indentString() + node);
264         ++indent;
265         int nr = node.jjtGetNumChildren();
266         for (int i = 0; i < nr; i++) {
267             data = node.jjtGetChild(i).jjtAccept(this, data);
268         }
269         --indent;
270         return data;
271     }
272 
273     public Object visit(ASTPointcutReference node, Object data) {
274         System.out.println(indentString() + node);
275         return data;
276     }
277 
278     public Object visit(ASTParameter node, Object data) {
279         System.out.println(indentString() + node);
280         return data;
281     }
282 
283     public Object visit(ASTArgs node, Object data) {
284         System.out.println(indentString() + node);
285         ++indent;
286         if (node.jjtGetNumChildren() > 0) {
287             data = node.jjtGetChild(0).jjtAccept(this, data);
288         }
289         --indent;
290         return data;
291     }
292 
293     public Object visit(ASTArgParameter node, Object data) {
294         System.out.println(indentString() + node);
295         return data;
296     }
297 
298     public Object visit(ASTAttribute node, Object data) {
299         System.out.println(indentString() + node);
300         return data;
301     }
302 
303     public Object visit(ASTModifier node, Object data) {
304         System.out.println(indentString() + node);
305         return data;
306     }
307 
308     private String indentString() {
309         StringBuffer sb = new StringBuffer();
310         for (int i = 0; i < indent; ++i) {
311             sb.append(" ");
312         }
313         return sb.toString();
314     }
315 }