01 /* Generated By:JJTree: Do not edit this line. ASTAnnotation.java */
02
03 package net.sourceforge.pmd.lang.java.ast;
04
05 import java.util.Arrays;
06 import java.util.List;
07
08 import net.sourceforge.pmd.Rule;
09
10 public class ASTAnnotation extends AbstractJavaNode {
11
12 private static List<String> unusedRules = Arrays.asList(new String[] { "UnusedPrivateField", "UnusedLocalVariable",
13 "UnusedPrivateMethod", "UnusedFormalParameter" });
14
15 private static List<String> serialRules = Arrays.asList(new String[] { "BeanMembersShouldSerialize", "MissingSerialVersionUID"});
16
17 public ASTAnnotation(int id) {
18 super(id);
19 }
20
21 public ASTAnnotation(JavaParser p, int id) {
22 super(p, id);
23 }
24
25 public boolean suppresses(Rule rule) {
26 final String ruleAnno = "\"PMD." + rule.getName() + "\"";
27
28 if (jjtGetChild(0) instanceof ASTSingleMemberAnnotation) {
29 ASTSingleMemberAnnotation n = (ASTSingleMemberAnnotation) jjtGetChild(0);
30
31 if (n.jjtGetChild(0) instanceof ASTName) {
32 ASTName annName = (ASTName) n.jjtGetChild(0);
33
34 if (annName.getImage().equals("SuppressWarnings")) {
35 List<ASTLiteral> nodes = n.findDescendantsOfType(ASTLiteral.class);
36 for (ASTLiteral element : nodes) {
37 if (element.hasImageEqualTo("\"PMD\"") || element.hasImageEqualTo(ruleAnno)
38 // Check for standard annotations values
39 || element.hasImageEqualTo("\"all\"")
40 || element.hasImageEqualTo("\"serial\"") && serialRules.contains(rule.getName())
41 || element.hasImageEqualTo("\"unused\"") && unusedRules.contains(rule.getName())) {
42 return true;
43 }
44 }
45 }
46 }
47 }
48 return false;
49 }
50
51 /**
52 * Accept the visitor.
53 */
54 @Override
55 public Object jjtAccept(JavaParserVisitor visitor, Object data) {
56 return visitor.visit(this, data);
57 }
58 }
|