1 23 package org.hammurapi.inspectors; 24 25 import java.util.Stack ; 26 27 import org.hammurapi.InspectorBase; 28 29 import com.pavelvlasov.jsel.JselException; 30 import com.pavelvlasov.jsel.LanguageElement; 31 import com.pavelvlasov.jsel.Parameter; 32 import com.pavelvlasov.jsel.expressions.Dot; 33 import com.pavelvlasov.jsel.expressions.Expression; 34 import com.pavelvlasov.jsel.expressions.Ident; 35 import com.pavelvlasov.jsel.expressions.MethodCall; 36 import com.pavelvlasov.jsel.statements.Handler; 37 import com.pavelvlasov.review.SourceMarker; 38 39 40 46 public class PrintStackTraceRule extends InspectorBase { 47 48 private static final String PRINTSTACKTRACE_NAME = "printStackTrace("; 49 50 55 56 private ThreadLocal handlerStack=new ThreadLocal () { 57 protected Object initialValue() { 58 return new Stack (); 59 } 60 }; 61 62 private Stack getHandlerStack() { 63 return (Stack ) handlerStack.get(); 64 } 65 66 72 public void visit(Handler element) { 73 getHandlerStack().push(element.getParameter()); 74 } 75 76 public void leave(Handler element) { 77 getHandlerStack().pop(); 78 } 79 80 public void visit(MethodCall methodCall) { 81 if (methodCall.getParameters().isEmpty() 82 || methodCall.getParameters().size() == 1) { 83 Stack stack = getHandlerStack(); 84 if (!stack.isEmpty()) { 85 Parameter parameter = (Parameter) stack.peek(); 86 if (methodCall.getName() instanceof Dot) { 88 Expression lastOperand = 89 (Expression) methodCall.getName().getOperand(1); 90 if ((lastOperand instanceof Ident) 91 && PRINTSTACKTRACE_NAME.equals( 92 ((Ident) lastOperand).getText())) { 93 94 Expression firstOperand = 95 (Expression) methodCall 96 .getName() 97 .getOperand(0); 98 99 try { 100 if ((firstOperand instanceof Ident) 101 && ((LanguageElement) methodCall) 102 .getEnclosingScope() 103 .getVariableNamespace() 104 .find( 105 ((Ident) lastOperand).getText()) 106 == parameter) { 107 context.reportViolation((SourceMarker) methodCall); 108 } 109 } catch (JselException e) { 110 context.warn(parameter, e); 111 } 112 } 113 } 114 } 115 } 116 } 117 118 122 123 131 132 } 133 | Popular Tags |