Class ReflectionHelper
- java.lang.Object
-
- org.glassfish.jersey.internal.util.ReflectionHelper
-
public final class ReflectionHelper extends java.lang.Object
Utility methods for Java reflection.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ReflectionHelper.DeclaringClassInterfacePair
A tuple consisting of a concrete class and a declaring class that declares a generic interface type.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.Class<?>
bundleReferenceClass
private static TypeVisitor<java.lang.Class>
eraser
Implements the logic forerasure(Type)
.private static java.util.logging.Logger
LOGGER
private static java.security.PrivilegedAction<?>
NoOpPrivilegedACTION
-
Constructor Summary
Constructors Modifier Constructor Description private
ReflectionHelper()
Prevents instantiation.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static java.lang.reflect.Method[]
_getMethods(java.lang.Class<?> clazz)
private static boolean
checkTypeBounds(java.lang.Class type, java.lang.reflect.Type[] bounds)
static <T> java.security.PrivilegedAction<java.lang.Class<T>>
classForNamePA(java.lang.String name)
Get privileged action to obtain Class from given class name.static <T> java.security.PrivilegedAction<java.lang.Class<T>>
classForNamePA(java.lang.String name, java.lang.ClassLoader cl)
Get privileged action to obtain Class from given class name.static <T> java.security.PrivilegedExceptionAction<java.lang.Class<T>>
classForNameWithExceptionPEA(java.lang.String name)
Get privileged exception action to obtain Class from given class name.static <T> java.security.PrivilegedExceptionAction<java.lang.Class<T>>
classForNameWithExceptionPEA(java.lang.String name, java.lang.ClassLoader cl)
Get privileged exception action to obtain Class from given class name.private static boolean
compareParameterTypes(java.lang.reflect.Type[] ts, java.lang.reflect.Type[] _ts)
Compare generic parameter types of two methods.private static boolean
compareParameterTypes(java.lang.reflect.Type ts, java.lang.reflect.Type _ts)
Compare respective generic parameter types of two methods.static <T> java.lang.Class<T>
erasure(java.lang.reflect.Type type)
Get theClass
representation of the given type.static java.security.PrivilegedAction<java.lang.reflect.Method>
findMethodOnClassPA(java.lang.Class<?> c, java.lang.reflect.Method m)
Get privileged action to find a method on a class given an existing method.static java.lang.reflect.Method
findOverridingMethodOnClass(java.lang.Class<?> clazz, java.lang.reflect.Method method)
Find amethod
that overrides the givenmethod
on the givenclass
.private static java.lang.reflect.Type
fix(java.lang.reflect.Type t)
JDK 5.0 has a bug of creatingGenericArrayType
where it shouldn't.static javax.ws.rs.core.GenericType
genericTypeFor(java.lang.Object instance)
Create ageneric type
information for a given Javainstance
.static java.security.PrivilegedAction<java.lang.reflect.Field[]>
getAllFieldsPA(java.lang.Class<?> clazz)
Get privileged action to obtain fields on given class, recursively through inheritance hierarchy.static java.util.Collection<java.lang.Class<? extends java.lang.annotation.Annotation>>
getAnnotationTypes(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Class<? extends java.lang.annotation.Annotation> metaAnnotation)
Returns collection of all annotation types attached to a given annotated element that have the provided meta annotation attached.static java.lang.reflect.Type
getArrayComponentType(java.lang.reflect.Type type)
Gets the component type of the array.static java.lang.Class<?>
getArrayForComponentType(java.lang.Class<?> c)
Get Array class of component type.static ReflectionHelper.DeclaringClassInterfacePair
getClass(java.lang.Class<?> concrete, java.lang.Class<?> iface)
Find the declaring class that implements or extends an interface.private static ReflectionHelper.DeclaringClassInterfacePair
getClass(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c)
static java.security.PrivilegedAction<java.lang.ClassLoader>
getClassLoaderPA(java.lang.Class<?> clazz)
Get privileged action to obtain class loader for given class.private static java.lang.ClassLoader
getContextClassLoader()
Get the context class loader.static java.security.PrivilegedAction<java.lang.ClassLoader>
getContextClassLoaderPA()
Get privileged action to obtain context class loader.static java.security.PrivilegedAction<java.lang.reflect.Constructor<?>>
getDeclaredConstructorPA(java.lang.Class<?> clazz, java.lang.Class<?>... params)
Get privileged action to obtain declared constructor of given class with given parameters.static java.security.PrivilegedAction<java.lang.reflect.Constructor<?>[]>
getDeclaredConstructorsPA(java.lang.Class<?> clazz)
Get privileged action to obtain declared constructors of given class.static java.security.PrivilegedAction<java.lang.reflect.Field[]>
getDeclaredFieldsPA(java.lang.Class<?> clazz)
Get privileged action to obtain fields declared on given class.static java.security.PrivilegedAction<java.util.Collection<? extends java.lang.reflect.Method>>
getDeclaredMethodsPA(java.lang.Class<?> clazz)
Get privileged action to obtain methods declared on given class.static java.lang.Class<?>
getDeclaringClass(java.lang.reflect.AccessibleObject ao)
Get the declaring class of an accessible object.static java.security.PrivilegedAction<java.lang.reflect.Method>
getFromStringStringMethodPA(java.lang.Class<?> clazz)
Get privileged action to get the static fromString(String ) method.static java.util.List<java.lang.Class<?>>
getGenericTypeArgumentClasses(java.lang.reflect.Type type)
Get the list of classes that represent the type arguments of aparameterized
input type.static java.security.PrivilegedAction<java.lang.reflect.Method[]>
getMethodsPA(java.lang.Class<?> c)
Get privileged action to return an array containingMethod
objects reflecting all the public member methods of the supplied class or interface object, including those declared by the class or interface and those inherited from superclasses and superinterfaces.static OsgiRegistry
getOsgiRegistryInstance()
Returns anOsgiRegistry
instance.static java.lang.Class[]
getParameterizedClassArguments(ReflectionHelper.DeclaringClassInterfacePair p)
Get the parameterized class arguments for a declaring class that declares a generic interface type.static java.lang.reflect.Type[]
getParameterizedTypeArguments(ReflectionHelper.DeclaringClassInterfacePair p)
Get the parameterized type arguments for a declaring class that declares a generic interface type.static java.lang.String
getPropertyName(java.lang.reflect.Method method)
Determine property (field) name from given getter/setter method.static java.lang.Class<?>
getRawClass(java.lang.reflect.Type type)
Given the type parameter gets the raw type represented by the type, or null if this has no associated raw class.static java.io.InputStream
getResourceAsStream(java.lang.ClassLoader loader, java.lang.Class<?> originClass, java.lang.String name)
Lookup resource by given name.static java.security.PrivilegedAction<java.lang.reflect.Constructor>
getStringConstructorPA(java.lang.Class<?> clazz)
Get privileged action to obtain constructor that has a single parameter of String.private static java.security.PrivilegedAction<java.lang.reflect.Method>
getStringToObjectMethodPA(java.lang.Class<?> clazz, java.lang.String methodName)
Get privileged action to get the static method of given name.private static ReflectionHelper.DeclaringClassInterfacePair
getType(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c, java.lang.reflect.Type t)
private static ReflectionHelper.DeclaringClassInterfacePair
getType(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c, java.lang.reflect.Type[] ts)
static java.lang.reflect.Type
getTypeArgument(java.lang.reflect.Type type, int index)
Get a type argument at particular index for a parameterized type.static java.util.List<ClassTypePair>
getTypeArgumentAndClass(java.lang.reflect.Type type)
Get the list of class-type pairs that represent the type arguments of aparameterized
input type.static java.lang.reflect.Type[]
getTypeArguments(java.lang.reflect.Type type)
Get the type arguments for a parameterized type.private static java.lang.String
getTypeName(java.lang.Class<?> type)
Get the Java type or array name.static java.security.PrivilegedAction<java.lang.reflect.Method>
getValueOfStringMethodPA(java.lang.Class<?> clazz)
Get privileged action to obtain the static valueOf(String ) method.static boolean
isArray(java.lang.reflect.Type type)
Checks if the type is an array type.static boolean
isArrayOfType(java.lang.reflect.Type type, java.lang.Class<?> componentType)
Checks if the type is an array of a given component type.static boolean
isGetter(java.lang.reflect.Method method)
Determine whether a given method isgetter
.static boolean
isPrimitive(java.lang.reflect.Type type)
Check if the given type is a primitive type.static boolean
isSetter(java.lang.reflect.Method method)
Determine whether a given method issetter
.static boolean
isSubClassOf(java.lang.reflect.Type subType, java.lang.reflect.Type superType)
Check ifsubType
is a sub-type ofsuperType
.static java.lang.String
methodInstanceToString(java.lang.Object o, java.lang.reflect.Method m)
Create a string representation of a method and an instance whose class implements the method.static java.lang.String
objectToString(java.lang.Object o)
Create a string representation of an object.static ClassTypePair
resolveGenericType(java.lang.Class concreteClass, java.lang.Class declaringClass, java.lang.Class rawResolvedType, java.lang.reflect.Type genericResolvedType)
Resolve generic type parameter(s) of a raw class and it's generic type based on the class that declares the generic type parameter(s) to be resolved and a concrete implementation of the declaring class.static ClassTypePair
resolveTypeVariable(java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv)
Given a type variable resolve the Java class of that variable.private static ClassTypePair
resolveTypeVariable(java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> map)
private static ClassTypePair
resolveTypeVariable(java.lang.reflect.ParameterizedType pt, java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> map)
static java.security.PrivilegedAction
setAccessibleMethodPA(java.lang.reflect.Method m)
Get privileged action to set a method to be accessible.static java.security.PrivilegedAction
setContextClassLoaderPA(java.lang.ClassLoader classLoader)
Get privileged action to set the actual context class loader.static java.lang.Class<?>
theMostSpecificTypeOf(java.util.Set<java.lang.reflect.Type> contractTypes)
Determine the most specific type from given set.
-
-
-
Field Detail
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
NoOpPrivilegedACTION
private static final java.security.PrivilegedAction<?> NoOpPrivilegedACTION
-
eraser
private static final TypeVisitor<java.lang.Class> eraser
Implements the logic forerasure(Type)
.
-
bundleReferenceClass
private static final java.lang.Class<?> bundleReferenceClass
-
-
Method Detail
-
getDeclaringClass
public static java.lang.Class<?> getDeclaringClass(java.lang.reflect.AccessibleObject ao)
Get the declaring class of an accessible object.Supported are
Method
,Field
andConstructor
accessible object types.- Parameters:
ao
- an accessible object.- Returns:
- the declaring class of an accessible object.
- Throws:
java.lang.IllegalArgumentException
- in case the type of the accessible object is not supported.
-
objectToString
public static java.lang.String objectToString(java.lang.Object o)
Create a string representation of an object.Returns a string consisting of the name of the class of which the object is an instance, the at-sign character
'@'
, and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:o.getClass().getName() + '@' + Integer.toHexString(o.hashCode())
- Parameters:
o
- the object.- Returns:
- the string representation of the object.
-
methodInstanceToString
public static java.lang.String methodInstanceToString(java.lang.Object o, java.lang.reflect.Method m)
Create a string representation of a method and an instance whose class implements the method.Returns a string consisting of the name of the class of which the object is an instance, the at-sign character
'@'
, the unsigned hexadecimal representation of the hash code of the object, the character'.'
, the name of the method, the character'('
, the list of method parameters, and the character')'
. In other words, those method returns a string equal to the value of:o.getClass().getName() + '@' + Integer.toHexString(o.hashCode()) + '.' + m.getName() + '(' + <parameters> + ')'.
- Parameters:
o
- the object whose class implementsm
.m
- the method.- Returns:
- the string representation of the method and instance.
-
getTypeName
private static java.lang.String getTypeName(java.lang.Class<?> type)
Get the Java type or array name.If the class is representing an array, the
"[]"
suffix will be added to the name of the type for each dimension of an array.- Parameters:
type
- Java type (can represent an array).- Returns:
- Java type or array name.
-
classForNamePA
public static <T> java.security.PrivilegedAction<java.lang.Class<T>> classForNamePA(java.lang.String name)
Get privileged action to obtain Class from given class name.If run using security manager, the returned privileged action must be invoked within a doPrivileged block. The context class loader will be utilized if accessible and non-null. Otherwise the defining class loader of this class will be utilized.
- Type Parameters:
T
- class type.- Parameters:
name
- class name.- Returns:
- privileged action to obtain desired Class.
The action could return
null
if the class cannot be found. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
classForNamePA
public static <T> java.security.PrivilegedAction<java.lang.Class<T>> classForNamePA(java.lang.String name, java.lang.ClassLoader cl)
Get privileged action to obtain Class from given class name. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Type Parameters:
T
- class type.- Parameters:
name
- class name.cl
- class loader to use, ifnull
then the defining class loader of this class will be utilized.- Returns:
- privileged action to obtain desired Class. The action could return
null
if the class cannot be found. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getClassLoaderPA
public static java.security.PrivilegedAction<java.lang.ClassLoader> getClassLoaderPA(java.lang.Class<?> clazz)
Get privileged action to obtain class loader for given class. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get class loader.- Returns:
- privileged action to obtain class loader for the
clazz
class. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getDeclaredFieldsPA
public static java.security.PrivilegedAction<java.lang.reflect.Field[]> getDeclaredFieldsPA(java.lang.Class<?> clazz)
Get privileged action to obtain fields declared on given class. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get the declared fields.- Returns:
- privileged action to obtain fields declared on the
clazz
class. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getAllFieldsPA
public static java.security.PrivilegedAction<java.lang.reflect.Field[]> getAllFieldsPA(java.lang.Class<?> clazz)
Get privileged action to obtain fields on given class, recursively through inheritance hierarchy. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get fields.- Returns:
- privileged action to obtain fields declared on the
clazz
class. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getDeclaredMethodsPA
public static java.security.PrivilegedAction<java.util.Collection<? extends java.lang.reflect.Method>> getDeclaredMethodsPA(java.lang.Class<?> clazz)
Get privileged action to obtain methods declared on given class. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get the declared methods.- Returns:
- privileged action to obtain methods declared on the
clazz
class. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
classForNameWithExceptionPEA
public static <T> java.security.PrivilegedExceptionAction<java.lang.Class<T>> classForNameWithExceptionPEA(java.lang.String name) throws java.lang.ClassNotFoundException
Get privileged exception action to obtain Class from given class name. If run using security manager, the returned privileged exception action must be invoked within a doPrivileged block. The actual context class loader will be utilized if accessible and non-null. Otherwise the defining class loader of the calling class will be utilized.- Type Parameters:
T
- class type.- Parameters:
name
- class name.- Returns:
- privileged exception action to obtain the Class.
The action could throw
ClassNotFoundException
or returnnull
if the class cannot be found. - Throws:
java.lang.ClassNotFoundException
- in case the class cannot be loaded with the context class loader.- See Also:
AccessController.doPrivileged(java.security.PrivilegedExceptionAction)
-
classForNameWithExceptionPEA
public static <T> java.security.PrivilegedExceptionAction<java.lang.Class<T>> classForNameWithExceptionPEA(java.lang.String name, java.lang.ClassLoader cl) throws java.lang.ClassNotFoundException
Get privileged exception action to obtain Class from given class name. If run using security manager, the returned privileged exception action must be invoked within a doPrivileged block.- Type Parameters:
T
- class type.- Parameters:
name
- class name.cl
- class loader to use, ifnull
then the defining class loader of the calling class will be utilized.- Returns:
- privileged exception action to obtain the Class. If the class cannot be found, the action returns
null
, or throwsClassNotFoundException
in case the class loader has been specified. - Throws:
java.lang.ClassNotFoundException
- in case the class cannot be loaded with the specified class loader.- See Also:
AccessController.doPrivileged(java.security.PrivilegedExceptionAction)
-
getContextClassLoaderPA
public static java.security.PrivilegedAction<java.lang.ClassLoader> getContextClassLoaderPA()
Get privileged action to obtain context class loader. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Returns:
- privileged action to obtain the actual context class loader. The action could return
null
if the context class loader has not been set. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getContextClassLoader
private static java.lang.ClassLoader getContextClassLoader()
Get the context class loader.- Returns:
- the context class loader, otherwise
null
if not set.
-
setContextClassLoaderPA
public static java.security.PrivilegedAction setContextClassLoaderPA(java.lang.ClassLoader classLoader)
Get privileged action to set the actual context class loader. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
classLoader
- context class loader to be set.- Returns:
- privileged action to set context class loader.
- See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
setAccessibleMethodPA
public static java.security.PrivilegedAction setAccessibleMethodPA(java.lang.reflect.Method m)
Get privileged action to set a method to be accessible. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
m
- method to be set as accessible.- Returns:
- privileged action to set the method to be accessible.
- See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getGenericTypeArgumentClasses
public static java.util.List<java.lang.Class<?>> getGenericTypeArgumentClasses(java.lang.reflect.Type type) throws java.lang.IllegalArgumentException
Get the list of classes that represent the type arguments of aparameterized
input type. For any given argument in the returned list, following rules apply:- If a type argument is a class then the class is returned.
- If the type argument is a generic array type and the generic component type is a class then class of the array is returned.
- If the type argument is a parameterized type and it's raw type is a class then that class is returned.
type
is not an instance of ParameterizedType an empty list is returned.- Parameters:
type
- parameterized type.- Returns:
- the list of classed representing the actual type arguments. May be empty,
but may never be
null
. - Throws:
java.lang.IllegalArgumentException
- if any of the generic type arguments is not a class, or a generic array type, or the generic component type of the generic array type is not class, or not a parameterized type with a raw type that is not a class.
-
getTypeArgumentAndClass
public static java.util.List<ClassTypePair> getTypeArgumentAndClass(java.lang.reflect.Type type) throws java.lang.IllegalArgumentException
Get the list of class-type pairs that represent the type arguments of aparameterized
input type. For any givenclass
part of each pair in the returned list, following rules apply:- If a type argument is a class then the class is returned as raw class.
- If the type argument is a generic array type and the generic component type is a class then class of the array is returned as raw class.
- If the type argument is a parameterized type and it's raw type is a class then that class is returned as raw class.
type
is not an instance of ParameterizedType an empty list is returned.- Parameters:
type
- parameterized type.- Returns:
- the list of class-type pairs representing the actual type arguments. May be empty, but may never be
null
. - Throws:
java.lang.IllegalArgumentException
- if any of the generic type arguments is not a class, or a generic array type, or the generic component type of the generic array type is not class, or not a parameterized type with a raw type that is not a class.
-
isPrimitive
public static boolean isPrimitive(java.lang.reflect.Type type)
Check if the given type is a primitive type.- Parameters:
type
- type to be checked.- Returns:
true
in case the type represents a primitive type, otherwise returnsfalse
.
-
getTypeArguments
public static java.lang.reflect.Type[] getTypeArguments(java.lang.reflect.Type type)
Get the type arguments for a parameterized type. In case the type is not aparameterized type
, the method returnsnull
.- Parameters:
type
- parameterized type.- Returns:
- type arguments for a parameterized type, or
null
in case the input type is not a parameterized type.
-
getTypeArgument
public static java.lang.reflect.Type getTypeArgument(java.lang.reflect.Type type, int index)
Get a type argument at particular index for a parameterized type. In case the type is not aparameterized type
, the method returnsnull
.- Parameters:
type
- parameterized type.index
- type parameter index.- Returns:
- type argument for a parameterized type at a given index, or
null
in case the input type is not a parameterized type.
-
fix
private static java.lang.reflect.Type fix(java.lang.reflect.Type t)
JDK 5.0 has a bug of creatingGenericArrayType
where it shouldn't. fix that manually to work around the problem. See bug 6202725.
-
erasure
public static <T> java.lang.Class<T> erasure(java.lang.reflect.Type type)
Get theClass
representation of the given type. This corresponds to the notion of the erasure in JSR-14.- Parameters:
type
- type to provide the erasure for.- Returns:
- the given type's erasure.
-
isSubClassOf
public static boolean isSubClassOf(java.lang.reflect.Type subType, java.lang.reflect.Type superType)
Check ifsubType
is a sub-type ofsuperType
.- Parameters:
subType
- sub-type type.superType
- super-type type.- Returns:
true
in case thesubType
is a sub-type ofsuperType
,false
otherwise.
-
isArray
public static boolean isArray(java.lang.reflect.Type type)
Checks if the type is an array type.- Parameters:
type
- type to check.- Returns:
true
in case the type is an array type,false
otherwise.
-
isArrayOfType
public static boolean isArrayOfType(java.lang.reflect.Type type, java.lang.Class<?> componentType)
Checks if the type is an array of a given component type.- Parameters:
type
- type to check.componentType
- array component type.- Returns:
true
in case the type is an array type of a given component type,false
otherwise.
-
getArrayComponentType
public static java.lang.reflect.Type getArrayComponentType(java.lang.reflect.Type type)
Gets the component type of the array.- Parameters:
type
- must be an array.- Returns:
- array component type.
- Throws:
java.lang.IllegalArgumentException
- in case the type is not an array type.
-
getArrayForComponentType
public static java.lang.Class<?> getArrayForComponentType(java.lang.Class<?> c)
Get Array class of component type.- Parameters:
c
- the component class of the array- Returns:
- the array class.
-
getValueOfStringMethodPA
public static java.security.PrivilegedAction<java.lang.reflect.Method> getValueOfStringMethodPA(java.lang.Class<?> clazz)
Get privileged action to obtain the static valueOf(String ) method. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class to obtain the method.- Returns:
- privileged action to get the method.
The action could return
null
if the method is not present. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getFromStringStringMethodPA
public static java.security.PrivilegedAction<java.lang.reflect.Method> getFromStringStringMethodPA(java.lang.Class<?> clazz)
Get privileged action to get the static fromString(String ) method. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get the method.- Returns:
- privileged action to obtain the method.
The action could return
null
if the method is not present. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getStringToObjectMethodPA
private static java.security.PrivilegedAction<java.lang.reflect.Method> getStringToObjectMethodPA(java.lang.Class<?> clazz, java.lang.String methodName)
Get privileged action to get the static method of given name. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- class for which to get the method.methodName
- name of the method to be obtained.- Returns:
- privileged action to obtain the method.
The action could return
null
if the method is not present. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getStringConstructorPA
public static java.security.PrivilegedAction<java.lang.reflect.Constructor> getStringConstructorPA(java.lang.Class<?> clazz)
Get privileged action to obtain constructor that has a single parameter of String. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- The class for which to obtain the constructor.- Returns:
- privileged action to obtain the constructor.
The action could return
null
if the constructor is not present. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getDeclaredConstructorsPA
public static java.security.PrivilegedAction<java.lang.reflect.Constructor<?>[]> getDeclaredConstructorsPA(java.lang.Class<?> clazz)
Get privileged action to obtain declared constructors of given class. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- The class for which to obtain the constructors.- Returns:
- privileged action to obtain the array of constructors.
- See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getDeclaredConstructorPA
public static java.security.PrivilegedAction<java.lang.reflect.Constructor<?>> getDeclaredConstructorPA(java.lang.Class<?> clazz, java.lang.Class<?>... params)
Get privileged action to obtain declared constructor of given class with given parameters. If run using security manager, the returned privileged action must be invoked within a doPrivileged block.- Parameters:
clazz
- The class for which to obtain the constructor.params
- constructor parameters.- Returns:
- privileged action to obtain the constructor or
null
, when constructor with given parameters is not found. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getAnnotationTypes
public static java.util.Collection<java.lang.Class<? extends java.lang.annotation.Annotation>> getAnnotationTypes(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Class<? extends java.lang.annotation.Annotation> metaAnnotation)
Returns collection of all annotation types attached to a given annotated element that have the provided meta annotation attached.- Parameters:
annotatedElement
- annotated element.metaAnnotation
- meta annotation attached to the annotation types we are looking for (if null, annotation types of all attached annotations will be returned).- Returns:
- list of annotation types with a given meta annotation
-
isGetter
public static boolean isGetter(java.lang.reflect.Method method)
Determine whether a given method isgetter
.- Parameters:
method
- method to be examined.- Returns:
true
if the method isgetter
,false
otherwise.
-
genericTypeFor
public static javax.ws.rs.core.GenericType genericTypeFor(java.lang.Object instance)
Create ageneric type
information for a given Javainstance
.If the supplied instance is an instance of
GenericEntity
, the generic type information will be computed using theGenericEntity.getType()
information. Otherwise theinstance.getClass()
will be used.- Parameters:
instance
- Java instance for which theGenericType
description should be created.- Returns:
GenericType
describing the Javainstance
.
-
isSetter
public static boolean isSetter(java.lang.reflect.Method method)
Determine whether a given method issetter
.- Parameters:
method
- method to be examined.- Returns:
true
if the method issetter
,false
otherwise.
-
getPropertyName
public static java.lang.String getPropertyName(java.lang.reflect.Method method)
Determine property (field) name from given getter/setter method.- Parameters:
method
- method to be examined.- Returns:
- property (field) name.
-
theMostSpecificTypeOf
public static java.lang.Class<?> theMostSpecificTypeOf(java.util.Set<java.lang.reflect.Type> contractTypes)
Determine the most specific type from given set.- Parameters:
contractTypes
- to be taken into account.- Returns:
- the most specific type.
-
getParameterizedClassArguments
public static java.lang.Class[] getParameterizedClassArguments(ReflectionHelper.DeclaringClassInterfacePair p)
Get the parameterized class arguments for a declaring class that declares a generic interface type.- Parameters:
p
- the declaring class- Returns:
- the parameterized class arguments, or null if the generic interface type is not a parameterized type.
-
getParameterizedTypeArguments
public static java.lang.reflect.Type[] getParameterizedTypeArguments(ReflectionHelper.DeclaringClassInterfacePair p)
Get the parameterized type arguments for a declaring class that declares a generic interface type.- Parameters:
p
- the declaring class- Returns:
- the parameterized type arguments, or null if the generic interface type is not a parameterized type.
-
getClass
public static ReflectionHelper.DeclaringClassInterfacePair getClass(java.lang.Class<?> concrete, java.lang.Class<?> iface)
Find the declaring class that implements or extends an interface.- Parameters:
concrete
- the concrete class than directly or indirectly implements or extends an interface class.iface
- the interface class.- Returns:
- the tuple of the declaring class and the generic interface type.
-
getClass
private static ReflectionHelper.DeclaringClassInterfacePair getClass(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c)
-
getType
private static ReflectionHelper.DeclaringClassInterfacePair getType(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c, java.lang.reflect.Type[] ts)
-
getType
private static ReflectionHelper.DeclaringClassInterfacePair getType(java.lang.Class<?> concrete, java.lang.Class<?> iface, java.lang.Class<?> c, java.lang.reflect.Type t)
-
resolveGenericType
public static ClassTypePair resolveGenericType(java.lang.Class concreteClass, java.lang.Class declaringClass, java.lang.Class rawResolvedType, java.lang.reflect.Type genericResolvedType)
Resolve generic type parameter(s) of a raw class and it's generic type based on the class that declares the generic type parameter(s) to be resolved and a concrete implementation of the declaring class.- Parameters:
concreteClass
- concrete implementation of the declaring class.declaringClass
- class declaring the generic type parameter(s) to be resolved.rawResolvedType
- raw class of the generic type to be resolved.genericResolvedType
- generic type information of th type to be resolved.- Returns:
- a pair of class and the generic type values with the the resolved generic parameter types.
-
resolveTypeVariable
public static ClassTypePair resolveTypeVariable(java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv)
Given a type variable resolve the Java class of that variable.- Parameters:
c
- the concrete class from which all type variables are resolved.dc
- the declaring class where the type variable was defined.tv
- the type variable.- Returns:
- the resolved Java class and type, otherwise null if the type variable could not be resolved.
-
resolveTypeVariable
private static ClassTypePair resolveTypeVariable(java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> map)
-
resolveTypeVariable
private static ClassTypePair resolveTypeVariable(java.lang.reflect.ParameterizedType pt, java.lang.Class<?> c, java.lang.Class<?> dc, java.lang.reflect.TypeVariable tv, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> map)
-
findMethodOnClassPA
public static java.security.PrivilegedAction<java.lang.reflect.Method> findMethodOnClassPA(java.lang.Class<?> c, java.lang.reflect.Method m)
Get privileged action to find a method on a class given an existing method. If run using security manager, the returned privileged action must be invoked within a doPrivileged block. If there exists a public method on the class that has the same name and parameters as the existing method then that public method is returned from the action. Otherwise, if there exists a public method on the class that has the same name and the same number of parameters as the existing method, and each generic parameter type, in order, of the public method is equal to the generic parameter type, in the same order, of the existing method or is an instance ofTypeVariable
then that public method is returned from the action.- Parameters:
c
- the class to search for a public methodm
- the method to find- Returns:
- privileged action to return public method found.
- See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
getMethodsPA
public static java.security.PrivilegedAction<java.lang.reflect.Method[]> getMethodsPA(java.lang.Class<?> c)
Get privileged action to return an array containingMethod
objects reflecting all the public member methods of the supplied class or interface object, including those declared by the class or interface and those inherited from superclasses and superinterfaces. Array classes return all the (public) member methods inherited from theObject
class. The elements in the array returned are not sorted and are not in any particular order. This method returns action providing an array of length 0 if thisClass
object represents a class or interface that has no public member methods, or if thisClass
object represents a primitive type or void.The class initialization method
<clinit>
is not included in the returned array. If the class declares multiple public member methods with the same parameter types, they are all included in the returned array.See The Java Language Specification, sections 8.2 and 8.4.
- Parameters:
c
- class for which the methods should be returned.- Returns:
- privileged action to obtain an array of
Method
objects representing the public methods of the class. - See Also:
AccessController.doPrivileged(java.security.PrivilegedAction)
-
_getMethods
private static java.lang.reflect.Method[] _getMethods(java.lang.Class<?> clazz)
-
findOverridingMethodOnClass
public static java.lang.reflect.Method findOverridingMethodOnClass(java.lang.Class<?> clazz, java.lang.reflect.Method method)
Find amethod
that overrides the givenmethod
on the givenclass
.- Parameters:
clazz
- class to find overriding method on.method
- an abstract method to find implementing method for.- Returns:
- method that overrides the given method or the given method itself if a better alternative cannot be found.
-
compareParameterTypes
private static boolean compareParameterTypes(java.lang.reflect.Type[] ts, java.lang.reflect.Type[] _ts)
Compare generic parameter types of two methods.- Parameters:
ts
- generic parameter types of the first method._ts
- generic parameter types of the second method.- Returns:
true
if the given types are understood to be equal,false
otherwise.- See Also:
compareParameterTypes(java.lang.reflect.Type, java.lang.reflect.Type)
-
compareParameterTypes
private static boolean compareParameterTypes(java.lang.reflect.Type ts, java.lang.reflect.Type _ts)
Compare respective generic parameter types of two methods.- Parameters:
ts
- generic parameter type of the first method._ts
- generic parameter type of the second method.- Returns:
true
if the given types are understood to be equal,false
otherwise.
-
checkTypeBounds
private static boolean checkTypeBounds(java.lang.Class type, java.lang.reflect.Type[] bounds)
-
getOsgiRegistryInstance
public static OsgiRegistry getOsgiRegistryInstance()
Returns anOsgiRegistry
instance.- Returns:
- an
OsgiRegistry
instance ornull
if the class cannot be instantiated (not in OSGi environment).
-
getResourceAsStream
public static java.io.InputStream getResourceAsStream(java.lang.ClassLoader loader, java.lang.Class<?> originClass, java.lang.String name)
Lookup resource by given name. If OSGi runtime is detected and the originClass parameter is not null, an attempt will be made to get the resource input stream via OSGi API from the bundle where originClass is included. Otherwise (non OSGi environment) or if OSGi fails to provide the input stream, the return value will be taken from the provided loader getResourceAsStream method.- Parameters:
loader
- class loader where to lookup the resource in non-OSGi environment or if OSGi means fail.originClass
- if not null, and OSGi environment is detected, the resource will be taken from the bundle including the originClass type.name
- filename of the desired resource.- Returns:
- an input stream corresponding to the required resource or null if the resource could not be found.
-
getRawClass
public static java.lang.Class<?> getRawClass(java.lang.reflect.Type type)
Given the type parameter gets the raw type represented by the type, or null if this has no associated raw class.- Parameters:
type
- the type to find the raw class on.- Returns:
- the raw class associated with this type.
-
-