KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > ch > ethz > prose > jvmai > jikesrvm > advice_weaver > AdviceJoinPointManager


1 package ch.ethz.prose.jvmai.jikesrvm.advice_weaver;
2
3 import ch.ethz.jvmai.JVMAspectInterface;
4 import ch.ethz.prose.crosscut.MethodRedefineCut;
5 import ch.ethz.prose.engine.*;
6
7 /**
8  * A JoinPointManager that uses advice weaving at bytecode level.
9  *
10  * @author Johann Gyger
11  */

12 public class AdviceJoinPointManager extends JoinPointManager {
13
14   protected RedefineWeaver weaver = new RedefineWeaver();
15
16   public AdviceJoinPointManager(boolean isConnected, JVMAspectInterface ai, boolean enableRevMap) {
17     super(isConnected, ai, enableRevMap);
18   }
19
20   /**
21    * This method doesn't register a listener. Instead, it directly weaves the
22    * advice into the method.
23    *
24    * @param jpl listener to register
25    * @param jpr request
26    */

27   public void registerListener(JoinPointListener jpl, JoinPointRequest jpr) {
28     if (jpr instanceof MethodRedefineRequest) {
29       MethodRedefineCut cut = (MethodRedefineCut) jpl;
30       MethodRedefineRequest request = (MethodRedefineRequest) jpr;
31       weaver.weaveMethodRedefineCut(cut, request);
32     } else {
33       super.registerListener(jpl, jpr);
34     }
35   }
36
37   /**
38    * This method doesn't unregister a listener. Instead, it unweaves the advice
39    * that was woven with
40    * {@link #registerListener(JoinPointListener, JoinPointRequest)}.
41    *
42    * @param jpl listener to register
43    */

44   public void unregisterListener(JoinPointListener jpl) {
45     if (jpl instanceof MethodRedefineCut) {
46       MethodRedefineCut cut = (MethodRedefineCut) jpl;
47       weaver.unweaveMethodRedefineCut(cut);
48     } else {
49       super.unregisterListener(jpl);
50     }
51   }
52
53 }
54
Popular Tags