1 23 package org.hammurapi.inspectors; 24 25 import java.util.HashSet ; 26 import java.util.Set ; 27 28 import org.hammurapi.InspectorBase; 29 30 import com.pavelvlasov.jsel.JselException; 31 import com.pavelvlasov.jsel.LanguageElement; 32 import com.pavelvlasov.jsel.OperationInfo; 33 import com.pavelvlasov.jsel.expressions.MethodCall; 34 import com.pavelvlasov.jsel.expressions.NewObject; 35 import com.pavelvlasov.review.SourceMarker; 36 import com.pavelvlasov.util.Visitor; 37 38 39 45 public class ManageThreadsFromEjbRule extends InspectorBase { 46 47 50 private Set allowedMethods=new HashSet (); 51 52 55 private static final String VIOLATION_CLASS = "java.lang.Thread"; 56 57 63 public void visit(final com.pavelvlasov.jsel.Class clazz) { 64 try { 65 if (clazz.isKindOf("javax.ejb.EnterpriseBean")) { 66 clazz.accept(new Visitor() { 67 public boolean visit(Object target) { 68 if (target instanceof MethodCall) { 69 try { 70 OperationInfo provider=((MethodCall) target).getProvider(); 71 72 if (provider==null) { 73 context.warn((SourceMarker) target, "Provider is null for "+target+" at "+((LanguageElement) target).getLocation()); 74 } else { 75 if (provider.getDeclaringType().isKindOf(VIOLATION_CLASS) && !allowedMethods.contains(provider.getSignature())) { 76 context.reportViolation((SourceMarker) target); 77 } 78 } 79 } catch (JselException e) { 80 context.warn((SourceMarker) target, e); 81 } 82 } else if (target instanceof NewObject) { 83 NewObject newObject=(NewObject) target; 84 try { 85 if (newObject.getTypeSpecification().getType().isKindOf(VIOLATION_CLASS)) { 86 context.reportViolation((SourceMarker) target); 87 } 88 } catch (JselException e) { 89 context.warn((SourceMarker) target, e); 90 } 91 } 92 return true; 93 } 94 }); 95 } 96 } catch (JselException e) { 97 context.warn(clazz, e); 98 } 99 } 100 101 } 103 | Popular Tags |