001 /**
002 * $Id: RShiftVisitor.java,v 1.2 2006/09/25 15:48:32 chalin Exp $
003 *
004 * @title "Visitor for Detection of RightShift Incompleteness cases"
005 * @description "Walks through an AST and finds any cases where the right
006 * shift operator is used. It then adds a warning to ErrorSet about this"
007 */
008
009 package javafe.ast;
010
011 import javafe.util.ErrorSet;
012
013 public class RShiftVisitor extends Visitor {
014
015 public void visitASTNode(/*@ non_null */ ASTNode x) {
016 // a child of this node
017 Object child = null;
018 // temporary ASTNode
019 ASTNode temp = null;
020 // visit each child in this ASTNode if the child is an ASTNode
021 for(int count = 0; count < x.childCount(); count++) {
022 child = x.childAt(count);
023 if(child instanceof ASTNode) {
024 temp = (ASTNode) child;
025 temp.accept(this);
026 }
027 }
028 }
029
030 public void visitCompilationUnit(/*@ non_null */ CompilationUnit x) {
031 visitASTNode(x);
032 }
033
034 public void visitImportDecl(/*@ non_null */ ImportDecl x) {
035 visitASTNode(x);
036 }
037
038 public void visitSingleTypeImportDecl(/*@ non_null */ SingleTypeImportDecl x) {
039 visitImportDecl(x);
040 }
041
042 public void visitOnDemandImportDecl(/*@ non_null */ OnDemandImportDecl x) {
043 visitImportDecl(x);
044 }
045
046 public void visitTypeDecl(/*@ non_null */ TypeDecl x) {
047 visitASTNode(x);
048 }
049
050 public void visitClassDecl(/*@ non_null */ ClassDecl x) {
051 visitTypeDecl(x);
052 }
053
054 public void visitInterfaceDecl(/*@ non_null */ InterfaceDecl x) {
055 visitTypeDecl(x);
056 }
057
058 public void visitRoutineDecl(/*@ non_null */ RoutineDecl x) {
059 visitASTNode(x);
060 }
061
062 public void visitConstructorDecl(/*@ non_null */ ConstructorDecl x) {
063 visitRoutineDecl(x);
064 }
065
066 public void visitMethodDecl(/*@ non_null */ MethodDecl x) {
067 visitRoutineDecl(x);
068 }
069
070 public void visitInitBlock(/*@ non_null */ InitBlock x) {
071 visitASTNode(x);
072 }
073
074 public void visitTypeDeclElemPragma(/*@ non_null */ TypeDeclElemPragma x) {
075 visitASTNode(x);
076 }
077
078 public void visitGenericVarDecl(/*@ non_null */ GenericVarDecl x) {
079 visitASTNode(x);
080 }
081
082 public void visitLocalVarDecl(/*@ non_null */ LocalVarDecl x) {
083 visitGenericVarDecl(x);
084 }
085
086 public void visitFieldDecl(/*@ non_null */ FieldDecl x) {
087 visitGenericVarDecl(x);
088 }
089
090 public void visitFormalParaDecl(/*@ non_null */ FormalParaDecl x) {
091 visitGenericVarDecl(x);
092 }
093
094 public void visitStmt(/*@ non_null */ Stmt x) {
095 visitASTNode(x);
096 }
097
098 public void visitGenericBlockStmt(/*@ non_null */ GenericBlockStmt x) {
099 visitStmt(x);
100 }
101
102 public void visitBlockStmt(/*@ non_null */ BlockStmt x) {
103 visitGenericBlockStmt(x);
104 }
105
106 public void visitSwitchStmt(/*@ non_null */ SwitchStmt x) {
107 visitGenericBlockStmt(x);
108 }
109
110 public void visitAssertStmt(/*@ non_null */ AssertStmt x) {
111 visitStmt(x);
112 }
113
114 public void visitVarDeclStmt(/*@ non_null */ VarDeclStmt x) {
115 visitStmt(x);
116 }
117
118 public void visitClassDeclStmt(/*@ non_null */ ClassDeclStmt x) {
119 visitStmt(x);
120 }
121
122 public void visitWhileStmt(/*@ non_null */ WhileStmt x) {
123 visitStmt(x);
124 }
125
126 public void visitDoStmt(/*@ non_null */ DoStmt x) {
127 visitStmt(x);
128 }
129
130 public void visitSynchronizeStmt(/*@ non_null */ SynchronizeStmt x) {
131 visitStmt(x);
132 }
133
134 public void visitEvalStmt(/*@ non_null */ EvalStmt x) {
135 visitStmt(x);
136 }
137
138 public void visitReturnStmt(/*@ non_null */ ReturnStmt x) {
139 visitStmt(x);
140 }
141
142 public void visitThrowStmt(/*@ non_null */ ThrowStmt x) {
143 visitStmt(x);
144 }
145
146 public void visitBranchStmt(/*@ non_null */ BranchStmt x) {
147 visitStmt(x);
148 }
149
150 public void visitBreakStmt(/*@ non_null */ BreakStmt x) {
151 visitBranchStmt(x);
152 }
153
154 public void visitContinueStmt(/*@ non_null */ ContinueStmt x) {
155 visitBranchStmt(x);
156 }
157
158 public void visitLabelStmt(/*@ non_null */ LabelStmt x) {
159 visitStmt(x);
160 }
161
162 public void visitIfStmt(/*@ non_null */ IfStmt x) {
163 visitStmt(x);
164 }
165
166 public void visitForStmt(/*@ non_null */ ForStmt x) {
167 visitStmt(x);
168 }
169
170 public void visitSkipStmt(/*@ non_null */ SkipStmt x) {
171 visitStmt(x);
172 }
173
174 public void visitSwitchLabel(/*@ non_null */ SwitchLabel x) {
175 visitStmt(x);
176 }
177
178 public void visitTryFinallyStmt(/*@ non_null */ TryFinallyStmt x) {
179 visitStmt(x);
180 }
181
182 public void visitTryCatchStmt(/*@ non_null */ TryCatchStmt x) {
183 visitStmt(x);
184 }
185
186 public void visitStmtPragma(/*@ non_null */ StmtPragma x) {
187 visitStmt(x);
188 }
189
190 public void visitConstructorInvocation(/*@ non_null */ ConstructorInvocation x) {
191 visitStmt(x);
192 }
193
194 public void visitCatchClause(/*@ non_null */ CatchClause x) {
195 visitASTNode(x);
196 }
197
198 public void visitVarInit(/*@ non_null */ VarInit x) {
199 visitASTNode(x);
200 }
201
202 public void visitArrayInit(/*@ non_null */ ArrayInit x) {
203 visitVarInit(x);
204 }
205
206 public void visitExpr(/*@ non_null */ Expr x) {
207 visitVarInit(x);
208 }
209
210 public void visitThisExpr(/*@ non_null */ ThisExpr x) {
211 visitExpr(x);
212 }
213
214 public void visitLiteralExpr(/*@ non_null */ LiteralExpr x) {
215 visitExpr(x);
216 }
217
218 public void visitArrayRefExpr(/*@ non_null */ ArrayRefExpr x) {
219 visitExpr(x);
220 }
221
222 public void visitNewInstanceExpr(/*@ non_null */ NewInstanceExpr x) {
223 visitExpr(x);
224 }
225
226 public void visitNewArrayExpr(/*@ non_null */ NewArrayExpr x) {
227 visitExpr(x);
228 }
229
230 public void visitCondExpr(/*@ non_null */ CondExpr x) {
231 visitExpr(x);
232 }
233
234 public void visitInstanceOfExpr(/*@ non_null */ InstanceOfExpr x) {
235 visitExpr(x);
236 }
237
238 public void visitCastExpr(/*@ non_null */ CastExpr x) {
239 visitExpr(x);
240 }
241
242 public void visitBinaryExpr(/*@ non_null */ BinaryExpr x) {
243 // if the binary expression contains the right shift operator warn about
244 // it
245 if(x.getTag() == TagConstants.RSHIFT || x.getTag() == TagConstants.ASGRSHIFT) {
246 ErrorSet.warning(x.getStartLoc(), "The semantics of the right shift operator are incomplete.");
247 }
248 visitExpr(x);
249 }
250
251 public void visitUnaryExpr(/*@ non_null */ UnaryExpr x) {
252 visitExpr(x);
253 }
254
255 public void visitParenExpr(/*@ non_null */ ParenExpr x) {
256 visitExpr(x);
257 }
258
259 public void visitAmbiguousVariableAccess(/*@ non_null */ AmbiguousVariableAccess x) {
260 visitExpr(x);
261 }
262
263 public void visitVariableAccess(/*@ non_null */ VariableAccess x) {
264 visitExpr(x);
265 }
266
267 public void visitFieldAccess(/*@ non_null */ FieldAccess x) {
268 visitExpr(x);
269 }
270
271 public void visitAmbiguousMethodInvocation(/*@ non_null */ AmbiguousMethodInvocation x) {
272 visitExpr(x);
273 }
274
275 public void visitMethodInvocation(/*@ non_null */ MethodInvocation x) {
276 visitExpr(x);
277 }
278
279 public void visitClassLiteral(/*@ non_null */ ClassLiteral x) {
280 visitExpr(x);
281 }
282
283 public void visitObjectDesignator(/*@ non_null */ ObjectDesignator x) {
284 visitASTNode(x);
285 }
286
287 public void visitExprObjectDesignator(/*@ non_null */ ExprObjectDesignator x) {
288 visitObjectDesignator(x);
289 }
290
291 public void visitTypeObjectDesignator(/*@ non_null */ TypeObjectDesignator x) {
292 visitObjectDesignator(x);
293 }
294
295 public void visitSuperObjectDesignator(/*@ non_null */ SuperObjectDesignator x) {
296 visitObjectDesignator(x);
297 }
298
299 public void visitType(/*@ non_null */ Type x) {
300 visitASTNode(x);
301 }
302
303 public void visitErrorType(/*@ non_null */ ErrorType x) {
304 visitType(x);
305 }
306
307 public void visitPrimitiveType(/*@ non_null */ PrimitiveType x) {
308 visitType(x);
309 }
310
311 public void visitTypeName(/*@ non_null */ TypeName x) {
312 visitType(x);
313 }
314
315 public void visitArrayType(/*@ non_null */ ArrayType x) {
316 visitType(x);
317 }
318
319 public void visitName(/*@ non_null */ Name x) {
320 visitASTNode(x);
321 }
322
323 public void visitSimpleName(/*@ non_null */ SimpleName x) {
324 visitName(x);
325 }
326
327 public void visitCompoundName(/*@ non_null */ CompoundName x) {
328 visitName(x);
329 }
330
331 public void visitModifierPragma(/*@ non_null */ ModifierPragma x) {
332 visitASTNode(x);
333 }
334
335 public void visitLexicalPragma(/*@ non_null */ LexicalPragma x) {
336 visitASTNode(x);
337 }
338
339 public void visitTypeModifierPragma(/*@ non_null */ TypeModifierPragma x) {
340 visitASTNode(x);
341 }
342
343 }