1
2
3
4 package net.sourceforge.pmd.lang.java.rule;
5
6 import java.util.List;
7
8 import net.sourceforge.pmd.RuleContext;
9 import net.sourceforge.pmd.lang.Language;
10 import net.sourceforge.pmd.lang.ast.Node;
11 import net.sourceforge.pmd.lang.java.ast.*;
12 import net.sourceforge.pmd.lang.rule.AbstractRule;
13 import net.sourceforge.pmd.lang.rule.ImmutableLanguage;
14
15 public abstract class AbstractJavaRule extends AbstractRule implements JavaParserVisitor, ImmutableLanguage {
16
17 public AbstractJavaRule() {
18 super.setLanguage(Language.JAVA);
19
20 super.setUsesTypeResolution();
21 }
22
23 public void apply(List<? extends Node> nodes, RuleContext ctx) {
24 visitAll(nodes, ctx);
25 }
26
27 protected void visitAll(List<? extends Node> nodes, RuleContext ctx) {
28 for (Object element : nodes) {
29 ASTCompilationUnit node = (ASTCompilationUnit) element;
30 visit(node, ctx);
31 }
32 }
33
34
35
36
37
38
39
40
41 protected final String getDeclaringType(Node node) {
42 ASTClassOrInterfaceDeclaration c = node.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
43 if (c != null) {
44 return c.getImage();
45 }
46 return null;
47 }
48
49 public static boolean isQualifiedName(Node node) {
50 return node.getImage().indexOf('.') != -1;
51 }
52
53 public static boolean importsPackage(ASTCompilationUnit node, String packageName) {
54 List<ASTImportDeclaration> nodes = node.findChildrenOfType(ASTImportDeclaration.class);
55 for (ASTImportDeclaration n : nodes) {
56 if (n.getPackageName().startsWith(packageName)) {
57 return true;
58 }
59 }
60 return false;
61 }
62
63
64
65
66
67
68 public Object visit(JavaNode node, Object data) {
69 node.childrenAccept(this, data);
70 return null;
71 }
72
73 public Object visit(ASTExtendsList node, Object data) {
74 return visit((JavaNode) node, data);
75 }
76
77 public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
78 return visit((JavaNode) node, data);
79 }
80
81 public Object visit(ASTImplementsList node, Object data) {
82 return visit((JavaNode) node, data);
83 }
84
85 public Object visit(ASTTypeParameters node, Object data) {
86 return visit((JavaNode) node, data);
87 }
88
89 public Object visit(ASTMemberSelector node, Object data) {
90 return visit((JavaNode) node, data);
91 }
92
93 public Object visit(ASTTypeParameter node, Object data) {
94 return visit((JavaNode) node, data);
95 }
96
97 public Object visit(ASTTypeBound node, Object data) {
98 return visit((JavaNode) node, data);
99 }
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
505 public Object visit(ASTResourceSpecification node, Object data) {
506 return visit((JavaNode)node, data);
507 }
508
509 public Object visit(ASTResources node, Object data) {
510 return visit((JavaNode)node, data);
511 }
512
513 public Object visit(ASTResource node, Object data) {
514 return visit((JavaNode)node, data);
515 }
516
517 }