1 23 package org.hammurapi.inspectors; 24 25 import java.util.List ; 26 27 import org.hammurapi.InspectorBase; 28 29 import com.pavelvlasov.jsel.LanguageElement; 30 import com.pavelvlasov.jsel.expressions.Dot; 31 import com.pavelvlasov.jsel.expressions.Ident; 32 import com.pavelvlasov.jsel.expressions.MethodCall; 33 import com.pavelvlasov.jsel.expressions.PrimaryExpression; 34 import com.pavelvlasov.jsel.statements.WhileStatement; 35 import com.pavelvlasov.review.SourceMarker; 36 37 43 public class WaitInLoopRule extends InspectorBase { 44 45 48 private static final String WAIT = "wait"; 49 50 55 public void visit(MethodCall element) { 56 PrimaryExpression methodName = element.getName(); 57 if (methodName instanceof Dot) { 58 List flatOperands = ((Dot) methodName).getFlatOperands(); 59 methodName=(PrimaryExpression) flatOperands.get(flatOperands.size()-1); 60 } 61 62 List parameters = element.getParameters(); 63 if (methodName instanceof Ident && WAIT.equals(((Ident) methodName).getText()) && (parameters.size()==0 || parameters.size()==1)) { 64 if (!checkForWhileAsParent((LanguageElement) element)) { 65 context.reportViolation((SourceMarker) element); 66 } 67 } 68 } 69 70 76 private boolean checkForWhileAsParent(LanguageElement le) { 77 boolean foundWhile = le instanceof WhileStatement; 78 79 while (!foundWhile && le.getParent()!=null) { 80 le = le.getParent(); 81 foundWhile = le instanceof WhileStatement; 82 } 83 84 return foundWhile; 85 } 86 } 87 | Popular Tags |