View Javadoc

1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3    */
4   package net.sourceforge.pmd.rules.optimization;
5   
6   import net.sourceforge.pmd.RuleContext;
7   import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
8   import net.sourceforge.pmd.ast.ASTLocalVariableDeclaration;
9   import net.sourceforge.pmd.ast.ASTMethodDeclaration;
10  
11  public class LocalVariableCouldBeFinal extends AbstractOptimizationRule {
12  
13      public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
14          if (node.isInterface()) {
15              return data;
16          }
17          return super.visit(node, data);
18      }
19  
20      /***
21       * Find if this variable is ever written.
22       * 
23       * @see net.sourceforge.pmd.ast.JavaParserVisitor#visit(net.sourceforge.pmd.ast.ASTLocalVariableDeclaration, java.lang.Object)
24       */
25      public Object visit(ASTLocalVariableDeclaration node, Object data) {
26          //ignore if already declared final
27          if (node.isFinal()) {
28              return data;
29          }
30          final String varName = getVarName(node); 
31          
32          ASTMethodDeclaration md = (ASTMethodDeclaration) node.getFirstParentOfType(ASTMethodDeclaration.class);
33          if (md!=null) {
34              if (!isVarWritterInMethod(varName, md) ) {
35                  addViolation((RuleContext)data, node);
36              }
37          } 
38          return data;
39      }
40  
41  }