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    }