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 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 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 } 70 | Popular Tags |