1 27 package ch.ethz.prose.filter; 28 29 import java.util.*; 31 import java.io.*; 32 import ch.ethz.jvmai.JoinPointKinds; 33 import ch.ethz.jvmai.JoinPoint; 34 import ch.ethz.jvmai.CodeJoinPoint; 35 import ch.ethz.prose.engine.JoinPointRequest; 36 import ch.ethz.prose.engine.FieldAccessRequest; 37 import ch.ethz.prose.engine.FieldModificationRequest; 38 39 40 46 public 47 class FieldsInTypeFilter extends PointCutter implements JoinPointKinds{ 48 49 final public static int SUBCLASS_INHERITANCE = 1; 50 final public static int SUPERCLASS_INHERITANCE = 2; 51 final public static int NO_INHERITANCE = 3; 52 53 private int inheritanceType; 54 private Class subOrSuperClass; 55 59 public FieldsInTypeFilter(Class cls, int inhType) 60 { 61 this.inheritanceType = inhType; 62 this.subOrSuperClass = cls; 63 acceptMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 64 mayFilterStaticallyMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 65 canFilterStaticallyMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 66 } 67 68 69 protected boolean doIsSpecialRequest(JoinPointRequest jpr) 70 { 71 Class declaringClass; 72 switch (jpr.getMask() & (MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP)) 73 { 74 case MASK_FIELD_ACCESS_JP: 75 declaringClass = ((FieldAccessRequest)jpr).getField().getDeclaringClass(); 76 break; 77 case MASK_FIELD_MODIFICATION_JP: 78 declaringClass = ((FieldModificationRequest)jpr).getField().getDeclaringClass(); 79 break; 80 default: 81 throw new Error ("FielsInTypeFilter.doIsSpecialReq:unrequested request"); 82 } 83 84 switch(inheritanceType) 85 { 86 case SUBCLASS_INHERITANCE: return subOrSuperClass.isAssignableFrom(declaringClass); 87 case SUPERCLASS_INHERITANCE:return declaringClass.isAssignableFrom(subOrSuperClass); 88 case NO_INHERITANCE: return subOrSuperClass.equals(declaringClass); 89 default: 90 throw new Error ("Illegal state Exception"); 91 } 92 } 93 94 protected boolean doIsSpecialEvent(CodeJoinPoint jpr) 95 { 96 throw new Error ("PointCutter did not fullfil its contract"); 97 } 98 99 100 101 102 } 103 104 105 | Popular Tags |