1 /*** 2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html 3 */ 4 package net.sourceforge.pmd.rules; 5 6 import net.sourceforge.pmd.AbstractRule; 7 import net.sourceforge.pmd.RuleContext; 8 import net.sourceforge.pmd.ast.ASTMethodDeclaration; 9 import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration; 10 import net.sourceforge.pmd.symboltable.VariableNameDeclaration; 11 12 import java.text.MessageFormat; 13 import java.util.Iterator; 14 import java.util.List; 15 import java.util.Map; 16 17 public class UnusedFormalParameterRule extends AbstractRule { 18 19 public Object visit(ASTMethodDeclaration node, Object data) { 20 if (!node.isNative() && !((ASTClassOrInterfaceDeclaration)node.jjtGetParent().jjtGetParent().jjtGetParent()).isInterface()) { 21 RuleContext ctx = (RuleContext) data; 22 Map vars = node.getScope().getVariableDeclarations(); 23 for (Iterator i = vars.keySet().iterator(); i.hasNext();) { 24 VariableNameDeclaration nameDecl = (VariableNameDeclaration) i.next(); 25 if (!((List) vars.get(nameDecl)).isEmpty()) { 26 continue; 27 } 28 ctx.getReport().addRuleViolation(createRuleViolation(ctx, node, MessageFormat.format(getMessage(), new Object[]{nameDecl.getImage()}))); 29 } 30 } 31 return data; 32 } 33 }