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.ast.ASTClassOrInterfaceDeclaration; 7 import net.sourceforge.pmd.ast.ASTLocalVariableDeclaration; 8 import net.sourceforge.pmd.ast.ASTMethodDeclaration; 9 10 public class LocalVariableCouldBeFinal extends AbstractOptimizationRule { 11 12 public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { 13 if (node.isInterface()) { 14 return data; 15 } 16 return super.visit(node, data); 17 } 18 19 public Object visit(ASTLocalVariableDeclaration node, Object data) { 20 if (node.isFinal()) { 21 return data; 22 } 23 final String varName = getVarName(node); 24 25 ASTMethodDeclaration md = (ASTMethodDeclaration) node.getFirstParentOfType(ASTMethodDeclaration.class); 26 if (md != null) { 27 if (!isVarWritterInMethod(varName, md)) { 28 addViolation(data, node); 29 } 30 } 31 return data; 32 } 33 34 }