@API(status=INTERNAL, since="1.0") public final class ReflectionUtils extends java.lang.Object
These utilities are intended solely for usage within the JUnit framework itself. Any usage by external parties is not supported. Use at your own risk!
Some utilities are published via the maintained ReflectionSupport
class.
ReflectionSupport| Modifier and Type | Class | Description |
|---|---|---|
static class |
ReflectionUtils.HierarchyTraversalMode |
Modes in which a hierarchy can be traversed — for example, when
searching for methods or fields within a class hierarchy.
|
| Modifier and Type | Method | Description |
|---|---|---|
static java.util.List<java.lang.Class<?>> |
findAllClassesInClasspathRoot(java.net.URI root,
java.util.function.Predicate<java.lang.Class<?>> classFilter,
java.util.function.Predicate<java.lang.String> classNameFilter) |
|
static java.util.List<java.lang.Class<?>> |
findAllClassesInClasspathRoot(java.net.URI root,
ClassFilter classFilter) |
|
static java.util.List<java.lang.Class<?>> |
findAllClassesInPackage(java.lang.String basePackageName,
java.util.function.Predicate<java.lang.Class<?>> classFilter,
java.util.function.Predicate<java.lang.String> classNameFilter) |
|
static java.util.List<java.lang.Class<?>> |
findAllClassesInPackage(java.lang.String basePackageName,
ClassFilter classFilter) |
|
static java.util.List<java.lang.reflect.Constructor<?>> |
findConstructors(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Constructor<?>> predicate) |
Find all constructors in the supplied class that match the supplied predicate.
|
static java.util.List<java.lang.reflect.Field> |
findFields(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Field> predicate,
ReflectionUtils.HierarchyTraversalMode traversalMode) |
Find all fields of the supplied class or interface
that match the specified
predicate. |
static java.util.Optional<java.lang.reflect.Method> |
findMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes) |
|
static java.util.Optional<java.lang.reflect.Method> |
findMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.String parameterTypeNames) |
|
static java.util.List<java.lang.reflect.Method> |
findMethods(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate) |
Find all methods of the supplied class or interface
that match the specified
predicate, using top-down search semantics
within the type hierarchy. |
static java.util.List<java.lang.reflect.Method> |
findMethods(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate,
ReflectionUtils.HierarchyTraversalMode traversalMode) |
|
static java.util.List<java.lang.Class<?>> |
findNestedClasses(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.Class<?>> predicate) |
|
static java.util.Set<java.lang.Class<?>> |
getAllAssignmentCompatibleClasses(java.lang.Class<?> clazz) |
Return all classes and interfaces that can be used as assignment types
for instances of the specified
Class, including itself. |
static java.util.Set<java.nio.file.Path> |
getAllClasspathRootDirectories() |
|
static <T> java.lang.reflect.Constructor<T> |
getDeclaredConstructor(java.lang.Class<T> clazz) |
Get the sole declared
Constructor for the supplied class. |
static java.lang.String |
getFullyQualifiedMethodName(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes) |
Build the fully qualified method name for the method described by the
supplied class, method name, and parameter types.
|
static java.util.Optional<java.lang.Object> |
getOutermostInstance(java.lang.Object inner,
java.lang.Class<?> requiredType) |
Get the outermost instance of the required type, searching recursively
through enclosing instances.
|
static java.lang.Class<?> |
getWrapperType(java.lang.Class<?> type) |
Get the wrapper type for the supplied primitive type.
|
static java.lang.Object |
invokeMethod(java.lang.reflect.Method method,
java.lang.Object target,
java.lang.Object... args) |
|
static boolean |
isAbstract(java.lang.Class<?> clazz) |
|
static boolean |
isAbstract(java.lang.reflect.Member member) |
|
static boolean |
isArray(java.lang.Object obj) |
Determine if the supplied object is an array.
|
static boolean |
isAssignableTo(java.lang.Object obj,
java.lang.Class<?> type) |
Determine if the supplied object can be assigned to the supplied type
for the purpose of reflective method invocations.
|
static boolean |
isInnerClass(java.lang.Class<?> clazz) |
|
static boolean |
isMethodPresent(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate) |
Determine if a
Method matching the supplied Predicate
is present within the type hierarchy of the specified class, beginning
with the specified class or interface and traversing up the type
hierarchy until such a method is found or the type hierarchy is exhausted. |
static boolean |
isNotPrivate(java.lang.reflect.Member member) |
|
static boolean |
isNotStatic(java.lang.reflect.Member member) |
|
static boolean |
isPrivate(java.lang.Class<?> clazz) |
|
static boolean |
isPrivate(java.lang.reflect.Member member) |
|
static boolean |
isPublic(java.lang.Class<?> clazz) |
|
static boolean |
isPublic(java.lang.reflect.Member member) |
|
static boolean |
isStatic(java.lang.Class<?> clazz) |
|
static boolean |
isStatic(java.lang.reflect.Member member) |
|
static java.util.Optional<java.lang.Class<?>> |
loadClass(java.lang.String name) |
|
static java.util.Optional<java.lang.Class<?>> |
loadClass(java.lang.String name,
java.lang.ClassLoader classLoader) |
Load a class by its primitive name or fully qualified name,
using the supplied
ClassLoader. |
static <T extends java.lang.reflect.AccessibleObject> |
makeAccessible(T object) |
|
static <T> T |
newInstance(java.lang.Class<T> clazz,
java.lang.Object... args) |
|
static <T> T |
newInstance(java.lang.reflect.Constructor<T> constructor,
java.lang.Object... args) |
Create a new instance of type
T by invoking the supplied constructor
with the supplied arguments. |
static <T> java.util.Optional<java.lang.Object> |
readFieldValue(java.lang.Class<T> clazz,
java.lang.String fieldName,
T instance) |
Read the value of a potentially inaccessible or nonexistent field.
|
static java.util.Optional<java.lang.Object> |
readFieldValue(java.lang.reflect.Field field) |
Read the value of a potentially inaccessible static field.
|
static <T> java.util.Optional<java.lang.Object> |
readFieldValue(java.lang.reflect.Field field,
T instance) |
Read the value of a potentially inaccessible field.
|
static boolean |
returnsVoid(java.lang.reflect.Method method) |
public static boolean isPublic(java.lang.Class<?> clazz)
public static boolean isPublic(java.lang.reflect.Member member)
public static boolean isPrivate(java.lang.Class<?> clazz)
public static boolean isPrivate(java.lang.reflect.Member member)
public static boolean isNotPrivate(java.lang.reflect.Member member)
public static boolean isAbstract(java.lang.Class<?> clazz)
public static boolean isAbstract(java.lang.reflect.Member member)
public static boolean isStatic(java.lang.Class<?> clazz)
public static boolean isStatic(java.lang.reflect.Member member)
public static boolean isNotStatic(java.lang.reflect.Member member)
public static boolean isInnerClass(java.lang.Class<?> clazz)
public static boolean returnsVoid(java.lang.reflect.Method method)
public static boolean isArray(java.lang.Object obj)
obj - the object to test; potentially nulltrue if the object is an arraypublic static boolean isAssignableTo(java.lang.Object obj,
java.lang.Class<?> type)
In contrast to Class.isInstance(Object), this method returns
true if the supplied type represents a primitive type whose
wrapper matches the supplied object's type.
Returns true if the supplied object is null and the
supplied type does not represent a primitive type.
obj - the object to test for assignment compatibility; potentially nulltype - the type to check against; never nulltrue if the object is assignment compatibleClass.isInstance(Object),
Class.isAssignableFrom(Class)public static java.lang.Class<?> getWrapperType(java.lang.Class<?> type)
type - the primitive type for which to retrieve the wrapper typenull if the
supplied type is null or not a primitive typepublic static <T> T newInstance(java.lang.Class<T> clazz,
java.lang.Object... args)
public static <T> T newInstance(java.lang.reflect.Constructor<T> constructor,
java.lang.Object... args)
T by invoking the supplied constructor
with the supplied arguments.
The constructor will be made accessible if necessary, and any checked exception will be masked as an unchecked exception.
constructor - the constructor to invoke; never nullargs - the arguments to pass to the constructornullnewInstance(Class, Object...),
ExceptionUtils.throwAsUncheckedException(Throwable)public static <T> java.util.Optional<java.lang.Object> readFieldValue(java.lang.Class<T> clazz,
java.lang.String fieldName,
T instance)
If the field does not exist, an exception occurs while reading it, or
the value of the field is null, an empty Optional is
returned.
clazz - the class where the field is declared; never nullfieldName - the name of the field; never null or emptyinstance - the instance from where the value is to be read; may
be null for a static fieldreadFieldValue(Field),
readFieldValue(Field, Object)public static java.util.Optional<java.lang.Object> readFieldValue(java.lang.reflect.Field field)
If an exception occurs while reading the field or if the value of the
field is null, an empty Optional is returned.
field - the field to read; never nullreadFieldValue(Field, Object),
readFieldValue(Class, String, Object)public static <T> java.util.Optional<java.lang.Object> readFieldValue(java.lang.reflect.Field field,
T instance)
If an exception occurs while reading the field or if the value of the
field is null, an empty Optional is returned.
field - the field to read; never nullinstance - the instance from which the value is to be read; may
be null for a static fieldreadFieldValue(Field),
readFieldValue(Class, String, Object)public static java.lang.Object invokeMethod(java.lang.reflect.Method method,
java.lang.Object target,
java.lang.Object... args)
public static java.util.Optional<java.lang.Class<?>> loadClass(java.lang.String name)
ReflectionSupport.loadClass(String)public static java.util.Optional<java.lang.Class<?>> loadClass(java.lang.String name,
java.lang.ClassLoader classLoader)
ClassLoader.
See ReflectionSupport.loadClass(String)
for details on support for class names for arrays.
name - the name of the class to load; never null or blankclassLoader - the ClassLoader to use; never nullloadClass(String)public static java.lang.String getFullyQualifiedMethodName(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes)
See #loadMethod(String) for details on the format.
clazz - the class that declares the method; never nullmethodName - the name of the method; never null or blankparameterTypes - the parameter types of the method; may be null or emptynull#loadMethod(String)public static java.util.Optional<java.lang.Object> getOutermostInstance(java.lang.Object inner,
java.lang.Class<?> requiredType)
If the supplied inner object is of the required type, it will simply be returned.
inner - the inner object from which to begin the search; never nullrequiredType - the required type of the outermost instance; never nullOptional containing the outermost instance; never null
but potentially emptypublic static java.util.Set<java.nio.file.Path> getAllClasspathRootDirectories()
public static java.util.List<java.lang.Class<?>> findAllClassesInClasspathRoot(java.net.URI root,
java.util.function.Predicate<java.lang.Class<?>> classFilter,
java.util.function.Predicate<java.lang.String> classNameFilter)
@API(status=INTERNAL, since="1.1") public static java.util.List<java.lang.Class<?>> findAllClassesInClasspathRoot(java.net.URI root, ClassFilter classFilter)
public static java.util.List<java.lang.Class<?>> findAllClassesInPackage(java.lang.String basePackageName,
java.util.function.Predicate<java.lang.Class<?>> classFilter,
java.util.function.Predicate<java.lang.String> classNameFilter)
@API(status=INTERNAL, since="1.1") public static java.util.List<java.lang.Class<?>> findAllClassesInPackage(java.lang.String basePackageName, ClassFilter classFilter)
public static java.util.List<java.lang.Class<?>> findNestedClasses(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.Class<?>> predicate)
public static <T> java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<T> clazz)
Constructor for the supplied class.
Throws a PreconditionViolationException if the supplied
class declares more than one constructor.
clazz - the class to get the constructor fornullClass.getDeclaredConstructors()public static java.util.List<java.lang.reflect.Constructor<?>> findConstructors(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Constructor<?>> predicate)
clazz - the class in which to search for constructors; never nullpredicate - the predicate to use to test for a match; never nullnull
but potentially emptypublic static java.util.List<java.lang.reflect.Field> findFields(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Field> predicate,
ReflectionUtils.HierarchyTraversalMode traversalMode)
predicate.
The results will not contain fields that are hidden.
clazz - the class or interface in which to find the fields; never nullpredicate - the field filter; never nulltraversalMode - the hierarchy traversal mode; never nullnull
but potentially emptypublic static boolean isMethodPresent(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate)
Method matching the supplied Predicate
is present within the type hierarchy of the specified class, beginning
with the specified class or interface and traversing up the type
hierarchy until such a method is found or the type hierarchy is exhausted.clazz - the class or interface in which to find the method; never
nullpredicate - the predicate to use to test for a match; never
nulltrue if such a method is presentfindMethod(Class, String, String),
findMethod(Class, String, Class...)public static java.util.Optional<java.lang.reflect.Method> findMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.String parameterTypeNames)
public static java.util.Optional<java.lang.reflect.Method> findMethod(java.lang.Class<?> clazz,
java.lang.String methodName,
java.lang.Class<?>... parameterTypes)
public static java.util.List<java.lang.reflect.Method> findMethods(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate)
predicate, using top-down search semantics
within the type hierarchy.
The results will not contain instance methods that are overridden
or static methods that are hidden.
clazz - the class or interface in which to find the methods; never nullpredicate - the method filter; never nullnullReflectionUtils.HierarchyTraversalMode.TOP_DOWN,
findMethods(Class, Predicate, HierarchyTraversalMode)public static java.util.List<java.lang.reflect.Method> findMethods(java.lang.Class<?> clazz,
java.util.function.Predicate<java.lang.reflect.Method> predicate,
ReflectionUtils.HierarchyTraversalMode traversalMode)
public static <T extends java.lang.reflect.AccessibleObject> T makeAccessible(T object)
public static java.util.Set<java.lang.Class<?>> getAllAssignmentCompatibleClasses(java.lang.Class<?> clazz)
Class, including itself.clazz - the Class to look upClass.isAssignableFrom(java.lang.Class<?>)