/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
/* Generated By:JJTree: Do not edit this line. ASTAnnotation.java */
package net.sourceforge.pmd.lang.java.ast;
import java.util.Arrays;
import java.util.List;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.lang.ast.Node;
public class ASTAnnotation extends AbstractJavaNode {
private static List<String> unusedRules = Arrays.asList(new String[] { "UnusedPrivateField", "UnusedLocalVariable",
"UnusedPrivateMethod", "UnusedFormalParameter", });
private static List<String> serialRules = Arrays
.asList(new String[] { "BeanMembersShouldSerialize", "MissingSerialVersionUID" });
public ASTAnnotation(int id) {
super(id);
}
public ASTAnnotation(JavaParser p, int id) {
super(p, id);
}
public boolean suppresses(Rule rule) {
final String ruleAnno = "\"PMD." + rule.getName() + "\"";
if (jjtGetChild(0) instanceof ASTSingleMemberAnnotation) {
ASTSingleMemberAnnotation n = (ASTSingleMemberAnnotation) jjtGetChild(0);
return checkAnnototation(n, ruleAnno, rule);
} else if (jjtGetChild(0) instanceof ASTNormalAnnotation) {
ASTNormalAnnotation n = (ASTNormalAnnotation) jjtGetChild(0);
return checkAnnototation(n, ruleAnno, rule);
}
return false;
}
private boolean checkAnnototation(Node n, String ruleAnno, Rule rule) {
if (n.jjtGetChild(0) instanceof ASTName) {
ASTName annName = (ASTName) n.jjtGetChild(0);
if ("SuppressWarnings".equals(annName.getImage())
|| "java.lang.SuppressWarnings".equals(annName.getImage())) {
List<ASTLiteral> nodes = n.findDescendantsOfType(ASTLiteral.class);
for (ASTLiteral element : nodes) {
if (element.hasImageEqualTo("\"PMD\"") || element.hasImageEqualTo(ruleAnno)
// Check for standard annotations values
|| element.hasImageEqualTo("\"all\"")
|| element.hasImageEqualTo("\"serial\"") && serialRules.contains(rule.getName())
|| element.hasImageEqualTo("\"unused\"") && unusedRules.contains(rule.getName())) {
return true;
}
}
}
}
return false;
}
/**
* Accept the visitor.
*/
@Override
public Object jjtAccept(JavaParserVisitor visitor, Object data) {
return visitor.visit(this, data);
}
}