1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 package org.codehaus.groovy.ast;
47
48 import java.util.Iterator;
49 import java.util.List;
50
51 import org.codehaus.groovy.ast.expr.*;
52 import org.codehaus.groovy.ast.stmt.AssertStatement;
53 import org.codehaus.groovy.ast.stmt.BlockStatement;
54 import org.codehaus.groovy.ast.stmt.BreakStatement;
55 import org.codehaus.groovy.ast.stmt.CaseStatement;
56 import org.codehaus.groovy.ast.stmt.CatchStatement;
57 import org.codehaus.groovy.ast.stmt.ContinueStatement;
58 import org.codehaus.groovy.ast.stmt.DoWhileStatement;
59 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
60 import org.codehaus.groovy.ast.stmt.ForStatement;
61 import org.codehaus.groovy.ast.stmt.IfStatement;
62 import org.codehaus.groovy.ast.stmt.ReturnStatement;
63 import org.codehaus.groovy.ast.stmt.Statement;
64 import org.codehaus.groovy.ast.stmt.SwitchStatement;
65 import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
66 import org.codehaus.groovy.ast.stmt.ThrowStatement;
67 import org.codehaus.groovy.ast.stmt.TryCatchStatement;
68 import org.codehaus.groovy.ast.stmt.WhileStatement;
69
70 /***
71 * Abstract base class for any GroovyCodeVisitory which by default
72 * just walks the code and expression tree
73 *
74 * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
75 * @version $Revision: 1.12 $
76 */
77 public abstract class CodeVisitorSupport implements GroovyCodeVisitor {
78
79 public void visitBlockStatement(BlockStatement block) {
80 List statements = block.getStatements();
81 for (Iterator iter = statements.iterator(); iter.hasNext(); ) {
82 Statement statement = (Statement) iter.next();
83 statement.visit(this);
84 }
85 }
86
87 public void visitForLoop(ForStatement forLoop) {
88 forLoop.getCollectionExpression().visit(this);
89 forLoop.getLoopBlock().visit(this);
90 }
91
92 public void visitWhileLoop(WhileStatement loop) {
93 loop.getBooleanExpression().visit(this);
94 loop.getLoopBlock().visit(this);
95 }
96
97 public void visitDoWhileLoop(DoWhileStatement loop) {
98 loop.getLoopBlock().visit(this);
99 loop.getBooleanExpression().visit(this);
100 }
101
102 public void visitIfElse(IfStatement ifElse) {
103 ifElse.getBooleanExpression().visit(this);
104 ifElse.getIfBlock().visit(this);
105 ifElse.getElseBlock().visit(this);
106 }
107
108 public void visitExpressionStatement(ExpressionStatement statement) {
109 statement.getExpression().visit(this);
110 }
111
112 public void visitReturnStatement(ReturnStatement statement) {
113 statement.getExpression().visit(this);
114 }
115
116 public void visitAssertStatement(AssertStatement statement) {
117 statement.getBooleanExpression().visit(this);
118 statement.getMessageExpression().visit(this);
119 }
120
121 public void visitTryCatchFinally(TryCatchStatement statement) {
122 statement.getTryStatement().visit(this);
123 List list = statement.getCatchStatements();
124 for (Iterator iter = list.iterator(); iter.hasNext(); ) {
125 CatchStatement catchStatement = (CatchStatement) iter.next();
126 catchStatement.visit(this);
127 }
128 statement.getFinallyStatement().visit(this);
129 }
130
131 public void visitSwitch(SwitchStatement statement) {
132 statement.getExpression().visit(this);
133 List list = statement.getCaseStatements();
134 for (Iterator iter = list.iterator(); iter.hasNext(); ) {
135 CaseStatement caseStatement = (CaseStatement) iter.next();
136 caseStatement.visit(this);
137 }
138 statement.getDefaultStatement().visit(this);
139 }
140
141 public void visitCaseStatement(CaseStatement statement) {
142 statement.getExpression().visit(this);
143 statement.getCode().visit(this);
144 }
145
146 public void visitBreakStatement(BreakStatement statement) {
147 }
148
149 public void visitContinueStatement(ContinueStatement statement) {
150 }
151
152 public void visitSynchronizedStatement(SynchronizedStatement statement) {
153 statement.getExpression().visit(this);
154 statement.getCode().visit(this);
155 }
156
157 public void visitThrowStatement(ThrowStatement statement) {
158 statement.getExpression().visit(this);
159 }
160
161 public void visitMethodCallExpression(MethodCallExpression call) {
162 call.getObjectExpression().visit(this);
163 call.getArguments().visit(this);
164 }
165
166 public void visitStaticMethodCallExpression(StaticMethodCallExpression call) {
167 call.getArguments().visit(this);
168 }
169
170 public void visitConstructorCallExpression(ConstructorCallExpression call) {
171 call.getArguments().visit(this);
172 }
173
174 public void visitBinaryExpression(BinaryExpression expression) {
175 expression.getLeftExpression().visit(this);
176 expression.getRightExpression().visit(this);
177 }
178
179 public void visitTernaryExpression(TernaryExpression expression) {
180 expression.getBooleanExpression().visit(this);
181 expression.getTrueExpression().visit(this);
182 expression.getFalseExpression().visit(this);
183 }
184
185 public void visitPostfixExpression(PostfixExpression expression) {
186 expression.getExpression().visit(this);
187 }
188
189 public void visitPrefixExpression(PrefixExpression expression) {
190 expression.getExpression().visit(this);
191 }
192
193 public void visitBooleanExpression(BooleanExpression expression) {
194 expression.getExpression().visit(this);
195 }
196
197 public void visitNotExpression(NotExpression expression) {
198 expression.getExpression().visit(this);
199 }
200
201 public void visitClosureExpression(ClosureExpression expression) {
202 expression.getCode().visit(this);
203 }
204
205 public void visitTupleExpression(TupleExpression expression) {
206 visitListOfExpressions(expression.getExpressions());
207 }
208
209 public void visitListExpression(ListExpression expression) {
210 visitListOfExpressions(expression.getExpressions());
211 }
212
213 public void visitArrayExpression(ArrayExpression expression) {
214 visitListOfExpressions(expression.getExpressions());
215 }
216
217 public void visitMapExpression(MapExpression expression) {
218 visitListOfExpressions(expression.getMapEntryExpressions());
219
220 }
221
222 public void visitMapEntryExpression(MapEntryExpression expression) {
223 expression.getKeyExpression().visit(this);
224 expression.getValueExpression().visit(this);
225
226 }
227
228 public void visitRangeExpression(RangeExpression expression) {
229 expression.getFrom().visit(this);
230 expression.getTo().visit(this);
231 }
232
233 public void visitNegationExpression(NegationExpression expression) {
234 expression.getExpression().visit(this);
235 }
236
237 public void visitBitwiseNegExpression(BitwiseNegExpression expression) {
238 expression.getExpression().visit(this);
239 }
240
241 public void visitCastExpression(CastExpression expression) {
242 expression.getExpression().visit(this);
243 }
244
245 public void visitConstantExpression(ConstantExpression expression) {
246 }
247
248 public void visitClassExpression(ClassExpression expression) {
249 }
250
251 public void visitVariableExpression(VariableExpression expression) {
252 }
253
254 public void visitPropertyExpression(PropertyExpression expression) {
255 expression.getObjectExpression().visit(this);
256 }
257
258 public void visitAttributeExpression(AttributeExpression expression) {
259 expression.getObjectExpression().visit(this);
260 }
261
262 public void visitFieldExpression(FieldExpression expression) {
263 }
264
265 public void visitRegexExpression(RegexExpression expression) {
266 }
267
268 public void visitGStringExpression(GStringExpression expression) {
269 visitListOfExpressions(expression.getStrings());
270 visitListOfExpressions(expression.getValues());
271 }
272
273 protected void visitListOfExpressions(List list) {
274 for (Iterator iter = list.iterator(); iter.hasNext(); ) {
275 Expression expression = (Expression) iter.next();
276 expression.visit(this);
277 }
278 }
279
280 }