01: //
02: // This file is part of the prose package.
03: //
04: // The contents of this file are subject to the Mozilla Public License
05: // Version 1.1 (the "License"); you may not use this file except in
06: // compliance with the License. You may obtain a copy of the License at
07: // http://www.mozilla.org/MPL/
08: //
09: // Software distributed under the License is distributed on an "AS IS" basis,
10: // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11: // for the specific language governing rights and limitations under the
12: // License.
13: //
14: // The Original Code is prose.
15: //
16: // The Initial Developers of the Original Code are Angela Nicoara and Gerald Linhofer.
17: // All Rights Reserved.
18: //
19: // Contributor(s):
20: // $Id$
21: // =====================================================================
22: //
23: // (history at end)
24: //
25:
26: package ch.ethz.prose.engine;
27:
28: import java.lang.reflect.InvocationTargetException;
29: import java.lang.reflect.Method;
30:
31: import ch.ethz.jvmai.JVMAspectInterface;
32: import ch.ethz.prose.HotSwapRedefineWeaver;
33: import ch.ethz.prose.crosscut.MethodRedefineCut;
34: import ch.ethz.inf.iks.jvmai.jvmdi.HotSwapAspectInterfaceImpl;
35:
36: /**
37: * A JoinPointManager that uses advice weaving at bytecode level.
38: *
39: * @version $Revision$
40: * @author Angela Nicoara
41: * @author Gerald Linhofer
42: */
43: public class HotSwapJoinPointManager extends JoinPointManager {
44: // Weaver used for MethodRedefineCuts
45: protected HotSwapRedefineWeaver weaver = new HotSwapRedefineWeaver();
46:
47: public HotSwapJoinPointManager(boolean isConnected,
48: JVMAspectInterface ai, boolean enableRevMap) {
49: super (isConnected, ai, enableRevMap);
50: }
51:
52: /**
53: * This method doesn't register a listener. Instead, it directly weaves the
54: * advice into the method.
55: *
56: * @param jpl listener to register
57: * @param jpr request
58: */
59: public void registerListener(JoinPointListener jpl,
60: JoinPointRequest jpr) {
61: //System.out.println("HotSwapJoinPointManager.registerListener(" + jpl + "," + jpr + ")");
62: if (jpr instanceof MethodRedefineRequest) {
63: MethodRedefineCut cut = (MethodRedefineCut) jpl;
64: MethodRedefineRequest request = (MethodRedefineRequest) jpr;
65: weaver.weaveMethodRedefineCut(cut, request);
66: } else {
67: super .registerListener(jpl, jpr);
68: }
69: }
70:
71: /**
72: * This method doesn't unregister a listener. Instead, it unweaves the advice
73: * that was woven with
74: * {@link #registerListener(JoinPointListener, JoinPointRequest)}.
75: *
76: * @param jpl listener to register
77: */
78: public void unregisterListener(JoinPointListener jpl) {
79: if (jpl instanceof MethodRedefineCut) {
80: MethodRedefineCut cut = (MethodRedefineCut) jpl;
81: weaver.unweaveMethodRedefineCut(cut);
82: } else {
83: super .unregisterListener(jpl);
84: }
85: }
86: }
87:
88: //======================================================================
89: //
90: // $Log$
91: //
|