1
2
3
4
5 package org.codehaus.groovy.ast;
6
7 import java.util.Iterator;
8 import java.util.List;
9
10 import org.codehaus.groovy.ast.expr.Expression;
11 import org.codehaus.groovy.ast.stmt.AssertStatement;
12 import org.codehaus.groovy.ast.stmt.BlockStatement;
13 import org.codehaus.groovy.ast.stmt.BreakStatement;
14 import org.codehaus.groovy.ast.stmt.CaseStatement;
15 import org.codehaus.groovy.ast.stmt.CatchStatement;
16 import org.codehaus.groovy.ast.stmt.ContinueStatement;
17 import org.codehaus.groovy.ast.stmt.DoWhileStatement;
18 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
19 import org.codehaus.groovy.ast.stmt.ForStatement;
20 import org.codehaus.groovy.ast.stmt.IfStatement;
21 import org.codehaus.groovy.ast.stmt.ReturnStatement;
22 import org.codehaus.groovy.ast.stmt.Statement;
23 import org.codehaus.groovy.ast.stmt.SwitchStatement;
24 import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
25 import org.codehaus.groovy.ast.stmt.ThrowStatement;
26 import org.codehaus.groovy.ast.stmt.TryCatchStatement;
27 import org.codehaus.groovy.ast.stmt.WhileStatement;
28 import org.codehaus.groovy.control.SourceUnit;
29 import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
30 import org.codehaus.groovy.syntax.SyntaxException;
31
32 public abstract class ClassCodeVisitorSupport extends CodeVisitorSupport implements GroovyClassVisitor {
33
34 public void visitClass(ClassNode node) {
35 visitAnnotations(node);
36 node.visitContents(this);
37 List list = node.getObjectInitializerStatements();
38 for (Iterator iter = list.iterator(); iter.hasNext();) {
39 Statement element = (Statement) iter.next();
40 element.visit(this);
41 }
42 }
43
44 public void visitAnnotations(AnnotatedNode node) {
45
46 }
47
48 protected void visitClassCodeContainer(Statement code) {
49 if (code != null) code.visit(this);
50 }
51
52 protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) {
53 Statement code = node.getCode();
54 visitClassCodeContainer(code);
55 }
56
57 public void visitConstructor(ConstructorNode node) {
58 visitConstructorOrMethod(node,true);
59 }
60
61 public void visitMethod(MethodNode node) {
62 visitConstructorOrMethod(node,false);
63 }
64
65 public void visitField(FieldNode node) {
66 Expression init = node.getInitialExpression();
67 if (init != null) init.visit(this);
68 }
69
70 public void visitProperty(PropertyNode node) {
71 Statement statement = node.getGetterBlock();
72 visitClassCodeContainer(statement);
73
74 statement = node.getSetterBlock();
75 visitClassCodeContainer(statement);
76
77 Expression init = node.getInitialExpression();
78 if (init != null) init.visit(this);
79 }
80
81 protected void addError(String msg, ASTNode expr) {
82 int line = expr.getLineNumber();
83 int col = expr.getColumnNumber();
84 SourceUnit source = getSourceUnit();
85 source.getErrorCollector().addErrorAndContinue(
86 new SyntaxErrorMessage(new SyntaxException(msg + '\n', line, col), source)
87 );
88 }
89
90 abstract protected SourceUnit getSourceUnit();
91
92 protected void visitStatement(Statement statement) {}
93
94 public void visitAssertStatement(AssertStatement statement) {
95 visitStatement(statement);
96 super.visitAssertStatement(statement);
97 }
98
99 public void visitBlockStatement(BlockStatement block) {
100 visitStatement(block);
101 super.visitBlockStatement(block);
102 }
103
104 public void visitBreakStatement(BreakStatement statement) {
105 visitStatement(statement);
106 super.visitBreakStatement(statement);
107 }
108
109 public void visitCaseStatement(CaseStatement statement) {
110 visitStatement(statement);
111 super.visitCaseStatement(statement);
112 }
113
114 public void visitCatchStatement(CatchStatement statement) {
115 visitStatement(statement);
116 super.visitCatchStatement(statement);
117 }
118
119 public void visitContinueStatement(ContinueStatement statement) {
120 visitStatement(statement);
121 super.visitContinueStatement(statement);
122 }
123
124 public void visitDoWhileLoop(DoWhileStatement loop) {
125 visitStatement(loop);
126 super.visitDoWhileLoop(loop);
127 }
128
129 public void visitExpressionStatement(ExpressionStatement statement) {
130 visitStatement(statement);
131 super.visitExpressionStatement(statement);
132 }
133
134 public void visitForLoop(ForStatement forLoop) {
135 visitStatement(forLoop);
136 super.visitForLoop(forLoop);
137 }
138
139 public void visitIfElse(IfStatement ifElse) {
140 visitStatement(ifElse);
141 super.visitIfElse(ifElse);
142 }
143
144 public void visitReturnStatement(ReturnStatement statement) {
145 visitStatement(statement);
146 super.visitReturnStatement(statement);
147 }
148
149 public void visitSwitch(SwitchStatement statement) {
150 visitStatement(statement);
151 super.visitSwitch(statement);
152 }
153
154 public void visitSynchronizedStatement(SynchronizedStatement statement) {
155 visitStatement(statement);
156 super.visitSynchronizedStatement(statement);
157 }
158
159 public void visitThrowStatement(ThrowStatement statement) {
160 visitStatement(statement);
161 super.visitThrowStatement(statement);
162 }
163
164 public void visitTryCatchFinally(TryCatchStatement statement) {
165 visitStatement(statement);
166 super.visitTryCatchFinally(statement);
167 }
168
169 public void visitWhileLoop(WhileStatement loop) {
170 visitStatement(loop);
171 super.visitWhileLoop(loop);
172 }
173 }