1 23 package org.hammurapi.inspectors; 24 25 import org.hammurapi.InspectorBase; 26 27 import com.pavelvlasov.jsel.JselException; 28 import com.pavelvlasov.jsel.Method; 29 import com.pavelvlasov.jsel.VariableDefinition; 30 import com.pavelvlasov.jsel.expressions.Dot; 31 import com.pavelvlasov.jsel.expressions.Ident; 32 import com.pavelvlasov.jsel.expressions.This; 33 import com.pavelvlasov.review.SourceMarker; 34 35 36 42 public class AccessToStaticMembersRule extends InspectorBase { 43 44 47 private static final String STATIC = "static"; 48 49 55 public void visit(Dot dot) { 56 Object dot1 = dot.getOperand(1); 57 if (dot1 instanceof Ident) { 58 try { 59 Object provider = ((Ident) dot1).getProvider(); 60 boolean isStatic = false; 61 if (provider instanceof Method) { 62 if (((Method) provider).getModifiers().contains(STATIC)) { 63 isStatic = true; 64 } 65 } else if (provider instanceof VariableDefinition) { 66 if (((VariableDefinition) provider).getModifiers().contains(STATIC)) { 67 isStatic = true; 68 } 69 } 70 71 if (isStatic) { 72 Object dot0 = dot.getOperand(0); 73 Ident user = null; 74 if (dot0 instanceof This) { 75 context.reportViolation((SourceMarker)dot1); 76 } else if (dot0 instanceof Ident) { 77 user = (Ident) dot0; 78 } else if (dot0 instanceof Dot) { 79 user = (Ident) ((Dot)dot0).getOperand(1); 80 } 81 if (user!=null) { 82 provider = user.getProvider(); 83 if (provider instanceof VariableDefinition) { 84 if (!((VariableDefinition)provider).getModifiers().contains(STATIC)) { 85 context.reportViolation((SourceMarker)dot1); 86 } 87 } 88 } 89 } 90 } catch (JselException e) { 91 context.warn((SourceMarker)dot, e); 92 } 93 } 94 } 95 } 96 | Popular Tags |