package org.aspectj.lang.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.Signature;
public interface MemberSignature extends Signature {
+ AccessibleObject getAccessibleObject();
}
package org.aspectj.runtime.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.reflect.AdviceSignature;
class AdviceSignatureImpl extends CodeSignatureImpl implements AdviceSignature {
sm.addThrows(buf, getExceptionTypes());
return buf.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.runtime.reflect.MemberSignatureImpl#createAccessibleObject()
+ */
+ protected AccessibleObject createAccessibleObject() {
+ try {
+ return declaringType.getDeclaredMethod(getName(),getParameterTypes());
+ } catch (Exception ex) {
+ ; // nothing we can do, caller will see null
+ }
+ return null;
+ }
}
package org.aspectj.runtime.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.reflect.ConstructorSignature;
class ConstructorSignatureImpl extends CodeSignatureImpl implements ConstructorSignature {
sm.addThrows(buf, getExceptionTypes());
return buf.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.runtime.reflect.MemberSignatureImpl#createAccessibleObject()
+ */
+ protected AccessibleObject createAccessibleObject() {
+ try {
+ return declaringType.getDeclaredConstructor(getParameterTypes());
+ } catch (Exception ex) {
+ ; // nothing we can do, caller will see null
+ }
+ return null;
+ }
}
package org.aspectj.runtime.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.reflect.FieldSignature;
public class FieldSignatureImpl extends MemberSignatureImpl implements FieldSignature {
buf.append(getName());
return buf.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.runtime.reflect.MemberSignatureImpl#createAccessibleObject()
+ */
+ protected AccessibleObject createAccessibleObject() {
+ try {
+ return declaringType.getDeclaredField(getName());
+ } catch (Exception ex) {
+ ; // nothing we can do, caller will see null
+ }
+ return null;
+ }
}
import org.aspectj.lang.reflect.InitializerSignature;
+import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Modifier;
class InitializerSignatureImpl extends CodeSignatureImpl implements InitializerSignature {
buf.append(getName());
return buf.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.runtime.reflect.MemberSignatureImpl#createAccessibleObject()
+ */
+ protected AccessibleObject createAccessibleObject() {
+ try {
+ return declaringType.getDeclaredConstructor(getParameterTypes());
+ } catch (Exception ex) {
+ ; // nothing we can do, caller will see null
+ }
+ return null;
+ }
}
package org.aspectj.runtime.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.reflect.MemberSignature;
abstract class MemberSignatureImpl extends SignatureImpl implements MemberSignature {
+ protected AccessibleObject accessibleObj = null;
+
MemberSignatureImpl(int modifiers, String name, Class declaringType) {
super(modifiers, name, declaringType);
}
public MemberSignatureImpl(String stringRep) {
super(stringRep);
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.lang.reflect.MemberSignature#getAccessibleObject()
+ */
+ public AccessibleObject getAccessibleObject() {
+ if (accessibleObj == null) {
+ accessibleObj = createAccessibleObject();
+ }
+ return accessibleObj;
+ }
+
+ protected abstract AccessibleObject createAccessibleObject();
}
package org.aspectj.runtime.reflect;
+import java.lang.reflect.AccessibleObject;
+
import org.aspectj.lang.reflect.MethodSignature;
class MethodSignatureImpl extends CodeSignatureImpl implements MethodSignature {
sm.addThrows(buf, getExceptionTypes());
return buf.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.aspectj.lang.reflect.MemberSignature#getAccessibleObject()
+ */
+ public AccessibleObject createAccessibleObject() {
+ try {
+ return declaringType.getDeclaredMethod(getName(),getParameterTypes());
+ } catch (NoSuchMethodException nsmEx) {
+ ; // nothing we can do, user will see null return
+ }
+ return null;
+ }
}