View Javadoc

1   package net.sourceforge.pmd.rules;
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          addViolation(data, exp);
27          return data;
28      }
29  
30      private String getBadPrefixOrNull(ASTPrimaryExpression exp) {
31          // verify PrimaryPrefix/Name[ends-with(@Image, 'toUpperCase']
32          if (!(exp.jjtGetChild(0) instanceof ASTPrimaryPrefix)) {
33              return null;
34          }
35  
36          ASTPrimaryPrefix prefix = (ASTPrimaryPrefix)exp.jjtGetChild(0);
37          if (prefix.jjtGetNumChildren() != 1 || !(prefix.jjtGetChild(0) instanceof ASTName)) {
38             return null;
39          }
40  
41          ASTName name = (ASTName)prefix.jjtGetChild(0);
42          if (name.getImage() == null || !(name.getImage().endsWith("toUpperCase") || name.getImage().endsWith("toLowerCase"))){
43              return null;
44          }
45          return name.getImage();
46      }
47  
48      private String getBadSuffixOrNull(ASTPrimaryExpression exp) {
49          // verify PrimarySuffix[@Image='equals']
50          if (!(exp.jjtGetChild(2) instanceof ASTPrimarySuffix)) {
51              return null;
52          }
53  
54          ASTPrimarySuffix suffix = (ASTPrimarySuffix)exp.jjtGetChild(2);
55          if (suffix.getImage() == null || !(suffix.getImage().equals("equals") || suffix.getImage().equals("equalsIgnoreCase") )) {
56              return null;
57          }
58          return suffix.getImage();
59      }
60  
61  }