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.ast.ASTClassOrInterfaceDeclaration;
    8   import net.sourceforge.pmd.ast.ASTFieldDeclaration;
    9   import net.sourceforge.pmd.ast.ASTMethodDeclaration;
    10
    11  import java.util.Iterator;
    12  import java.util.List;
    13
    14  public class AvoidFieldNameMatchingMethodName extends AbstractRule {
    15
    16      public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
    17          if (node.isInterface()) {
    18              return data;
    19          }
    20          return super.visit(node, data);
    21      }
    22
    23      public Object visit(ASTFieldDeclaration node, Object data) {
    24          String varName = node.getVariableName();
    25          String fieldDeclaringType = getDeclaringType(node);
    26          if (varName != null) {
    27              varName = varName.toLowerCase();
    28              ASTClassOrInterfaceDeclaration cl = (ASTClassOrInterfaceDeclaration) node.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
    29              if (cl != null) {
    30                  List methods = cl.findChildrenOfType(ASTMethodDeclaration.class);
    31                  for (Iterator it = methods.iterator(); it.hasNext();) {
    32                      ASTMethodDeclaration m = (ASTMethodDeclaration) it.next();
    33                      //Make sure we are comparing fields and methods inside same type
    34                      if (fieldDeclaringType.equals(getDeclaringType(m))) {
    35                          String n = m.getMethodName();
    36                          if (varName.equals(n.toLowerCase())) {
    37                              addViolation(data, node);
    38                          }
    39                      }
    40                  }
    41              }
    42          }
    43          return data;
    44      }
    45  }