View Javadoc

    1   package net.sourceforge.pmd.rules.strings;
    2
    3   import net.sourceforge.pmd.AbstractRule;
    4   import net.sourceforge.pmd.ast.ASTName;
    5   import net.sourceforge.pmd.ast.ASTPrimaryExpression;
    6   import net.sourceforge.pmd.ast.ASTPrimaryPrefix;
    7   import net.sourceforge.pmd.ast.ASTPrimarySuffix;
    8
    9   public class UnnecessaryCaseChange extends AbstractRule {
    10
    11      public Object visit(ASTPrimaryExpression exp, Object data) {
    12          if (exp.jjtGetNumChildren() < 4) {
    13              return data;
    14          }
    15
    16          String first = getBadPrefixOrNull(exp);
    17          if (first == null) {
    18              return data;
    19          }
    20
    21          String second = getBadSuffixOrNull(exp);
    22          if (second == null) {
    23              return data;
    24          }
    25
    26          if (!(exp.jjtGetChild(1) instanceof ASTPrimarySuffix)) {
    27              return data;
    28          }
    29          ASTPrimarySuffix methodCall = (ASTPrimarySuffix)exp.jjtGetChild(1);
    30          if (!methodCall.isArguments() || methodCall.getArgumentCount() > 0) {
    31              return data;
    32          }
    33
    34          addViolation(data, exp);
    35          return data;
    36      }
    37
    38      private String getBadPrefixOrNull(ASTPrimaryExpression exp) {
    39          // verify PrimaryPrefix/Name[ends-with(@Image, 'toUpperCase']
    40          if (!(exp.jjtGetChild(0) instanceof ASTPrimaryPrefix)) {
    41              return null;
    42          }
    43
    44          ASTPrimaryPrefix prefix = (ASTPrimaryPrefix) exp.jjtGetChild(0);
    45          if (prefix.jjtGetNumChildren() != 1 || !(prefix.jjtGetChild(0) instanceof ASTName)) {
    46              return null;
    47          }
    48
    49          ASTName name = (ASTName) prefix.jjtGetChild(0);
    50          if (name.getImage() == null || !(name.getImage().endsWith("toUpperCase") || name.getImage().endsWith("toLowerCase"))) {
    51              return null;
    52          }
    53          return name.getImage();
    54      }
    55
    56      private String getBadSuffixOrNull(ASTPrimaryExpression exp) {
    57          // verify PrimarySuffix[@Image='equals']
    58          if (!(exp.jjtGetChild(2) instanceof ASTPrimarySuffix)) {
    59              return null;
    60          }
    61
    62          ASTPrimarySuffix suffix = (ASTPrimarySuffix) exp.jjtGetChild(2);
    63          if (suffix.getImage() == null || !(suffix.hasImageEqualTo("equals") || suffix.hasImageEqualTo("equalsIgnoreCase"))) {
    64              return null;
    65          }
    66          return suffix.getImage();
    67      }
    68
    69  }