View Javadoc

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  }