public class Reflections
extends java.lang.Object
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
Reflections.ReflectionAccessException  | 
static class  | 
Reflections.ReflectionNotFoundException  | 
| Constructor and Description | 
|---|
Reflections(java.lang.ClassLoader classLoader)  | 
| Modifier and Type | Method and Description | 
|---|---|
Reflections | 
applyClassRenames(java.util.Map<java.lang.String,java.lang.String> newClassRenames)
supply a map of known renames, of the form "old-class -> new-class" 
 | 
static <T> T | 
cast(java.lang.Object candidate,
    java.lang.Class<? extends T> type)
convenience for casting the given candidate to the given type (without any coercion, and allowing candidate to be null) 
 | 
static <T> void | 
copyFields(T source,
          T target)
copies all fields from the source to target; very little compile-time safety checking, so use with care 
 | 
static java.lang.reflect.Field | 
findField(java.lang.Class<?> clazz,
         java.lang.String name)  | 
static java.lang.String | 
findMappedNameAndLog(java.util.Map<java.lang.String,java.lang.String> renames,
                    java.lang.String name)  | 
static java.lang.reflect.Method | 
findMethod(java.lang.Class<?> clazz,
          java.lang.String name,
          java.lang.Class<?>... parameterTypes)  | 
static java.util.List<java.lang.reflect.Field> | 
findPublicFieldsOrderedBySuper(java.lang.Class<?> clazz)  | 
static java.util.List<java.lang.reflect.Method> | 
findPublicMethodsOrderedBySuper(java.lang.Class<?> clazz)  | 
static <T> java.lang.Class<? super T> | 
findSuperType(T impl,
             java.lang.String typeName)  | 
static java.util.List<java.lang.Class<?>> | 
getAllInterfaces(java.lang.Class<?> type)
Gets all the interfaces implemented by the given type, including its parent classes. 
 | 
java.lang.ClassLoader | 
getClassLoader()  | 
static java.util.Set<java.lang.Class<?>> | 
getInterfacesIncludingClassAncestors(java.lang.Class<?> clazz)
whereas Class.getInterfaces() only returns interfaces directly implemented by a class,
 this walks the inheritance hierarchy to include interfaces implemented by superclass/ancestors;
 (note it does not include superinterfaces) 
 | 
java.net.URL | 
getResource(java.lang.String r)
finds the resource in the classloader, if it exists; inserts or replaces leading slash as necessary
 (i believe it should _not_ have one, but there is some inconsistency)
 
 Will return null if no resource is found. 
 | 
static boolean | 
hasNoArgConstructor(java.lang.Class<?> clazz)  | 
static boolean | 
hasNoNonObjectFields(java.lang.Class<? extends java.lang.Object> clazz)  | 
static java.lang.Class<?> | 
inferSubbest(java.lang.Class<?> c1,
            java.lang.Class<?> c2)
Gets the class that is in the sub-class; or null if neither is a sub-class of the other. 
 | 
static java.lang.reflect.Field | 
inferSubbestField(java.lang.reflect.Field f1,
                 java.lang.reflect.Field f2)
Gets the field that is in the sub-class; or null if one field does not come from a sub-class of the other field's class 
 | 
static java.lang.reflect.Method | 
inferSubbestMethod(java.lang.reflect.Method m1,
                  java.lang.reflect.Method m2)
Gets the method that is in the sub-class; or null if one method does not come from a sub-class of the other method's class 
 | 
static <T> com.google.common.base.Optional<T> | 
invokeConstructorWithArgs(java.lang.Class<T> clazz,
                         java.lang.Object... argsArray)
Invokes a suitable constructor, supporting varargs and primitives 
 | 
static <T> com.google.common.base.Optional<T> | 
invokeConstructorWithArgs(java.lang.Class<T> clazz,
                         java.lang.Object[] argsArray,
                         boolean setAccessible)
Invokes a suitable constructor, supporting varargs and primitives 
 | 
static <T> com.google.common.base.Optional<T> | 
invokeConstructorWithArgs(java.lang.ClassLoader classLoader,
                         java.lang.Class<T> clazz,
                         java.lang.Object[] argsArray,
                         boolean setAccessible)
Invokes a suitable constructor, supporting varargs and primitives 
 | 
static <T> com.google.common.base.Optional<T> | 
invokeConstructorWithArgs(java.lang.ClassLoader classLoader,
                         java.lang.String className,
                         java.lang.Object... argsArray)
Invokes a suitable constructor, supporting varargs and primitives 
 | 
static <T> com.google.common.base.Optional<T> | 
invokeConstructorWithArgs(Reflections reflections,
                         java.lang.Class<T> clazz,
                         java.lang.Object[] argsArray,
                         boolean setAccessible)
Invokes a suitable constructor, supporting varargs and primitives, additionally supporting setAccessible 
 | 
java.lang.Object | 
invokeMethod(java.lang.reflect.Method method,
            java.lang.Object obj,
            java.lang.Object... argValues)  | 
static com.google.common.base.Optional<java.lang.Object> | 
invokeMethodWithArgs(java.lang.Object clazzOrInstance,
                    java.lang.String method,
                    java.util.List<java.lang.Object> args)
invokes the given method on the given clazz or instance, doing reasonably good matching on args etc 
 | 
static com.google.common.base.Optional<java.lang.Object> | 
invokeMethodWithArgs(java.lang.Object clazzOrInstance,
                    java.lang.String method,
                    java.util.List<java.lang.Object> args,
                    boolean setAccessible)  | 
java.lang.Object | 
invokeStaticMethod(java.lang.reflect.Method method,
                  java.lang.Object... argValues)  | 
java.lang.Class<?> | 
loadClass(java.lang.String classname)
instantiates the given class from its binary name 
 | 
<T> java.lang.Class<? extends T> | 
loadClass(java.lang.String classname,
         java.lang.Class<T> superType)  | 
java.lang.Class<?> | 
loadClassFromCanonicalName(java.lang.String canonicalName)
Loads class given its canonical name format (e.g. 
 | 
java.lang.reflect.Constructor<?> | 
loadConstructor(java.lang.Class<?> clazz,
               java.lang.Class<?>[] argTypes)  | 
java.lang.Class<?> | 
loadInnerClassNotInheritted(java.lang.Class<?> outerClazz,
                           java.lang.String innerClassname)
does not look through ancestors of outer class 
 | 
java.lang.Class<?> | 
loadInnerClassNotInheritted(java.lang.String outerClassname,
                           java.lang.String innerClassname)
does not look through ancestors of outer class 
 | 
static java.lang.Class<?> | 
loadInnerClassPossiblyInheritted(java.lang.Class<?> clazz,
                                java.lang.String nestedPart)
given a nested part, e.g. 
 | 
<T> T | 
loadInstance(java.lang.reflect.Constructor<T> constructor,
            java.lang.Object... argValues)  | 
java.lang.Object | 
loadInstance(java.lang.String classname)  | 
java.lang.Object | 
loadInstance(java.lang.String classname,
            java.lang.Class<?>[] argTypes,
            java.lang.Object[] argValues)  | 
java.lang.Object | 
loadInstance(java.lang.String classname,
            java.lang.Object... argValues)  | 
java.lang.reflect.Method | 
loadMethod(java.lang.Class<?> clazz,
          java.lang.String methodName)
returns the first method matching the given name 
 | 
java.lang.reflect.Method | 
loadMethod(java.lang.Class<?> clazz,
          java.lang.String methodName,
          java.lang.Class<?>[] argTypes)  | 
java.lang.reflect.Constructor<?> | 
loadSingleConstructor(java.lang.Class<?> clazz)
returns a single constructor in a given class, or throws an exception 
 | 
java.lang.Object | 
loadStaticField(java.lang.Class<?> clazz,
               java.lang.String fieldname)  | 
java.lang.Object[] | 
loadStaticFields(java.lang.Class<?> clazz,
                java.lang.String[] fieldnamesArray,
                java.lang.Object[] defaults)  | 
static com.google.common.base.Optional<java.lang.String> | 
tryFindMappedName(java.util.Map<java.lang.String,java.lang.String> renames,
                 java.lang.String name)
Takes a map of old-class-names to renames classes, and returns the mapped name if matched, or absent 
 | 
static boolean | 
typesMatch(java.lang.Object[] argsArray,
          java.lang.Class<?>[] parameterTypes)
true iff all args match the corresponding types 
 | 
static boolean | 
typesMatchUpTo(java.lang.Object[] argsArray,
              java.lang.Class<?>[] parameterTypes,
              int lengthRequired)
true iff the initial N args match the corresponding types 
 | 
java.lang.Object | 
updateFromNewClassLoader(java.lang.Object data)
Serialize the given object, then reload using the current class loader;
 this removes linkages to instances with classes loaded by an older class loader. 
 | 
public Reflections applyClassRenames(java.util.Map<java.lang.String,java.lang.String> newClassRenames)
public java.lang.Object loadInstance(java.lang.String classname,
                            java.lang.Object... argValues)
                              throws Reflections.ReflectionNotFoundException,
                                     Reflections.ReflectionAccessException
public java.lang.Object loadInstance(java.lang.String classname,
                            java.lang.Class<?>[] argTypes,
                            java.lang.Object[] argValues)
                              throws Reflections.ReflectionNotFoundException,
                                     Reflections.ReflectionAccessException
public java.lang.Object loadInstance(java.lang.String classname)
                              throws Reflections.ReflectionNotFoundException,
                                     Reflections.ReflectionAccessException
public java.lang.Class<?> loadClass(java.lang.String classname)
                             throws Reflections.ReflectionNotFoundException
public <T> java.lang.Class<? extends T> loadClass(java.lang.String classname,
                                         java.lang.Class<T> superType)
                                       throws Reflections.ReflectionNotFoundException
public static java.lang.Class<?> loadInnerClassPossiblyInheritted(java.lang.Class<?> clazz,
                                                  java.lang.String nestedPart)
                                                           throws Reflections.ReflectionNotFoundException
so it will find Clazz.Inner.VeryInner wherever in the hierarchy it is defined
(as opposed to ClassLoader which requires Inner.VeryInner to be _declared_ in clazz, not in any supertype
returns null if not found
public java.lang.Class<?> loadInnerClassNotInheritted(java.lang.String outerClassname,
                                             java.lang.String innerClassname)
                                               throws Reflections.ReflectionNotFoundException
public java.lang.Class<?> loadInnerClassNotInheritted(java.lang.Class<?> outerClazz,
                                             java.lang.String innerClassname)
                                               throws Reflections.ReflectionNotFoundException
uses the classloader set in this class, not in the clazz supplied
public java.lang.reflect.Constructor<?> loadConstructor(java.lang.Class<?> clazz,
                                               java.lang.Class<?>[] argTypes)
                                                 throws Reflections.ReflectionAccessException
public static <T> com.google.common.base.Optional<T> invokeConstructorWithArgs(java.lang.ClassLoader classLoader,
                                                               java.lang.String className,
                                                               java.lang.Object... argsArray)
public static <T> com.google.common.base.Optional<T> invokeConstructorWithArgs(java.lang.ClassLoader classLoader,
                                                               java.lang.Class<T> clazz,
                                                               java.lang.Object[] argsArray,
                                                               boolean setAccessible)
public static <T> com.google.common.base.Optional<T> invokeConstructorWithArgs(java.lang.Class<T> clazz,
                                                               java.lang.Object... argsArray)
public static <T> com.google.common.base.Optional<T> invokeConstructorWithArgs(java.lang.Class<T> clazz,
                                                               java.lang.Object[] argsArray,
                                                               boolean setAccessible)
public static <T> com.google.common.base.Optional<T> invokeConstructorWithArgs(Reflections reflections, java.lang.Class<T> clazz, java.lang.Object[] argsArray, boolean setAccessible)
public java.lang.reflect.Constructor<?> loadSingleConstructor(java.lang.Class<?> clazz)
public <T> T loadInstance(java.lang.reflect.Constructor<T> constructor,
                 java.lang.Object... argValues)
               throws java.lang.IllegalArgumentException,
                      Reflections.ReflectionAccessException
java.lang.IllegalArgumentExceptionReflections.ReflectionAccessExceptionpublic java.lang.reflect.Method loadMethod(java.lang.Class<?> clazz,
                                  java.lang.String methodName,
                                  java.lang.Class<?>[] argTypes)
                                    throws Reflections.ReflectionNotFoundException,
                                           Reflections.ReflectionAccessException
public java.lang.reflect.Method loadMethod(java.lang.Class<?> clazz,
                                  java.lang.String methodName)
                                    throws Reflections.ReflectionNotFoundException,
                                           Reflections.ReflectionAccessException
public java.lang.Object invokeMethod(java.lang.reflect.Method method,
                            java.lang.Object obj,
                            java.lang.Object... argValues)
                              throws Reflections.ReflectionAccessException
Reflections.ReflectionAccessException - If invocation failed due to illegal access or the invoked method failedjava.lang.IllegalArgumentException - If the arguments were invalidpublic java.lang.Object invokeStaticMethod(java.lang.reflect.Method method,
                                  java.lang.Object... argValues)
                                    throws java.lang.IllegalArgumentException,
                                           Reflections.ReflectionAccessException
java.lang.IllegalArgumentExceptionReflections.ReflectionAccessExceptionpublic java.lang.Object loadStaticField(java.lang.Class<?> clazz,
                               java.lang.String fieldname)
                                 throws Reflections.ReflectionAccessException
public java.lang.Object[] loadStaticFields(java.lang.Class<?> clazz,
                                  java.lang.String[] fieldnamesArray,
                                  java.lang.Object[] defaults)
                                    throws Reflections.ReflectionAccessException
public static <T> void copyFields(T source,
                  T target)
                       throws java.lang.IllegalArgumentException,
                              java.lang.IllegalAccessException
java.lang.IllegalAccessExceptionjava.lang.IllegalArgumentExceptionpublic java.lang.Class<?> loadClassFromCanonicalName(java.lang.String canonicalName)
                                              throws java.lang.ClassNotFoundException,
                                                     Reflections.ReflectionNotFoundException
Reflections.ReflectionNotFoundExceptionjava.lang.ClassNotFoundException@Nullable public java.net.URL getResource(java.lang.String r)
public final java.lang.Object updateFromNewClassLoader(java.lang.Object data)
                                                throws java.io.IOException,
                                                       java.lang.ClassNotFoundException
(like a poor man's clone)
aka "reconstitute(Object)"
java.io.IOExceptionjava.lang.ClassNotFoundExceptionpublic java.lang.ClassLoader getClassLoader()
public static <T> java.lang.Class<? super T> findSuperType(T impl,
                                           java.lang.String typeName)
public static java.util.Set<java.lang.Class<?>> getInterfacesIncludingClassAncestors(java.lang.Class<?> clazz)
public static java.lang.reflect.Method findMethod(java.lang.Class<?> clazz,
                                  java.lang.String name,
                                  java.lang.Class<?>... parameterTypes)
                                           throws java.lang.NoSuchMethodException
java.lang.NoSuchMethodExceptionpublic static java.lang.reflect.Field findField(java.lang.Class<?> clazz,
                                java.lang.String name)
                                         throws java.lang.NoSuchFieldException
java.lang.NoSuchFieldExceptionpublic static java.util.List<java.lang.reflect.Field> findPublicFieldsOrderedBySuper(java.lang.Class<?> clazz)
public static java.util.List<java.lang.reflect.Method> findPublicMethodsOrderedBySuper(java.lang.Class<?> clazz)
public static java.lang.reflect.Field inferSubbestField(java.lang.reflect.Field f1,
                                        java.lang.reflect.Field f2)
public static java.lang.reflect.Method inferSubbestMethod(java.lang.reflect.Method m1,
                                          java.lang.reflect.Method m2)
public static java.lang.Class<?> inferSubbest(java.lang.Class<?> c1,
                              java.lang.Class<?> c2)
public static <T> T cast(java.lang.Object candidate,
         java.lang.Class<? extends T> type)
public static com.google.common.base.Optional<java.lang.Object> invokeMethodWithArgs(java.lang.Object clazzOrInstance,
                                                                     java.lang.String method,
                                                                     java.util.List<java.lang.Object> args)
                                                                              throws java.lang.IllegalArgumentException,
                                                                                     java.lang.IllegalAccessException,
                                                                                     java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetExceptionjava.lang.IllegalAccessExceptionjava.lang.IllegalArgumentExceptionpublic static com.google.common.base.Optional<java.lang.Object> invokeMethodWithArgs(java.lang.Object clazzOrInstance,
                                                                     java.lang.String method,
                                                                     java.util.List<java.lang.Object> args,
                                                                     boolean setAccessible)
                                                                              throws java.lang.IllegalArgumentException,
                                                                                     java.lang.IllegalAccessException,
                                                                                     java.lang.reflect.InvocationTargetException
java.lang.IllegalArgumentExceptionjava.lang.IllegalAccessExceptionjava.lang.reflect.InvocationTargetExceptionpublic static boolean typesMatch(java.lang.Object[] argsArray,
                 java.lang.Class<?>[] parameterTypes)
public static boolean typesMatchUpTo(java.lang.Object[] argsArray,
                     java.lang.Class<?>[] parameterTypes,
                     int lengthRequired)
public static java.util.List<java.lang.Class<?>> getAllInterfaces(@Nullable
                                                  java.lang.Class<?> type)
type - the class to look uppublic static boolean hasNoArgConstructor(java.lang.Class<?> clazz)
public static boolean hasNoNonObjectFields(java.lang.Class<? extends java.lang.Object> clazz)
public static com.google.common.base.Optional<java.lang.String> tryFindMappedName(java.util.Map<java.lang.String,java.lang.String> renames,
                                                                  java.lang.String name)
public static java.lang.String findMappedNameAndLog(java.util.Map<java.lang.String,java.lang.String> renames,
                                    java.lang.String name)