1 23 24 package org.hammurapi.inspectors; 25 26 import java.util.Iterator ; 27 import java.util.LinkedList ; 28 import java.util.List ; 29 30 import org.hammurapi.HammurapiException; 31 import org.hammurapi.InspectorBase; 32 33 import com.pavelvlasov.jsel.expressions.AssignmentExpression; 34 import com.pavelvlasov.jsel.expressions.ConditionalExpression; 35 import com.pavelvlasov.jsel.expressions.LogicalOr; 36 import com.pavelvlasov.jsel.statements.IfStatement; 37 import com.pavelvlasov.review.SourceMarker; 38 import com.pavelvlasov.util.AccumulatingVisitorExceptionSink; 39 import com.pavelvlasov.util.DispatchingVisitor; 40 import com.pavelvlasov.util.Visitable; 41 42 48 public class AssignmentInsideConditionalRule extends InspectorBase { 49 50 56 public static class AssignmentSnooper { 57 List assignments=new LinkedList (); 58 59 64 public void visit(AssignmentExpression expression) { 65 if (!(expression instanceof LogicalOr || expression instanceof ConditionalExpression)) { 66 assignments.add(expression); 67 } 68 } 69 } 70 71 78 public void visit(IfStatement statement) throws HammurapiException { 79 AssignmentSnooper snooper=new AssignmentSnooper(); 80 AccumulatingVisitorExceptionSink es=new AccumulatingVisitorExceptionSink(); 81 DispatchingVisitor dv=new DispatchingVisitor(snooper, es); 82 ((Visitable) statement.getExpression()).accept(dv); 83 84 Iterator it=snooper.assignments.iterator(); 85 while (it.hasNext()) { 86 context.reportViolation((SourceMarker) it.next()); 87 } 88 89 if (!es.getExceptions().isEmpty()) { 90 es.dump(); 91 throw new HammurapiException("There have been exceptions (see above)"); 92 } 93 } 94 } 95 | Popular Tags |