KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > prose > crosscut > MethodRedefineCutSpecializer


1 package ch.ethz.prose.crosscut;
2
3 import java.lang.reflect.Method JavaDoc;
4 import java.lang.reflect.Modifier JavaDoc;
5
6 import ch.ethz.jvmai.CodeJoinPoint;
7 import ch.ethz.prose.engine.JoinPointRequest;
8 import ch.ethz.prose.engine.MethodRedefineRequest;
9
10 /**
11  * A specializer for method redefine cuts.
12  *
13  * @author Johann Gyger
14  */

15 public class MethodRedefineCutSpecializer extends MethodCutSpecializer {
16
17   /**
18    * @param adviceSignature
19    */

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 JavaDoc targetClass = null;
28     Method JavaDoc 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 JavaDoc("Not supported");
47   }
48
49 }
50
Popular Tags