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