1 27 package ch.ethz.prose.filter; 28 29 import java.util.*; 31 import java.io.*; 32 import java.lang.reflect.Modifier ; 33 import ch.ethz.jvmai.JoinPointKinds; 34 import ch.ethz.jvmai.JoinPoint; 35 import ch.ethz.jvmai.CodeJoinPoint; 36 import ch.ethz.prose.engine.JoinPointRequest; 37 import ch.ethz.prose.engine.FieldAccessRequest; 38 import ch.ethz.prose.engine.FieldModificationRequest; 39 40 41 47 public 48 class FieldsWithModifierFilter extends PointCutter implements JoinPointKinds { 49 50 int theModifier; 51 public FieldsWithModifierFilter(int modifier) 52 { 53 acceptMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 54 mayFilterStaticallyMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 55 canFilterStaticallyMask = MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP | MASK_FIELD_JP; 56 theModifier = modifier; 57 } 58 59 60 protected boolean doIsSpecialRequest(JoinPointRequest jpr) 61 { 62 int jprType = jpr.getMask() & ( MASK_FIELD_ACCESS_JP | MASK_FIELD_MODIFICATION_JP); 64 int crtModifier; 65 switch (jprType) 66 { 67 case MASK_FIELD_ACCESS_JP: 68 crtModifier = ((FieldAccessRequest)jpr).getField().getModifiers(); 69 break; 70 case MASK_FIELD_MODIFICATION_JP: 71 crtModifier = ((FieldModificationRequest)jpr).getField().getModifiers(); 72 break; 73 default: throw new Error ("cannot get unrequested request"); 74 } 75 76 77 return (crtModifier & theModifier) == theModifier; 78 } 79 80 protected boolean doIsSpecialEvent(CodeJoinPoint jp) 81 { 82 throw new Error ("The PointCutter contract is not correct"); 83 } 84 85 } 86 87 88 | Popular Tags |