1 23 package org.hammurapi.inspectors; 24 25 import java.util.HashSet ; 26 import java.util.Iterator ; 27 import java.util.Set ; 28 29 import org.hammurapi.InspectorBase; 30 31 import com.pavelvlasov.jsel.Class; 32 import com.pavelvlasov.jsel.Field; 33 import com.pavelvlasov.jsel.JselException; 34 import com.pavelvlasov.jsel.TypeIdentifier; 35 import com.pavelvlasov.jsel.VariableDefinition; 36 37 43 public class HidingInheritedFieldsRule extends InspectorBase { 44 45 public void visit(Class clazz) { 46 try { 47 TypeIdentifier superclass = clazz.getSuperclass(); 48 if (superclass!=null) { 49 Class parentClass=(Class ) superclass.find(); 53 if (parentClass!=null) { 54 Set parentFields=new HashSet (); 55 Iterator it=parentClass.getFields().iterator(); 56 while (it.hasNext()) { 57 Field field = (Field) it.next(); 58 String cPkg = clazz.getCompilationUnit().getPackage().getName(); 59 String sPkg = superclass.getCompilationUnit().getPackage().getName(); 60 boolean isVisible=cPkg.equals(sPkg) ? !field.getModifiers().contains("private") : (field.getModifiers().contains("public") || field.getModifiers().contains("protected")); 61 if (isVisible && field instanceof VariableDefinition) { 62 parentFields.add(((VariableDefinition) field).getName()); 63 } 64 } 65 66 it=clazz.getFields().iterator(); 67 while (it.hasNext()) { 68 Field field = (Field) it.next(); 69 if (field instanceof VariableDefinition && parentFields.contains(((VariableDefinition) field).getName())) { 70 VariableDefinition vd=(VariableDefinition) field; 71 if (!("serialVersionUID".equals(vd.getName()) && vd.getTypeSpecification().isKindOf("long"))) { 73 context.reportViolation(field); 74 } 75 } 76 } 77 } 78 } 79 } catch (JselException e) { 80 context.warn(clazz, "Could not resolve parent class: "+e); 81 } 82 } 83 } 84 | Popular Tags |