001 /**
002 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
003 */
004 package net.sourceforge.pmd.lang.java.rule;
005
006 import java.util.List;
007
008 import net.sourceforge.pmd.RuleContext;
009 import net.sourceforge.pmd.lang.Language;
010 import net.sourceforge.pmd.lang.ast.Node;
011 import net.sourceforge.pmd.lang.java.ast.*;
012 import net.sourceforge.pmd.lang.rule.AbstractRule;
013 import net.sourceforge.pmd.lang.rule.ImmutableLanguage;
014
015 public abstract class AbstractJavaRule extends AbstractRule implements JavaParserVisitor, ImmutableLanguage {
016
017 public AbstractJavaRule() {
018 super.setLanguage(Language.JAVA);
019 // Enable Type Resolution on Java Rules by default
020 super.setUsesTypeResolution();
021 }
022
023 public void apply(List<? extends Node> nodes, RuleContext ctx) {
024 visitAll(nodes, ctx);
025 }
026
027 protected void visitAll(List<? extends Node> nodes, RuleContext ctx) {
028 for (Object element : nodes) {
029 ASTCompilationUnit node = (ASTCompilationUnit) element;
030 visit(node, ctx);
031 }
032 }
033
034 /**
035 * Gets the Image of the first parent node of type
036 * ASTClassOrInterfaceDeclaration or <code>null</code>
037 *
038 * @param node
039 * the node which will be searched
040 */
041 protected final String getDeclaringType(Node node) {
042 ASTClassOrInterfaceDeclaration c = node.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
043 if (c != null) {
044 return c.getImage();
045 }
046 return null;
047 }
048
049 public static boolean isQualifiedName(Node node) {
050 return node.getImage().indexOf('.') != -1;
051 }
052
053 public static boolean importsPackage(ASTCompilationUnit node, String packageName) {
054 List<ASTImportDeclaration> nodes = node.findChildrenOfType(ASTImportDeclaration.class);
055 for (ASTImportDeclaration n : nodes) {
056 if (n.getPackageName().startsWith(packageName)) {
057 return true;
058 }
059 }
060 return false;
061 }
062
063 //
064 // The following APIs are identical to those in JavaParserVisitorAdapter.
065 // Due to Java single inheritance, it preferred to extend from the more
066 // complex Rule base class instead of from relatively simple Visitor.
067 //
068 public Object visit(JavaNode node, Object data) {
069 node.childrenAccept(this, data);
070 return null;
071 }
072
073 public Object visit(ASTExtendsList node, Object data) {
074 return visit((JavaNode) node, data);
075 }
076
077 public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
078 return visit((JavaNode) node, data);
079 }
080
081 public Object visit(ASTImplementsList node, Object data) {
082 return visit((JavaNode) node, data);
083 }
084
085 public Object visit(ASTTypeParameters node, Object data) {
086 return visit((JavaNode) node, data);
087 }
088
089 public Object visit(ASTMemberSelector node, Object data) {
090 return visit((JavaNode) node, data);
091 }
092
093 public Object visit(ASTTypeParameter node, Object data) {
094 return visit((JavaNode) node, data);
095 }
096
097 public Object visit(ASTTypeBound node, Object data) {
098 return visit((JavaNode) node, data);
099 }
100
101 public Object visit(ASTClassOrInterfaceBody node, Object data) {
102 return visit((JavaNode) node, data);
103 }
104
105 public Object visit(ASTClassOrInterfaceBodyDeclaration node, Object data) {
106 return visit((JavaNode) node, data);
107 }
108
109 public Object visit(ASTEnumBody node, Object data) {
110 return visit((JavaNode) node, data);
111 }
112
113 public Object visit(ASTEnumConstant node, Object data) {
114 return visit((JavaNode) node, data);
115 }
116
117 public Object visit(ASTReferenceType node, Object data) {
118 return visit((JavaNode) node, data);
119 }
120
121 public Object visit(ASTClassOrInterfaceType node, Object data) {
122 return visit((JavaNode) node, data);
123 }
124
125 public Object visit(ASTTypeArguments node, Object data) {
126 return visit((JavaNode) node, data);
127 }
128
129 public Object visit(ASTTypeArgument node, Object data) {
130 return visit((JavaNode) node, data);
131 }
132
133 public Object visit(ASTWildcardBounds node, Object data) {
134 return visit((JavaNode) node, data);
135 }
136
137 public Object visit(ASTAnnotation node, Object data) {
138 return visit((JavaNode) node, data);
139 }
140
141 public Object visit(ASTNormalAnnotation node, Object data) {
142 return visit((JavaNode) node, data);
143 }
144
145 public Object visit(ASTMarkerAnnotation node, Object data) {
146 return visit((JavaNode) node, data);
147 }
148
149 public Object visit(ASTSingleMemberAnnotation node, Object data) {
150 return visit((JavaNode) node, data);
151 }
152
153 public Object visit(ASTMemberValuePairs node, Object data) {
154 return visit((JavaNode) node, data);
155 }
156
157 public Object visit(ASTMemberValuePair node, Object data) {
158 return visit((JavaNode) node, data);
159 }
160
161 public Object visit(ASTMemberValue node, Object data) {
162 return visit((JavaNode) node, data);
163 }
164
165 public Object visit(ASTMemberValueArrayInitializer node, Object data) {
166 return visit((JavaNode) node, data);
167 }
168
169 public Object visit(ASTAnnotationTypeDeclaration node, Object data) {
170 return visit((JavaNode) node, data);
171 }
172
173 public Object visit(ASTAnnotationTypeBody node, Object data) {
174 return visit((JavaNode) node, data);
175 }
176
177 public Object visit(ASTAnnotationTypeMemberDeclaration node, Object data) {
178 return visit((JavaNode) node, data);
179 }
180
181 public Object visit(ASTAnnotationMethodDeclaration node, Object data) {
182 return visit((JavaNode)node, data);
183 }
184
185 public Object visit(ASTDefaultValue node, Object data) {
186 return visit((JavaNode) node, data);
187 }
188
189 public Object visit(ASTRUNSIGNEDSHIFT node, Object data) {
190 return visit((JavaNode) node, data);
191 }
192
193 public Object visit(ASTRSIGNEDSHIFT node, Object data) {
194 return visit((JavaNode) node, data);
195 }
196
197 public Object visit(ASTCompilationUnit node, Object data) {
198 return visit((JavaNode) node, data);
199 }
200
201 public Object visit(ASTEnumDeclaration node, Object data) {
202 return visit((JavaNode) node, data);
203 }
204
205 public Object visit(ASTAssertStatement node, Object data) {
206 return visit((JavaNode) node, data);
207 }
208
209 public Object visit(ASTPackageDeclaration node, Object data) {
210 return visit((JavaNode) node, data);
211 }
212
213 public Object visit(ASTImportDeclaration node, Object data) {
214 return visit((JavaNode) node, data);
215 }
216
217 public Object visit(ASTTypeDeclaration node, Object data) {
218 return visit((JavaNode) node, data);
219 }
220
221 public Object visit(ASTFieldDeclaration node, Object data) {
222 return visit((JavaNode) node, data);
223 }
224
225 public Object visit(ASTVariableDeclarator node, Object data) {
226 return visit((JavaNode) node, data);
227 }
228
229 public Object visit(ASTVariableDeclaratorId node, Object data) {
230 return visit((JavaNode) node, data);
231 }
232
233 public Object visit(ASTVariableInitializer node, Object data) {
234 return visit((JavaNode) node, data);
235 }
236
237 public Object visit(ASTArrayInitializer node, Object data) {
238 return visit((JavaNode) node, data);
239 }
240
241 public Object visit(ASTMethodDeclaration node, Object data) {
242 return visit((JavaNode) node, data);
243 }
244
245 public Object visit(ASTMethodDeclarator node, Object data) {
246 return visit((JavaNode) node, data);
247 }
248
249 public Object visit(ASTFormalParameters node, Object data) {
250 return visit((JavaNode) node, data);
251 }
252
253 public Object visit(ASTFormalParameter node, Object data) {
254 return visit((JavaNode) node, data);
255 }
256
257 public Object visit(ASTConstructorDeclaration node, Object data) {
258 return visit((JavaNode) node, data);
259 }
260
261 public Object visit(ASTExplicitConstructorInvocation node, Object data) {
262 return visit((JavaNode) node, data);
263 }
264
265 public Object visit(ASTInitializer node, Object data) {
266 return visit((JavaNode) node, data);
267 }
268
269 public Object visit(ASTType node, Object data) {
270 return visit((JavaNode) node, data);
271 }
272
273 public Object visit(ASTPrimitiveType node, Object data) {
274 return visit((JavaNode) node, data);
275 }
276
277 public Object visit(ASTResultType node, Object data) {
278 return visit((JavaNode) node, data);
279 }
280
281 public Object visit(ASTName node, Object data) {
282 return visit((JavaNode) node, data);
283 }
284
285 public Object visit(ASTNameList node, Object data) {
286 return visit((JavaNode) node, data);
287 }
288
289 public Object visit(ASTExpression node, Object data) {
290 return visit((JavaNode) node, data);
291 }
292
293 public Object visit(ASTAssignmentOperator node, Object data) {
294 return visit((JavaNode) node, data);
295 }
296
297 public Object visit(ASTConditionalExpression node, Object data) {
298 return visit((JavaNode) node, data);
299 }
300
301 public Object visit(ASTConditionalOrExpression node, Object data) {
302 return visit((JavaNode) node, data);
303 }
304
305 public Object visit(ASTConditionalAndExpression node, Object data) {
306 return visit((JavaNode) node, data);
307 }
308
309 public Object visit(ASTInclusiveOrExpression node, Object data) {
310 return visit((JavaNode) node, data);
311 }
312
313 public Object visit(ASTExclusiveOrExpression node, Object data) {
314 return visit((JavaNode) node, data);
315 }
316
317 public Object visit(ASTAndExpression node, Object data) {
318 return visit((JavaNode) node, data);
319 }
320
321 public Object visit(ASTEqualityExpression node, Object data) {
322 return visit((JavaNode) node, data);
323 }
324
325 public Object visit(ASTInstanceOfExpression node, Object data) {
326 return visit((JavaNode) node, data);
327 }
328
329 public Object visit(ASTRelationalExpression node, Object data) {
330 return visit((JavaNode) node, data);
331 }
332
333 public Object visit(ASTShiftExpression node, Object data) {
334 return visit((JavaNode) node, data);
335 }
336
337 public Object visit(ASTAdditiveExpression node, Object data) {
338 return visit((JavaNode) node, data);
339 }
340
341 public Object visit(ASTMultiplicativeExpression node, Object data) {
342 return visit((JavaNode) node, data);
343 }
344
345 public Object visit(ASTUnaryExpression node, Object data) {
346 return visit((JavaNode) node, data);
347 }
348
349 public Object visit(ASTPreIncrementExpression node, Object data) {
350 return visit((JavaNode) node, data);
351 }
352
353 public Object visit(ASTPreDecrementExpression node, Object data) {
354 return visit((JavaNode) node, data);
355 }
356
357 public Object visit(ASTUnaryExpressionNotPlusMinus node, Object data) {
358 return visit((JavaNode) node, data);
359 }
360
361 public Object visit(ASTPostfixExpression node, Object data) {
362 return visit((JavaNode) node, data);
363 }
364
365 public Object visit(ASTCastExpression node, Object data) {
366 return visit((JavaNode) node, data);
367 }
368
369 public Object visit(ASTPrimaryExpression node, Object data) {
370 return visit((JavaNode) node, data);
371 }
372
373 public Object visit(ASTPrimaryPrefix node, Object data) {
374 return visit((JavaNode) node, data);
375 }
376
377 public Object visit(ASTPrimarySuffix node, Object data) {
378 return visit((JavaNode) node, data);
379 }
380
381 public Object visit(ASTLiteral node, Object data) {
382 return visit((JavaNode) node, data);
383 }
384
385 public Object visit(ASTBooleanLiteral node, Object data) {
386 return visit((JavaNode) node, data);
387 }
388
389 public Object visit(ASTNullLiteral node, Object data) {
390 return visit((JavaNode) node, data);
391 }
392
393 public Object visit(ASTArguments node, Object data) {
394 return visit((JavaNode) node, data);
395 }
396
397 public Object visit(ASTArgumentList node, Object data) {
398 return visit((JavaNode) node, data);
399 }
400
401 public Object visit(ASTAllocationExpression node, Object data) {
402 return visit((JavaNode) node, data);
403 }
404
405 public Object visit(ASTArrayDimsAndInits node, Object data) {
406 return visit((JavaNode) node, data);
407 }
408
409 public Object visit(ASTStatement node, Object data) {
410 return visit((JavaNode) node, data);
411 }
412
413 public Object visit(ASTLabeledStatement node, Object data) {
414 return visit((JavaNode) node, data);
415 }
416
417 public Object visit(ASTBlock node, Object data) {
418 return visit((JavaNode) node, data);
419 }
420
421 public Object visit(ASTBlockStatement node, Object data) {
422 return visit((JavaNode) node, data);
423 }
424
425 public Object visit(ASTLocalVariableDeclaration node, Object data) {
426 return visit((JavaNode) node, data);
427 }
428
429 public Object visit(ASTEmptyStatement node, Object data) {
430 return visit((JavaNode) node, data);
431 }
432
433 public Object visit(ASTStatementExpression node, Object data) {
434 return visit((JavaNode) node, data);
435 }
436
437 public Object visit(ASTSwitchStatement node, Object data) {
438 return visit((JavaNode) node, data);
439 }
440
441 public Object visit(ASTSwitchLabel node, Object data) {
442 return visit((JavaNode) node, data);
443 }
444
445 public Object visit(ASTIfStatement node, Object data) {
446 return visit((JavaNode) node, data);
447 }
448
449 public Object visit(ASTWhileStatement node, Object data) {
450 return visit((JavaNode) node, data);
451 }
452
453 public Object visit(ASTDoStatement node, Object data) {
454 return visit((JavaNode) node, data);
455 }
456
457 public Object visit(ASTForStatement node, Object data) {
458 return visit((JavaNode) node, data);
459 }
460
461 public Object visit(ASTForInit node, Object data) {
462 return visit((JavaNode) node, data);
463 }
464
465 public Object visit(ASTStatementExpressionList node, Object data) {
466 return visit((JavaNode) node, data);
467 }
468
469 public Object visit(ASTForUpdate node, Object data) {
470 return visit((JavaNode) node, data);
471 }
472
473 public Object visit(ASTBreakStatement node, Object data) {
474 return visit((JavaNode) node, data);
475 }
476
477 public Object visit(ASTContinueStatement node, Object data) {
478 return visit((JavaNode) node, data);
479 }
480
481 public Object visit(ASTReturnStatement node, Object data) {
482 return visit((JavaNode) node, data);
483 }
484
485 public Object visit(ASTThrowStatement node, Object data) {
486 return visit((JavaNode) node, data);
487 }
488
489 public Object visit(ASTSynchronizedStatement node, Object data) {
490 return visit((JavaNode) node, data);
491 }
492
493 public Object visit(ASTTryStatement node, Object data) {
494 return visit((JavaNode) node, data);
495 }
496
497 public Object visit(ASTFinallyStatement node, Object data) {
498 return visit((JavaNode) node, data);
499 }
500
501 public Object visit(ASTCatchStatement node, Object data) {
502 return visit((JavaNode) node, data);
503 }
504 }
|