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.MethodRtti; 11 import org.codehaus.aspectwerkz.joinpoint.Rtti; 12 13 import java.lang.ref.WeakReference; 14 import java.lang.reflect.Method; 15 16 /*** 17 * Implementation for the method signature. 18 * 19 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a> 20 */ 21 public class MethodRttiImpl implements MethodRtti { 22 private static final Object[] EMPTY_OBJECT_ARRAY = new Object[]{}; 23 24 private final MethodSignatureImpl m_signature; 25 26 private WeakReference m_thisRef; 27 28 private WeakReference m_targetRef; 29 30 private Object[] m_parameterValues = EMPTY_OBJECT_ARRAY; 31 32 private Object m_returnValue; 33 34 /*** 35 * Creates a new method RTTI. 36 * 37 * @param signature 38 * @param thisInstance 39 * @param targetInstance 40 */ 41 public MethodRttiImpl(final MethodSignatureImpl signature, final Object thisInstance, final Object targetInstance) { 42 m_signature = signature; 43 m_thisRef = new WeakReference(thisInstance); 44 m_targetRef = new WeakReference(targetInstance); 45 } 46 47 /*** 48 * Clones the RTTI instance. 49 * 50 * @param thisInstance 51 * @param targetInstance 52 * @return 53 */ 54 public Rtti cloneFor(final Object thisInstance, final Object targetInstance) { 55 return new MethodRttiImpl(m_signature, thisInstance, targetInstance); 56 } 57 58 /*** 59 * Returns the target instance. 60 * 61 * @return the target instance 62 */ 63 public Object getTarget() { 64 return m_targetRef.get(); 65 } 66 67 /*** 68 * Returns the instance currently executing. 69 * 70 * @return the instance currently executing 71 */ 72 public Object getThis() { 73 return m_thisRef.get(); 74 } 75 76 /*** 77 * Returns the method. 78 * 79 * @return the method 80 */ 81 public Method getMethod() { 82 return m_signature.getMethod(); 83 } 84 85 /*** 86 * Returns the declaring class. 87 * 88 * @return the declaring class 89 */ 90 public Class getDeclaringType() { 91 return m_signature.getDeclaringType(); 92 } 93 94 /*** 95 * Returns the modifiers for the signature. <p/>Could be used like this: 96 * <p/> 97 * <pre> 98 * boolean isPublic = java.lang.reflect.Modifier.isPublic(signature.getModifiers()); 99 * </pre> 100 * 101 * @return the mofifiers 102 */ 103 public int getModifiers() { 104 return m_signature.getModifiers(); 105 } 106 107 /*** 108 * Returns the name (f.e. name of method of field). 109 * 110 * @return 111 */ 112 public String getName() { 113 return m_signature.getName(); 114 } 115 116 /*** 117 * Returns the exception types declared by the code block. 118 * 119 * @return the exception types 120 */ 121 public Class[] getExceptionTypes() { 122 return m_signature.getExceptionTypes(); 123 } 124 125 /*** 126 * Returns the parameter types. 127 * 128 * @return the parameter types 129 */ 130 public Class[] getParameterTypes() { 131 return m_signature.getParameterTypes(); 132 } 133 134 /*** 135 * Sets the values of the parameters. 136 * 137 * @param parameterValues 138 */ 139 public void setParameterValues(final Object[] parameterValues) { 140 m_parameterValues = parameterValues; 141 } 142 143 /*** 144 * Returns the values of the parameters. 145 * 146 * @return the values of the parameters 147 */ 148 public Object[] getParameterValues() { 149 return m_parameterValues; 150 } 151 152 /*** 153 * Returns the return type. 154 * 155 * @return the return type 156 */ 157 public Class getReturnType() { 158 return m_signature.getReturnType(); 159 } 160 161 /*** 162 * Sets the return value. 163 * 164 * @param returnValue the return value 165 */ 166 public void setReturnValue(final Object returnValue) { 167 m_returnValue = returnValue; 168 } 169 170 /*** 171 * Returns the value of the return type. 172 * 173 * @return the value of the return type 174 */ 175 public Object getReturnValue() { 176 return m_returnValue; 177 } 178 179 /*** 180 * Returns a string representation of the signature. 181 * 182 * @return a string representation 183 * @TODO: implement toString to something meaningful 184 */ 185 public String toString() { 186 return super.toString(); 187 } 188 }