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                  if (!methods.isEmpty()) {
    32                      for (Iterator it = methods.iterator(); it.hasNext();) {
    33                          ASTMethodDeclaration m = (ASTMethodDeclaration) it.next();
    34                          //Make sure we are comparing fields and methods inside same type
    35                          if (fieldDeclaringType.equals(getDeclaringType(m))) {
    36                              String n = m.getMethodName();
    37                              if (varName.equals(n.toLowerCase())) {
    38                                  addViolation(data, node);
    39                              }
    40                          }
    41                      }
    42                  }
    43              }
    44          }
    45          return data;
    46      }
    47  }