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
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
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 }