org.springsource.loaded.ri
Class ReflectiveInterceptor

java.lang.Object
  extended by org.springsource.loaded.ri.ReflectiveInterceptor

public class ReflectiveInterceptor
extends java.lang.Object

The reflective interceptor is called to rewrite any reflective calls that are found in the bytecode. Intercepting the calls means we can delegate to the SpringLoaded infrastructure.

Since:
0.5.0

Field Summary
static java.util.logging.Logger log
           
 
Constructor Summary
ReflectiveInterceptor()
           
 
Method Summary
protected static void fixModifier(ReloadableType rtype, java.lang.reflect.Constructor<?> constructor)
           
static java.lang.Class<?> getCallerClass()
          Get the Class that declares the method calling interceptor method that called this method.
static ReloadableType getRType(java.lang.Class<?> clazz)
          Access and return the ReloadableType field on a specified class.
static java.lang.annotation.Annotation jlClassGetAnnotation(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annoType)
           
static java.lang.annotation.Annotation[] jlClassGetAnnotations(java.lang.Class<?> clazz)
          Called to satisfy an invocation of java.lang.Class.getDeclaredAnnotations().
static java.lang.reflect.Constructor<?> jlClassGetConstructor(java.lang.Class<?> clazz, java.lang.Class<?>... params)
           
static java.lang.reflect.Constructor<?>[] jlClassGetConstructors(java.lang.Class<?> clazz)
           
static java.lang.annotation.Annotation[] jlClassGetDeclaredAnnotations(java.lang.Class<?> clazz)
          Called to satisfy an invocation of java.lang.Class.getDeclaredAnnotations().
static java.lang.reflect.Constructor<?> jlClassGetDeclaredConstructor(java.lang.Class<?> clazz, java.lang.Class<?>... params)
           
static java.lang.reflect.Constructor<?>[] jlClassGetDeclaredConstructors(java.lang.Class<?> clazz)
           
static java.lang.reflect.Field jlClassGetDeclaredField(java.lang.Class<?> clazz, java.lang.String name)
           
static java.lang.reflect.Field[] jlClassGetDeclaredFields(java.lang.Class<?> clazz)
           
static java.lang.reflect.Method jlClassGetDeclaredMethod(java.lang.Class<?> clazz, java.lang.String name, java.lang.Class<?>... params)
          Implementation of java.lang.class.getDeclaredMethod(String name, Class...
static java.lang.reflect.Method[] jlClassGetDeclaredMethods(java.lang.Class<?> clazz)
           
static java.lang.reflect.Field jlClassGetField(java.lang.Class<?> clazz, java.lang.String name)
           
static java.lang.reflect.Field[] jlClassGetFields(java.lang.Class<?> clazz)
          Although fields are not reloadable, we have to intercept this because otherwise we'll return the r$type field as a result here.
static java.lang.reflect.Method jlClassGetMethod(java.lang.Class<?> clazz, java.lang.String name, java.lang.Class<?>... params)
          Implementation of java.lang.class.getMethod(String name, Class...
static java.lang.reflect.Method[] jlClassGetMethods(java.lang.Class<?> clazz)
           
static int jlClassGetModifiers(java.lang.Class<?> clazz)
          Retrieve modifiers for a Java class, which might or might not be reloadable or reloaded.
static boolean jlClassIsAnnotationPresent(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> annoType)
           
static java.lang.Object jlClassNewInstance(java.lang.Class<?> clazz)
           
static java.lang.annotation.Annotation jlrAccessibleObjectGetAnnotation(java.lang.reflect.AccessibleObject obj, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation[] jlrAccessibleObjectGetAnnotations(java.lang.reflect.AccessibleObject obj)
           
static java.lang.annotation.Annotation[] jlrAccessibleObjectGetDeclaredAnnotations(java.lang.reflect.AccessibleObject obj)
           
static boolean jlrAccessibleObjectIsAnnotationPresent(java.lang.reflect.AccessibleObject obj, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation jlrAnnotatedElementGetAnnotation(java.lang.reflect.AnnotatedElement elem, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation[] jlrAnnotatedElementGetAnnotations(java.lang.reflect.AnnotatedElement elem)
           
static java.lang.annotation.Annotation[] jlrAnnotatedElementGetDeclaredAnnotations(java.lang.reflect.AnnotatedElement elem)
           
static boolean jlrAnnotatedElementIsAnnotationPresent(java.lang.reflect.AnnotatedElement elem, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation jlrConstructorGetAnnotation(java.lang.reflect.Constructor<?> c, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation[] jlrConstructorGetAnnotations(java.lang.reflect.Constructor<?> c)
           
static java.lang.annotation.Annotation[] jlrConstructorGetDeclaredAnnotations(java.lang.reflect.Constructor<?> c)
           
static java.lang.annotation.Annotation[][] jlrConstructorGetParameterAnnotations(java.lang.reflect.Constructor<?> c)
           
static boolean jlrConstructorIsAnnotationPresent(java.lang.reflect.Constructor<?> c, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.Object jlrConstructorNewInstance(java.lang.reflect.Constructor<?> c, java.lang.Object... params)
           
static java.lang.Object jlrFieldGet(java.lang.reflect.Field field, java.lang.Object target)
           
static java.lang.annotation.Annotation jlrFieldGetAnnotation(java.lang.reflect.Field field, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static java.lang.annotation.Annotation[] jlrFieldGetAnnotations(java.lang.reflect.Field field)
           
static boolean jlrFieldGetBoolean(java.lang.reflect.Field field, java.lang.Object target)
           
static byte jlrFieldGetByte(java.lang.reflect.Field field, java.lang.Object target)
           
static char jlrFieldGetChar(java.lang.reflect.Field field, java.lang.Object target)
           
static java.lang.annotation.Annotation[] jlrFieldGetDeclaredAnnotations(java.lang.reflect.Field field)
           
static double jlrFieldGetDouble(java.lang.reflect.Field field, java.lang.Object target)
           
static float jlrFieldGetFloat(java.lang.reflect.Field field, java.lang.Object target)
           
static int jlrFieldGetInt(java.lang.reflect.Field field, java.lang.Object target)
           
static long jlrFieldGetLong(java.lang.reflect.Field field, java.lang.Object target)
           
static short jlrFieldGetShort(java.lang.reflect.Field field, java.lang.Object target)
           
static boolean jlrFieldIsAnnotationPresent(java.lang.reflect.Field field, java.lang.Class<? extends java.lang.annotation.Annotation> annotType)
           
static void jlrFieldSet(java.lang.reflect.Field field, java.lang.Object target, java.lang.Object value)
           
static void jlrFieldSetBoolean(java.lang.reflect.Field field, java.lang.Object target, boolean value)
           
static void jlrFieldSetByte(java.lang.reflect.Field field, java.lang.Object target, byte value)
           
static void jlrFieldSetChar(java.lang.reflect.Field field, java.lang.Object target, char value)
           
static void jlrFieldSetDouble(java.lang.reflect.Field field, java.lang.Object target, double value)
           
static void jlrFieldSetFloat(java.lang.reflect.Field field, java.lang.Object target, float value)
           
static void jlrFieldSetInt(java.lang.reflect.Field field, java.lang.Object target, int value)
           
static void jlrFieldSetLong(java.lang.reflect.Field field, java.lang.Object target, long value)
           
static void jlrFieldSetShort(java.lang.reflect.Field field, java.lang.Object target, short value)
           
static java.lang.annotation.Annotation jlrMethodGetAnnotation(java.lang.reflect.Method method, java.lang.Class<? extends java.lang.annotation.Annotation> annotClass)
           
static java.lang.annotation.Annotation[] jlrMethodGetAnnotations(java.lang.reflect.Method method)
           
static java.lang.annotation.Annotation[] jlrMethodGetDeclaredAnnotations(java.lang.reflect.Method method)
           
static java.lang.annotation.Annotation[][] jlrMethodGetParameterAnnotations(java.lang.reflect.Method method)
           
static java.lang.Object jlrMethodInvoke(java.lang.reflect.Method method, java.lang.Object target, java.lang.Object... params)
           
static boolean jlrMethodIsAnnotationPresent(java.lang.reflect.Method method, java.lang.Class<? extends java.lang.annotation.Annotation> annotClass)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

public static java.util.logging.Logger log
Constructor Detail

ReflectiveInterceptor

public ReflectiveInterceptor()
Method Detail

jlClassGetDeclaredMethod

public static java.lang.reflect.Method jlClassGetDeclaredMethod(java.lang.Class<?> clazz,
                                                                java.lang.String name,
                                                                java.lang.Class<?>... params)
                                                         throws java.lang.SecurityException,
                                                                java.lang.NoSuchMethodException
Implementation of java.lang.class.getDeclaredMethod(String name, Class... params).

Throws:
java.lang.SecurityException
java.lang.NoSuchMethodException

jlClassGetMethod

public static java.lang.reflect.Method jlClassGetMethod(java.lang.Class<?> clazz,
                                                        java.lang.String name,
                                                        java.lang.Class<?>... params)
                                                 throws java.lang.SecurityException,
                                                        java.lang.NoSuchMethodException
Implementation of java.lang.class.getMethod(String name, Class... params).

Throws:
java.lang.SecurityException
java.lang.NoSuchMethodException

jlClassGetDeclaredMethods

public static java.lang.reflect.Method[] jlClassGetDeclaredMethods(java.lang.Class<?> clazz)

jlClassGetMethods

public static java.lang.reflect.Method[] jlClassGetMethods(java.lang.Class<?> clazz)

getCallerClass

public static java.lang.Class<?> getCallerClass()
Get the Class that declares the method calling interceptor method that called this method.


jlClassGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlClassGetDeclaredAnnotations(java.lang.Class<?> clazz)
Called to satisfy an invocation of java.lang.Class.getDeclaredAnnotations().

Parameters:
clazz - the class upon which the original call was being invoked

jlClassGetAnnotations

public static java.lang.annotation.Annotation[] jlClassGetAnnotations(java.lang.Class<?> clazz)
Called to satisfy an invocation of java.lang.Class.getDeclaredAnnotations().

Parameters:
clazz - the class upon which the original call was being invoked

jlClassGetAnnotation

public static java.lang.annotation.Annotation jlClassGetAnnotation(java.lang.Class<?> clazz,
                                                                   java.lang.Class<? extends java.lang.annotation.Annotation> annoType)

jlClassIsAnnotationPresent

public static boolean jlClassIsAnnotationPresent(java.lang.Class<?> clazz,
                                                 java.lang.Class<? extends java.lang.annotation.Annotation> annoType)

jlClassGetDeclaredConstructors

public static java.lang.reflect.Constructor<?>[] jlClassGetDeclaredConstructors(java.lang.Class<?> clazz)

fixModifier

protected static void fixModifier(ReloadableType rtype,
                                  java.lang.reflect.Constructor<?> constructor)

jlClassGetConstructors

public static java.lang.reflect.Constructor<?>[] jlClassGetConstructors(java.lang.Class<?> clazz)

jlClassGetDeclaredConstructor

public static java.lang.reflect.Constructor<?> jlClassGetDeclaredConstructor(java.lang.Class<?> clazz,
                                                                             java.lang.Class<?>... params)
                                                                      throws java.lang.SecurityException,
                                                                             java.lang.NoSuchMethodException
Throws:
java.lang.SecurityException
java.lang.NoSuchMethodException

jlClassGetConstructor

public static java.lang.reflect.Constructor<?> jlClassGetConstructor(java.lang.Class<?> clazz,
                                                                     java.lang.Class<?>... params)
                                                              throws java.lang.SecurityException,
                                                                     java.lang.NoSuchMethodException
Throws:
java.lang.SecurityException
java.lang.NoSuchMethodException

jlClassGetModifiers

public static int jlClassGetModifiers(java.lang.Class<?> clazz)
Retrieve modifiers for a Java class, which might or might not be reloadable or reloaded.

Parameters:
clazz -
Returns:

getRType

public static ReloadableType getRType(java.lang.Class<?> clazz)
Access and return the ReloadableType field on a specified class.

Parameters:
clazz -
Returns:

jlrMethodGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlrMethodGetDeclaredAnnotations(java.lang.reflect.Method method)

jlrMethodGetParameterAnnotations

public static java.lang.annotation.Annotation[][] jlrMethodGetParameterAnnotations(java.lang.reflect.Method method)

jlClassNewInstance

public static java.lang.Object jlClassNewInstance(java.lang.Class<?> clazz)
                                           throws java.lang.SecurityException,
                                                  java.lang.NoSuchMethodException,
                                                  java.lang.IllegalArgumentException,
                                                  java.lang.InstantiationException,
                                                  java.lang.IllegalAccessException,
                                                  java.lang.reflect.InvocationTargetException
Throws:
java.lang.SecurityException
java.lang.NoSuchMethodException
java.lang.IllegalArgumentException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException

jlrConstructorNewInstance

public static java.lang.Object jlrConstructorNewInstance(java.lang.reflect.Constructor<?> c,
                                                         java.lang.Object... params)
                                                  throws java.lang.InstantiationException,
                                                         java.lang.IllegalAccessException,
                                                         java.lang.IllegalArgumentException,
                                                         java.lang.reflect.InvocationTargetException,
                                                         java.lang.SecurityException,
                                                         java.lang.NoSuchMethodException
Throws:
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.reflect.InvocationTargetException
java.lang.SecurityException
java.lang.NoSuchMethodException

jlrMethodInvoke

public static java.lang.Object jlrMethodInvoke(java.lang.reflect.Method method,
                                               java.lang.Object target,
                                               java.lang.Object... params)
                                        throws java.lang.IllegalArgumentException,
                                               java.lang.IllegalAccessException,
                                               java.lang.reflect.InvocationTargetException
Throws:
java.lang.IllegalArgumentException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException

jlrMethodIsAnnotationPresent

public static boolean jlrMethodIsAnnotationPresent(java.lang.reflect.Method method,
                                                   java.lang.Class<? extends java.lang.annotation.Annotation> annotClass)

jlrMethodGetAnnotation

public static java.lang.annotation.Annotation jlrMethodGetAnnotation(java.lang.reflect.Method method,
                                                                     java.lang.Class<? extends java.lang.annotation.Annotation> annotClass)

jlrAnnotatedElementGetAnnotations

public static java.lang.annotation.Annotation[] jlrAnnotatedElementGetAnnotations(java.lang.reflect.AnnotatedElement elem)

jlrAnnotatedElementGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlrAnnotatedElementGetDeclaredAnnotations(java.lang.reflect.AnnotatedElement elem)

jlrAccessibleObjectGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlrAccessibleObjectGetDeclaredAnnotations(java.lang.reflect.AccessibleObject obj)

jlrFieldGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlrFieldGetDeclaredAnnotations(java.lang.reflect.Field field)

jlrFieldIsAnnotationPresent

public static boolean jlrFieldIsAnnotationPresent(java.lang.reflect.Field field,
                                                  java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrFieldGetAnnotations

public static java.lang.annotation.Annotation[] jlrFieldGetAnnotations(java.lang.reflect.Field field)

jlrAccessibleObjectGetAnnotations

public static java.lang.annotation.Annotation[] jlrAccessibleObjectGetAnnotations(java.lang.reflect.AccessibleObject obj)

jlrConstructorGetAnnotations

public static java.lang.annotation.Annotation[] jlrConstructorGetAnnotations(java.lang.reflect.Constructor<?> c)

jlrConstructorGetDeclaredAnnotations

public static java.lang.annotation.Annotation[] jlrConstructorGetDeclaredAnnotations(java.lang.reflect.Constructor<?> c)

jlrConstructorGetAnnotation

public static java.lang.annotation.Annotation jlrConstructorGetAnnotation(java.lang.reflect.Constructor<?> c,
                                                                          java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrConstructorGetParameterAnnotations

public static java.lang.annotation.Annotation[][] jlrConstructorGetParameterAnnotations(java.lang.reflect.Constructor<?> c)

jlrConstructorIsAnnotationPresent

public static boolean jlrConstructorIsAnnotationPresent(java.lang.reflect.Constructor<?> c,
                                                        java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrFieldGetAnnotation

public static java.lang.annotation.Annotation jlrFieldGetAnnotation(java.lang.reflect.Field field,
                                                                    java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrMethodGetAnnotations

public static java.lang.annotation.Annotation[] jlrMethodGetAnnotations(java.lang.reflect.Method method)

jlrAnnotatedElementIsAnnotationPresent

public static boolean jlrAnnotatedElementIsAnnotationPresent(java.lang.reflect.AnnotatedElement elem,
                                                             java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrAccessibleObjectIsAnnotationPresent

public static boolean jlrAccessibleObjectIsAnnotationPresent(java.lang.reflect.AccessibleObject obj,
                                                             java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrAnnotatedElementGetAnnotation

public static java.lang.annotation.Annotation jlrAnnotatedElementGetAnnotation(java.lang.reflect.AnnotatedElement elem,
                                                                               java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlrAccessibleObjectGetAnnotation

public static java.lang.annotation.Annotation jlrAccessibleObjectGetAnnotation(java.lang.reflect.AccessibleObject obj,
                                                                               java.lang.Class<? extends java.lang.annotation.Annotation> annotType)

jlClassGetField

public static java.lang.reflect.Field jlClassGetField(java.lang.Class<?> clazz,
                                                      java.lang.String name)
                                               throws java.lang.SecurityException,
                                                      java.lang.NoSuchFieldException
Throws:
java.lang.SecurityException
java.lang.NoSuchFieldException

jlClassGetDeclaredField

public static java.lang.reflect.Field jlClassGetDeclaredField(java.lang.Class<?> clazz,
                                                              java.lang.String name)
                                                       throws java.lang.SecurityException,
                                                              java.lang.NoSuchFieldException
Throws:
java.lang.SecurityException
java.lang.NoSuchFieldException

jlClassGetDeclaredFields

public static java.lang.reflect.Field[] jlClassGetDeclaredFields(java.lang.Class<?> clazz)

jlClassGetFields

public static java.lang.reflect.Field[] jlClassGetFields(java.lang.Class<?> clazz)
Although fields are not reloadable, we have to intercept this because otherwise we'll return the r$type field as a result here.


jlrFieldGet

public static java.lang.Object jlrFieldGet(java.lang.reflect.Field field,
                                           java.lang.Object target)
                                    throws java.lang.IllegalArgumentException,
                                           java.lang.IllegalAccessException
Throws:
java.lang.IllegalArgumentException
java.lang.IllegalAccessException

jlrFieldGetInt

public static int jlrFieldGetInt(java.lang.reflect.Field field,
                                 java.lang.Object target)
                          throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetByte

public static byte jlrFieldGetByte(java.lang.reflect.Field field,
                                   java.lang.Object target)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetChar

public static char jlrFieldGetChar(java.lang.reflect.Field field,
                                   java.lang.Object target)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetShort

public static short jlrFieldGetShort(java.lang.reflect.Field field,
                                     java.lang.Object target)
                              throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetDouble

public static double jlrFieldGetDouble(java.lang.reflect.Field field,
                                       java.lang.Object target)
                                throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetFloat

public static float jlrFieldGetFloat(java.lang.reflect.Field field,
                                     java.lang.Object target)
                              throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetBoolean

public static boolean jlrFieldGetBoolean(java.lang.reflect.Field field,
                                         java.lang.Object target)
                                  throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldGetLong

public static long jlrFieldGetLong(java.lang.reflect.Field field,
                                   java.lang.Object target)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSet

public static void jlrFieldSet(java.lang.reflect.Field field,
                               java.lang.Object target,
                               java.lang.Object value)
                        throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetInt

public static void jlrFieldSetInt(java.lang.reflect.Field field,
                                  java.lang.Object target,
                                  int value)
                           throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetByte

public static void jlrFieldSetByte(java.lang.reflect.Field field,
                                   java.lang.Object target,
                                   byte value)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetChar

public static void jlrFieldSetChar(java.lang.reflect.Field field,
                                   java.lang.Object target,
                                   char value)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetShort

public static void jlrFieldSetShort(java.lang.reflect.Field field,
                                    java.lang.Object target,
                                    short value)
                             throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetDouble

public static void jlrFieldSetDouble(java.lang.reflect.Field field,
                                     java.lang.Object target,
                                     double value)
                              throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetFloat

public static void jlrFieldSetFloat(java.lang.reflect.Field field,
                                    java.lang.Object target,
                                    float value)
                             throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetLong

public static void jlrFieldSetLong(java.lang.reflect.Field field,
                                   java.lang.Object target,
                                   long value)
                            throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException

jlrFieldSetBoolean

public static void jlrFieldSetBoolean(java.lang.reflect.Field field,
                                      java.lang.Object target,
                                      boolean value)
                               throws java.lang.IllegalAccessException
Throws:
java.lang.IllegalAccessException