1 package ch.ethz.prose.crosscut; 2 3 import java.lang.reflect.Method ; 4 import java.lang.reflect.Modifier ; 5 6 import ch.ethz.jvmai.CodeJoinPoint; 7 import ch.ethz.prose.engine.JoinPointRequest; 8 import ch.ethz.prose.engine.MethodRedefineRequest; 9 10 15 public class MethodRedefineCutSpecializer extends MethodCutSpecializer { 16 17 20 public MethodRedefineCutSpecializer(MethodCutSignaturePattern adviceSignature) { 21 super(adviceSignature); 22 mayFilterStaticallyMask = MASK_METHOD_REDEFINE_JP; 23 canFilterStaticallyMask = MASK_METHOD_REDEFINE_JP; 24 } 25 26 protected boolean doIsSpecialRequest(JoinPointRequest jpr) { 27 Class targetClass = null; 28 Method methodToExecute = null; 29 int methodModifiers = 0; 30 31 if (jpr instanceof MethodRedefineRequest) { 32 targetClass = ((MethodRedefineRequest) jpr).getTargetClass(); 33 methodToExecute = ((MethodRedefineRequest) jpr).getMethod(); 34 } 35 36 methodModifiers = methodToExecute.getModifiers(); 37 38 return ((methodModifiers & Modifier.ABSTRACT) != Modifier.ABSTRACT) 39 && ((methodModifiers & Modifier.NATIVE) != Modifier.NATIVE) 40 && adviceSignature.matchesTarget(targetClass) 41 && adviceSignature.matchesParameters(methodToExecute) 42 && methodToExecute.getReturnType().isAssignableFrom(adviceSignature.methodObj.getReturnType()); 43 } 44 45 protected boolean doIsSpecialEvent(CodeJoinPoint jpe) { 46 throw new RuntimeException ("Not supported"); 47 } 48 49 } 50 | Popular Tags |