1 /***************************************************************************************
2 * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. *
3 * http://aspectwerkz.codehaus.org *
4 * ---------------------------------------------------------------------------------- *
5 * The software in this package is published under the terms of the LGPL license *
6 * a copy of which has been included with this distribution in the license.txt file. *
7 **************************************************************************************/
8 package org.codehaus.aspectwerkz.joinpoint.impl;
9
10 import org.codehaus.aspectwerkz.joinpoint.CatchClauseRtti;
11 import org.codehaus.aspectwerkz.joinpoint.Rtti;
12
13 import java.lang.ref.WeakReference;
14
15 /***
16 * Implementation for the catch clause RTTI.
17 *
18 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
19 */
20 public class CatchClauseRttiImpl implements CatchClauseRtti {
21 private final CatchClauseSignatureImpl m_signature;
22
23 private WeakReference m_thisRef;
24
25 private WeakReference m_targetRef;
26
27 private Object m_parameterValue;
28
29 /***
30 * Creates a new catch clause RTTI.
31 *
32 * @param signature
33 * @param thisInstance
34 * @param targetInstance
35 */
36 public CatchClauseRttiImpl(final CatchClauseSignatureImpl signature,
37 final Object thisInstance,
38 final Object targetInstance) {
39 m_signature = signature;
40 m_thisRef = new WeakReference(thisInstance);
41 m_targetRef = new WeakReference(targetInstance);
42 }
43
44 /***
45 * Clones the RTTI instance.
46 *
47 * @param thisInstance
48 * @param targetInstance
49 * @return
50 */
51 public Rtti cloneFor(final Object thisInstance, final Object targetInstance) {
52 return new CatchClauseRttiImpl(m_signature, thisInstance, targetInstance);
53 }
54
55 /***
56 * Returns the instance currently executing.
57 *
58 * @return the instance currently executing
59 */
60 public Object getThis() {
61 return m_thisRef.get();
62 }
63
64 /***
65 * Returns the target instance.
66 *
67 * @return the target instance
68 */
69 public Object getTarget() {
70 return m_targetRef.get();
71 }
72
73 /***
74 * Returns the declaring class.
75 *
76 * @return the declaring class
77 */
78 public Class getDeclaringType() {
79 return m_signature.getDeclaringType();
80 }
81
82 /***
83 * Returns the modifiers for the signature. <p/>Could be used like this:
84 * <p/>
85 * <pre>
86 * boolean isPublic = java.lang.reflect.Modifier.isPublic(signature.getModifiers());
87 * </pre>
88 *
89 * @return the mofifiers
90 */
91 public int getModifiers() {
92 return m_signature.getModifiers();
93 }
94
95 /***
96 * Returns the name (f.e. name of method of field).
97 *
98 * @return
99 */
100 public String getName() {
101 return m_signature.getName();
102 }
103
104 /***
105 * Returns the parameter type.
106 *
107 * @return the parameter type
108 */
109 public Class getParameterType() {
110 return m_signature.getParameterType();
111 }
112
113 /***
114 * Returns the value of the parameter.
115 *
116 * @return the value of the parameter
117 */
118 public Object getParameterValue() {
119 return getTarget();
120 }
121
122 /***
123 * Returns a string representation of the signature.
124 *
125 * @return a string representation
126 * @TODO: implement toString to something meaningful
127 */
128 public String toString() {
129 return super.toString();
130 }
131 }