1 23 package org.hammurapi.inspectors; 24 25 import java.util.List ; 26 27 import org.hammurapi.InspectorBase; 28 29 import com.pavelvlasov.jsel.JselException; 30 import com.pavelvlasov.jsel.LanguageElement; 31 import com.pavelvlasov.jsel.TypeSpecification; 32 import com.pavelvlasov.jsel.VariableDefinition; 33 import com.pavelvlasov.jsel.expressions.Dot; 34 import com.pavelvlasov.jsel.expressions.Expression; 35 import com.pavelvlasov.jsel.expressions.Ident; 36 import com.pavelvlasov.jsel.expressions.MethodCall; 37 import com.pavelvlasov.jsel.expressions.PrimaryExpression; 38 import com.pavelvlasov.jsel.expressions.StringConstant; 39 import com.pavelvlasov.review.SourceMarker; 40 41 42 48 public class StringLiteralEqualsRule extends InspectorBase { 49 50 53 private static final String EQUALS = "equals"; 54 55 60 public void visit(MethodCall element) { 61 PrimaryExpression methodName = element.getName(); 62 if (methodName instanceof Dot) { 63 List flatOperands = ((Dot) methodName).getFlatOperands(); 64 methodName=(PrimaryExpression) flatOperands.get(flatOperands.size()-1); 65 } 66 67 List parameters = element.getParameters(); 68 if (methodName instanceof Ident && EQUALS.equals(((Ident) methodName).getText()) && parameters.size()==1) { 69 Expression parameter = (Expression) parameters.get(0); 70 if (parameter instanceof StringConstant) { 71 context.reportViolation((SourceMarker) parameter); 72 } else if (parameter instanceof Ident) { 73 try { 74 Object r=((LanguageElement) parameter).getEnclosingScope().getVariableNamespace().find(((Ident) parameter).getText()); 76 if (r instanceof VariableDefinition) { 77 VariableDefinition vd=(VariableDefinition) r; 78 TypeSpecification typeSpecification = vd.getTypeSpecification(); 79 try { 80 if (vd.getModifiers().contains("final") && vd.getInitializer()!=null && typeSpecification.getDimensions()==0 && typeSpecification.getType().isKindOf("java.lang.String")) { 81 context.reportViolation((SourceMarker) parameter); 82 } 83 } catch (JselException e) { 84 context.warn((SourceMarker) typeSpecification, e); 85 } 86 } 87 } catch (JselException e) { 88 context.warn((SourceMarker) parameter, e); 89 } 90 } 91 } 92 } 93 94 } 95 | Popular Tags |