1 27 package ch.ethz.prose.filter; 28 29 import java.util.*; 31 import java.io.*; 32 import java.lang.reflect.Modifier ; 33 34 import ch.ethz.jvmai.JoinPointKinds; 35 import ch.ethz.jvmai.JoinPoint; 36 import ch.ethz.jvmai.CodeJoinPoint; 37 import ch.ethz.prose.engine.JoinPointRequest; 38 import ch.ethz.prose.engine.MethodEntryRequest; 39 import ch.ethz.prose.engine.MethodExitRequest; 40 import ch.ethz.prose.engine.MethodRedefineRequest; 41 42 48 public 49 class ExecutionsAclFilter extends PointCutter implements JoinPointKinds 50 { 51 private boolean opMode; 52 private int theModifier; 53 public static boolean FILTER_METHOD_MODIFIERS = true; 54 public static boolean FILTER_CLASS_MODIFIERS = false; 55 56 public ExecutionsAclFilter(int modifier, boolean opMode) 57 { 58 this.theModifier = modifier; 59 this.opMode = opMode; 60 acceptMask = MASK_ALL_JP; 61 mayFilterStaticallyMask = MASK_METHOD_ENTRY_JP | MASK_METHOD_EXIT_JP | MASK_METHOD_REDEFINE_JP; 62 canFilterStaticallyMask = MASK_METHOD_ENTRY_JP | MASK_METHOD_EXIT_JP | MASK_METHOD_REDEFINE_JP; 63 64 } 65 66 protected boolean doIsSpecialRequest(JoinPointRequest jpr) 67 { 68 int modifiers = 0; 69 switch(jpr.getMask() & (MASK_METHOD_ENTRY_JP | MASK_METHOD_EXIT_JP)) 70 { 71 case MASK_METHOD_ENTRY_JP: 72 if (opMode == FILTER_METHOD_MODIFIERS) 73 modifiers = ((MethodEntryRequest)jpr).getMethod().getModifiers(); 74 else 75 modifiers = ((MethodEntryRequest)jpr).getTargetClass().getModifiers(); 76 break; 77 case MASK_METHOD_EXIT_JP: 78 if (opMode == FILTER_METHOD_MODIFIERS) 79 modifiers = ((MethodExitRequest)jpr).getMethod().getModifiers(); 80 else 81 modifiers = ((MethodExitRequest)jpr).getTargetClass().getModifiers(); 82 break; 83 case MASK_METHOD_REDEFINE_JP: 84 if (opMode == FILTER_METHOD_MODIFIERS) 85 modifiers = ((MethodRedefineRequest)jpr).getMethod().getModifiers(); 86 else 87 modifiers = ((MethodRedefineRequest)jpr).getTargetClass().getModifiers(); 88 break; 89 default: 90 throw new Error ("Illegal join point request allowed by the PointCutter"); 91 } 92 93 return (modifiers & theModifier) == theModifier; 94 } 95 96 protected boolean doIsSpecialEvent(CodeJoinPoint jp) 97 { 98 int modifiers; 99 if (opMode == FILTER_METHOD_MODIFIERS) 100 modifiers = jp.getMethod().getModifiers(); 101 else 102 modifiers = jp.getMethod().getDeclaringClass().getModifiers(); 103 104 return (modifiers & theModifier) == theModifier; 105 } 106 107 public String toString() 108 { 109 String result = ""; 110 if (opMode = FILTER_METHOD_MODIFIERS) 111 result += "Within.methods("; 112 else 113 result += "Within.type("; 114 115 switch (theModifier) 116 { 117 case Modifier.FINAL: result+= "final"; break; 118 case Modifier.PRIVATE: result+= "private";break; 119 case Modifier.PROTECTED: result+= "protected"; break; 120 case Modifier.PUBLIC: result+= "public"; break; 121 case Modifier.STATIC: result+= "static"; break; 122 case Modifier.SYNCHRONIZED: result+= "synchronized"; break; 123 case Modifier.TRANSIENT: result+= "transient"; break; 124 } 125 result += ")"; 126 return result; 127 } 128 } 129 130 131 | Popular Tags |