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