Class ReflectionHelper
- java.lang.Object
-
- org.glassfish.hk2.utilities.reflection.ReflectionHelper
-
public final class ReflectionHelper extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
COMMA_STRING
private static java.lang.String
EQUALS_STRING
private static java.util.HashSet<java.lang.Character>
ESCAPE_CHARACTERS
private static char[]
ILLEGAL_CHARACTERS
private static java.lang.String
QUOTE_STRING
private static java.util.HashMap<java.lang.Character,java.lang.Character>
REPLACE_CHARACTERS
-
Constructor Summary
Constructors Constructor Description ReflectionHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static void
addAllGenericInterfaces(java.lang.Class<?> rawClass, java.lang.reflect.Type type, java.util.Set<java.lang.reflect.Type> closures)
Gets all the interfaces on this particular class (but not any superclasses of this class).private static void
addAllInterfaceContracts(java.lang.reflect.Type interfaceType, java.util.LinkedHashSet<java.lang.reflect.Type> addToMe)
static void
addMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key, java.lang.String value)
Adds a value to the list of values associated with this keystatic boolean
annotationContainsAll(java.util.Set<java.lang.annotation.Annotation> candidateAnnotations, java.util.Set<java.lang.annotation.Annotation> requiredAnnotations)
This is used to check on the annotation set.static <T> T
cast(java.lang.Object o)
Casts this thing to the given typestatic MethodWrapper
createMethodWrapper(java.lang.reflect.Method wrapMe)
Creates a method wrapper for the given methodstatic java.util.Map<java.lang.String,java.util.List<java.lang.String>>
deepCopyMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> copyMe)
This method does a deep copy of the incoming meta-data, (which basically means we will also make copies of the value list)private static java.lang.String
escapeString(java.lang.String escapeMe)
private static java.lang.reflect.ParameterizedType
fillInPT(java.lang.reflect.ParameterizedType pt, java.util.HashMap<java.lang.Class<?>,java.lang.reflect.ParameterizedType> class2TypeMap)
private static java.lang.reflect.Type
fixGenericArrayTypeVariables(java.lang.reflect.GenericArrayType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Replace any TypeVariables in the given type's arguments with the actual argument types.private static java.lang.reflect.Type
fixTypeVariables(java.lang.reflect.ParameterizedType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Replace any TypeVariables in the given type's arguments with the actual argument types.static java.util.Set<java.lang.reflect.Type>
getAdvertisedTypesFromClass(java.lang.reflect.Type type, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertisesstatic java.util.Set<java.lang.reflect.Type>
getAdvertisedTypesFromObject(java.lang.Object t, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertisesprivate static void
getAllContractsFromInterfaces(java.lang.Class<?> clazzOrInterface, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation, java.util.Set<java.lang.reflect.Type> addToMe, java.util.Set<java.lang.Class<?>> alreadyHandled)
static java.util.Set<java.lang.reflect.Type>
getAllTypes(java.lang.reflect.Type t)
private static java.lang.Class<?>
getArrayOfType(java.lang.Class<?> type)
static java.util.Set<java.lang.String>
getContractsFromClass(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertisesprivate static java.lang.ClassLoader
getCurrentContextClassLoader()
Gets the current context class loader with privsstatic java.lang.reflect.Type
getFirstTypeArgument(java.lang.reflect.Type type)
Gets the first type argument if this is a parameterized type, otherwise it returns Object.classstatic java.lang.String
getName(java.lang.Class<?> implClass)
Returns the name that should be associated with this classprivate static java.lang.String
getNamedName(javax.inject.Named named, java.lang.Class<?> implClass)
static java.lang.String
getNameFromAllQualifiers(java.util.Set<java.lang.annotation.Annotation> qualifiers, java.lang.reflect.AnnotatedElement parent)
Gets the name from the &46;Named qualifier in this set of qualifiersprivate static java.lang.reflect.Type[]
getNewTypeArguments(java.lang.reflect.ParameterizedType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Get a new array of type arguments for the given ParameterizedType, replacing any TypeVariables with actual types.private static java.lang.reflect.Type
getNewTypeArrayArguments(java.lang.reflect.GenericArrayType gat, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Get a new Type for a GenericArrayType, replacing any TypeVariables with actual types.static java.util.Set<java.lang.annotation.Annotation>
getQualifierAnnotations(java.lang.reflect.AnnotatedElement annotatedGuy)
Gets all the qualifier annotations from the objectstatic java.util.Set<java.lang.String>
getQualifiersFromClass(java.lang.Class<?> clazz)
Gets all the qualifiers from the objectstatic java.util.Set<java.lang.annotation.Annotation>
getQualifiersFromObject(java.lang.Object t)
Gets all the qualifiers from the objectstatic 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 classstatic java.lang.annotation.Annotation
getScopeAnnotationFromClass(java.lang.Class<?> clazz)
Gets the scope annotation from the objectstatic java.lang.annotation.Annotation
getScopeAnnotationFromObject(java.lang.Object t)
Gets the scope annotation from the objectstatic java.lang.annotation.Annotation
getScopeFromClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation annoDefault)
Gets the scope annotation from the objectstatic java.lang.annotation.Annotation
getScopeFromObject(java.lang.Object t, java.lang.annotation.Annotation annoDefault)
Gets the scope annotation from the objectprivate static java.util.Map<java.lang.String,java.lang.reflect.Type>
getTypeArguments(java.lang.Class<?> rawClass, java.lang.reflect.ParameterizedType type)
Gets a mapping of type variable names of the raw class to type arguments of the parameterized type.private static java.util.Set<java.lang.reflect.Type>
getTypeClosure(java.lang.reflect.Type ofType)
Returns the type closure of the given classstatic java.util.Set<java.lang.reflect.Type>
getTypeClosure(java.lang.reflect.Type ofType, java.util.Set<java.lang.String> contracts)
Returns the type closure, as restricted by the classes listed in the set of contracts implementedprivate static java.util.Set<java.lang.annotation.Annotation>
internalGetQualifierAnnotations(java.lang.reflect.AnnotatedElement annotatedGuy)
private static int
internalReadSet(char[] asChars, int startIndex, java.util.Collection<java.lang.String> addToMe)
Writes a set in a way that can be read from an input stream as well.static java.lang.Object
invoke(java.lang.Object o, java.lang.reflect.Method m, java.lang.Object[] args, boolean neutralCCL)
This version of invoke is CCL neutral (it will return with the same CCL as what it went in with)static boolean
isAnnotationAQualifier(java.lang.annotation.Annotation anno)
Returns true if the given annotation is a qualifierprivate static boolean
isFilledIn(java.lang.reflect.ParameterizedType pt)
private static boolean
isFilledIn(java.lang.reflect.ParameterizedType pt, java.util.HashSet<java.lang.reflect.ParameterizedType> recursionKiller)
static boolean
isPrivate(java.lang.reflect.Member member)
Returns true if the underlying member is privatestatic boolean
isStatic(java.lang.reflect.Member member)
Returns true if the underlying member is staticstatic java.lang.Object
makeMe(java.lang.reflect.Constructor<?> c, java.lang.Object[] args, boolean neutralCCL)
This version of invoke is CCL neutral (it will return with the same CCL as what it went in with)static void
parseServiceMetadataString(java.lang.String metadataField, java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadata)
This method parses the string that is found in the VService metadata field.private static int
readKeyStringListLine(char[] asChars, int startIndex, java.util.Map<java.lang.String,java.util.List<java.lang.String>> addToMe)
static void
readMetadataMap(java.lang.String line, java.util.Map<java.lang.String,java.util.List<java.lang.String>> addToMe)
Writes a set in a way that can be read from an input stream as wellstatic void
readSet(java.lang.String line, java.util.Collection<java.lang.String> addToMe)
Writes a set in a way that can be read from an input stream as well.static boolean
removeAllMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key)
Removes all the metadata values associated with keystatic boolean
removeMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key, java.lang.String value)
Removes the given value from the given keystatic java.lang.reflect.Type
resolveField(java.lang.Class<?> topclass, java.lang.reflect.Field field)
Resolves the generic type of a field given the actual class being instantiatedstatic java.lang.reflect.Type
resolveKnownType(java.lang.reflect.TypeVariable<?> userType, java.lang.reflect.ParameterizedType knownType, java.lang.Class<?> knownDeclaringClass)
If you have a class that declares type variables (knownDeclaringClass) and the type the user has told us it should be (knownType) then return the replaced type for the given userType.static java.lang.reflect.Type
resolveMember(java.lang.Class<?> topclass, java.lang.reflect.Type lookingForType, java.lang.Class<?> declaringClass)
Resolves the generic type of a type and declaring class given the actual class being instantiatedprivate static void
setAccessible(java.lang.reflect.AccessibleObject ao)
Sets this accessible object to be accessible using the permissions of the hk2-locator bundle (which will need the required grant)private static void
setContextClassLoader(java.lang.Thread t, java.lang.ClassLoader l)
Sets the context classloader under the privileged of this classstatic void
setField(java.lang.reflect.Field field, java.lang.Object instance, java.lang.Object value)
Sets the given field to the given valuestatic java.lang.Class<?>
translatePrimitiveType(java.lang.Class<?> type)
Converts the type to its java form, or returns the originalprivate static java.util.Map<java.lang.String,java.lang.reflect.Type>
typesFromSubClassToDeclaringClass(java.lang.Class<?> topClass, java.lang.Class<?> declaringClass)
private static java.lang.String
writeList(java.util.List<java.lang.String> list)
static java.lang.String
writeMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadata)
Used to write the metadata outstatic java.lang.String
writeSet(java.util.Set<?> set)
Writes a set in a way that can be read from an input stream as wellstatic java.lang.String
writeSet(java.util.Set<?> set, java.lang.Object excludeMe)
Writes a set in a way that can be read from an input stream as well
-
-
-
Field Detail
-
ESCAPE_CHARACTERS
private static final java.util.HashSet<java.lang.Character> ESCAPE_CHARACTERS
-
ILLEGAL_CHARACTERS
private static final char[] ILLEGAL_CHARACTERS
-
REPLACE_CHARACTERS
private static final java.util.HashMap<java.lang.Character,java.lang.Character> REPLACE_CHARACTERS
-
EQUALS_STRING
private static final java.lang.String EQUALS_STRING
- See Also:
- Constant Field Values
-
COMMA_STRING
private static final java.lang.String COMMA_STRING
- See Also:
- Constant Field Values
-
QUOTE_STRING
private static final java.lang.String QUOTE_STRING
- See Also:
- Constant Field Values
-
-
Method Detail
-
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
-
resolveField
public static java.lang.reflect.Type resolveField(java.lang.Class<?> topclass, java.lang.reflect.Field field)
Resolves the generic type of a field given the actual class being instantiated- Parameters:
topclass
- The instantiation class. Must not be nullfield
- The non-null field whose type to resolve- Returns:
- The resolved field type by way of its subclasses. Will not return null, but may return the original fields generic type
-
resolveMember
public static java.lang.reflect.Type resolveMember(java.lang.Class<?> topclass, java.lang.reflect.Type lookingForType, java.lang.Class<?> declaringClass)
Resolves the generic type of a type and declaring class given the actual class being instantiated- Parameters:
topclass
- The instantiation class. Must not be nulllookingForType
- The type to resolve. Must not be nulldeclaringClass
- The class of the entity declaring the lookingForType. Must not be null- Returns:
- The resolved type by way of its subclasses. Will not return null but may return lookingForType if it could not be further resolved
-
resolveKnownType
public static java.lang.reflect.Type resolveKnownType(java.lang.reflect.TypeVariable<?> userType, java.lang.reflect.ParameterizedType knownType, java.lang.Class<?> knownDeclaringClass)
If you have a class that declares type variables (knownDeclaringClass) and the type the user has told us it should be (knownType) then return the replaced type for the given userType. Returns null if there is no match for the userType- Parameters:
userType
- The user type to replace. May not be nullknownType
- The user defined known final type of the knownDeclaringClass. May not be nullknownDeclaringClass
- The declaringClass for which knownType is the resolved ParameterizedType for it. May not be null- Returns:
- null if userType is not related, or the given hardened parameterized type from the knownType list
-
typesFromSubClassToDeclaringClass
private static java.util.Map<java.lang.String,java.lang.reflect.Type> typesFromSubClassToDeclaringClass(java.lang.Class<?> topClass, java.lang.Class<?> declaringClass)
-
getFirstTypeArgument
public static java.lang.reflect.Type getFirstTypeArgument(java.lang.reflect.Type type)
Gets the first type argument if this is a parameterized type, otherwise it returns Object.class- Parameters:
type
- The type to find the first type argument on- Returns:
- If this is a class, Object.class. If this is a parameterized type, the type of the first actual argument
-
getNamedName
private static java.lang.String getNamedName(javax.inject.Named named, java.lang.Class<?> implClass)
-
getName
public static java.lang.String getName(java.lang.Class<?> implClass)
Returns the name that should be associated with this class- Parameters:
implClass
- The class to evaluate- Returns:
- The name this class should have
-
addAllGenericInterfaces
private static void addAllGenericInterfaces(java.lang.Class<?> rawClass, java.lang.reflect.Type type, java.util.Set<java.lang.reflect.Type> closures)
Gets all the interfaces on this particular class (but not any superclasses of this class).
-
fixTypeVariables
private static java.lang.reflect.Type fixTypeVariables(java.lang.reflect.ParameterizedType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Replace any TypeVariables in the given type's arguments with the actual argument types. Return the given type if no replacing is required.
-
fixGenericArrayTypeVariables
private static java.lang.reflect.Type fixGenericArrayTypeVariables(java.lang.reflect.GenericArrayType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Replace any TypeVariables in the given type's arguments with the actual argument types. Return the given type if no replacing is required.
-
getArrayOfType
private static java.lang.Class<?> getArrayOfType(java.lang.Class<?> type)
-
getNewTypeArguments
private static java.lang.reflect.Type[] getNewTypeArguments(java.lang.reflect.ParameterizedType type, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Get a new array of type arguments for the given ParameterizedType, replacing any TypeVariables with actual types. The types should be found in the given arguments map, keyed by variable name. Return null if no arguments needed to be replaced.
-
getNewTypeArrayArguments
private static java.lang.reflect.Type getNewTypeArrayArguments(java.lang.reflect.GenericArrayType gat, java.util.Map<java.lang.String,java.lang.reflect.Type> typeArgumentsMap)
Get a new Type for a GenericArrayType, replacing any TypeVariables with actual types. The types should be found in the given arguments map, keyed by variable name. Return null if no arguments needed to be replaced.
-
getTypeArguments
private static java.util.Map<java.lang.String,java.lang.reflect.Type> getTypeArguments(java.lang.Class<?> rawClass, java.lang.reflect.ParameterizedType type)
Gets a mapping of type variable names of the raw class to type arguments of the parameterized type.
-
getTypeClosure
private static java.util.Set<java.lang.reflect.Type> getTypeClosure(java.lang.reflect.Type ofType)
Returns the type closure of the given class- Parameters:
ofType
- The full type closure of the given class with nothing omitted (normal case). May not be null- Returns:
- The non-null (and never empty) set of classes that this class can be assigned to
-
getTypeClosure
public static java.util.Set<java.lang.reflect.Type> getTypeClosure(java.lang.reflect.Type ofType, java.util.Set<java.lang.String> contracts)
Returns the type closure, as restricted by the classes listed in the set of contracts implemented- Parameters:
ofType
- The type to checkcontracts
- The contracts this type is allowed to handle- Returns:
- The type closure restricted to the contracts
-
getAdvertisedTypesFromClass
public static java.util.Set<java.lang.reflect.Type> getAdvertisedTypesFromClass(java.lang.reflect.Type type, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertises- Parameters:
type
- The outer type to analyzemarkerAnnotation
- The annotation to use to discover the advertised types- Returns:
- The type itself and the contracts it implements
-
getAllContractsFromInterfaces
private static void getAllContractsFromInterfaces(java.lang.Class<?> clazzOrInterface, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation, java.util.Set<java.lang.reflect.Type> addToMe, java.util.Set<java.lang.Class<?>> alreadyHandled)
-
getAdvertisedTypesFromObject
public static java.util.Set<java.lang.reflect.Type> getAdvertisedTypesFromObject(java.lang.Object t, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertises- Parameters:
t
- the object we are analyzingmarkerAnnotation
- The annotation to use to discover the advertised types- Returns:
- The type itself and the contracts it implements
-
getContractsFromClass
public static java.util.Set<java.lang.String> getContractsFromClass(java.lang.Class<?> clazz, java.lang.Class<? extends java.lang.annotation.Annotation> markerAnnotation)
Returns the set of types this class advertises- Parameters:
clazz
- the class we are analyzingmarkerAnnotation
- The annotation to use to discover annotated types- Returns:
- The type itself and the contracts it implements
-
getScopeAnnotationFromObject
public static java.lang.annotation.Annotation getScopeAnnotationFromObject(java.lang.Object t)
Gets the scope annotation from the object- Parameters:
t
- The object to analyze- Returns:
- The class of the scope annotation
-
getScopeAnnotationFromClass
public static java.lang.annotation.Annotation getScopeAnnotationFromClass(java.lang.Class<?> clazz)
Gets the scope annotation from the object- Parameters:
clazz
- The class to analyze- Returns:
- The class of the scope annotation
-
getScopeFromObject
public static java.lang.annotation.Annotation getScopeFromObject(java.lang.Object t, java.lang.annotation.Annotation annoDefault)
Gets the scope annotation from the object- Parameters:
t
- The object to analyzeannoDefault
- The default that this should have if no scope could be found- Returns:
- The class of the scope annotation
-
getScopeFromClass
public static java.lang.annotation.Annotation getScopeFromClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation annoDefault)
Gets the scope annotation from the object- Parameters:
clazz
- The class to analyzeannoDefault
- The scope that should be returned if no scope could be found- Returns:
- The class of the scope annotation
-
isAnnotationAQualifier
public static boolean isAnnotationAQualifier(java.lang.annotation.Annotation anno)
Returns true if the given annotation is a qualifier- Parameters:
anno
- The annotation to check- Returns:
- true if this is an annotation
-
getQualifiersFromObject
public static java.util.Set<java.lang.annotation.Annotation> getQualifiersFromObject(java.lang.Object t)
Gets all the qualifiers from the object- Parameters:
t
- The object to analyze- Returns:
- The set of qualifiers. Will not return null but may return an empty set
-
getQualifiersFromClass
public static java.util.Set<java.lang.String> getQualifiersFromClass(java.lang.Class<?> clazz)
Gets all the qualifiers from the object- Parameters:
clazz
- The class to analyze- Returns:
- The set of qualifiers. Will not return null but may return an empty set
-
internalGetQualifierAnnotations
private static java.util.Set<java.lang.annotation.Annotation> internalGetQualifierAnnotations(java.lang.reflect.AnnotatedElement annotatedGuy)
-
getQualifierAnnotations
public static java.util.Set<java.lang.annotation.Annotation> getQualifierAnnotations(java.lang.reflect.AnnotatedElement annotatedGuy)
Gets all the qualifier annotations from the objectA strange behavior of this method is that if the annotatedGuy is a field and that field has the Named annotation on it with no value, then that Named annotation will NOT be added to the return list. This is because we have no access at this level to AnnotationLiteral, and hence cannot create a NamedImpl with which to fix the annotation. It is the responsibility of the caller of this method to add in the NamedImpl in that circumstance
- Parameters:
annotatedGuy
- The thing to analyze- Returns:
- The set of qualifiers. Will not return null but may return an empty set
-
writeSet
public static java.lang.String writeSet(java.util.Set<?> set)
Writes a set in a way that can be read from an input stream as well- Parameters:
set
- The set to write- Returns:
- a representation of a list
-
writeSet
public static java.lang.String writeSet(java.util.Set<?> set, java.lang.Object excludeMe)
Writes a set in a way that can be read from an input stream as well- Parameters:
set
- The set to writeexcludeMe
- An object to exclude from the list of things written- Returns:
- a representation of a list
-
readSet
public static void readSet(java.lang.String line, java.util.Collection<java.lang.String> addToMe) throws java.io.IOException
Writes a set in a way that can be read from an input stream as well. The values in the set may not contain the characters "{},"- Parameters:
line
- The line to readaddToMe
- The set to add the strings to- Throws:
java.io.IOException
- On a failure
-
internalReadSet
private static int internalReadSet(char[] asChars, int startIndex, java.util.Collection<java.lang.String> addToMe) throws java.io.IOException
Writes a set in a way that can be read from an input stream as well. The values in the set may not contain the characters "{},"- Parameters:
asChars
- The line to readaddToMe
- The set to add the strings to- Returns:
- The number of characters read until the end of the set
- Throws:
java.io.IOException
- On a failure
-
readKeyStringListLine
private static int readKeyStringListLine(char[] asChars, int startIndex, java.util.Map<java.lang.String,java.util.List<java.lang.String>> addToMe) throws java.io.IOException
- Throws:
java.io.IOException
-
readMetadataMap
public static void readMetadataMap(java.lang.String line, java.util.Map<java.lang.String,java.util.List<java.lang.String>> addToMe) throws java.io.IOException
Writes a set in a way that can be read from an input stream as well- Parameters:
line
- The line to readaddToMe
- The set to add the strings to- Throws:
java.io.IOException
- On a failure
-
escapeString
private static java.lang.String escapeString(java.lang.String escapeMe)
-
writeList
private static java.lang.String writeList(java.util.List<java.lang.String> list)
-
writeMetadata
public static java.lang.String writeMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadata)
Used to write the metadata out- Parameters:
metadata
- The metadata to externalize- Returns:
- The metadata in an externalizable format
-
addMetadata
public static void addMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key, java.lang.String value)
Adds a value to the list of values associated with this key- Parameters:
metadatas
- The base metadata objectkey
- The key to which to add the value. May not be nullvalue
- The value to add. May not be null
-
removeMetadata
public static boolean removeMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key, java.lang.String value)
Removes the given value from the given key- Parameters:
metadatas
- The base metadata objectkey
- The key of the value to remove. May not be nullvalue
- The value to remove. May not be null- Returns:
- true if the value was removed
-
removeAllMetadata
public static boolean removeAllMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadatas, java.lang.String key)
Removes all the metadata values associated with key- Parameters:
metadatas
- The base metadata objectkey
- The key of the metadata values to remove- Returns:
- true if any value was removed
-
deepCopyMetadata
public static java.util.Map<java.lang.String,java.util.List<java.lang.String>> deepCopyMetadata(java.util.Map<java.lang.String,java.util.List<java.lang.String>> copyMe)
This method does a deep copy of the incoming meta-data, (which basically means we will also make copies of the value list)- Parameters:
copyMe
- The guy to copy (if null, null will be returned)- Returns:
- A deep copy of the metadata
-
setField
public static void setField(java.lang.reflect.Field field, java.lang.Object instance, java.lang.Object value) throws java.lang.Throwable
Sets the given field to the given value- Parameters:
field
- The non-null field to setinstance
- The non-null instance to set intovalue
- The value to which the field should be set- Throws:
java.lang.Throwable
- If there was some exception while setting the field
-
invoke
public static java.lang.Object invoke(java.lang.Object o, java.lang.reflect.Method m, java.lang.Object[] args, boolean neutralCCL) throws java.lang.Throwable
This version of invoke is CCL neutral (it will return with the same CCL as what it went in with)- Parameters:
m
- the method to invokeo
- the object on which to invoke itargs
- The arguments to invoke (may not be null)neutralCCL
- true if the ContextClassLoader shoult remain null with this call- Returns:
- The return from the invocation
- Throws:
java.lang.Throwable
- The unwrapped throwable thrown by the method
-
isStatic
public static boolean isStatic(java.lang.reflect.Member member)
Returns true if the underlying member is static- Parameters:
member
- The non-null member to test- Returns:
- true if the member is static
-
setContextClassLoader
private static void setContextClassLoader(java.lang.Thread t, java.lang.ClassLoader l)
Sets the context classloader under the privileged of this class- Parameters:
t
- The thread on which to set the classloaderl
- The classloader to set
-
setAccessible
private static void setAccessible(java.lang.reflect.AccessibleObject ao)
Sets this accessible object to be accessible using the permissions of the hk2-locator bundle (which will need the required grant)- Parameters:
ao
- The object to change
-
makeMe
public static java.lang.Object makeMe(java.lang.reflect.Constructor<?> c, java.lang.Object[] args, boolean neutralCCL) throws java.lang.Throwable
This version of invoke is CCL neutral (it will return with the same CCL as what it went in with)- Parameters:
c
- the constructor to callargs
- The arguments to invoke (may not be null)neutralCCL
- true if the context class loader should remain null through this call- Returns:
- The return from the invocation
- Throws:
java.lang.Throwable
- The unwrapped throwable thrown by the method
-
parseServiceMetadataString
public static void parseServiceMetadataString(java.lang.String metadataField, java.util.Map<java.lang.String,java.util.List<java.lang.String>> metadata)
This method parses the string that is found in the VService metadata field.- Parameters:
metadataField
- A non-null metadata field that normally comes from the Service metadata fieldmetadata
- The metadata field to add to- Throws:
java.lang.IllegalStateException
- if a string with an invalid format is found
-
getNameFromAllQualifiers
public static java.lang.String getNameFromAllQualifiers(java.util.Set<java.lang.annotation.Annotation> qualifiers, java.lang.reflect.AnnotatedElement parent) throws java.lang.IllegalStateException
Gets the name from the &46;Named qualifier in this set of qualifiers- Parameters:
qualifiers
- The set of qualifiers that may or may not have Named in itparent
- The parent element for which we are searching- Returns:
- null if no Named was found, or the appropriate name otherwise
- Throws:
java.lang.IllegalStateException
- If the parent is annotated with a blank Named but is not a Class or a Field
-
getCurrentContextClassLoader
private static java.lang.ClassLoader getCurrentContextClassLoader()
Gets the current context class loader with privs- Returns:
- The current context class loader
-
annotationContainsAll
public static boolean annotationContainsAll(java.util.Set<java.lang.annotation.Annotation> candidateAnnotations, java.util.Set<java.lang.annotation.Annotation> requiredAnnotations)
This is used to check on the annotation set. It must be done under protection because the annotations may attempt to discover if they are equal using getDeclaredMembers permission- Parameters:
candidateAnnotations
- The candidate annotationsrequiredAnnotations
- The required annotations- Returns:
- true if the candidate set contains the entire required set
-
translatePrimitiveType
public static java.lang.Class<?> translatePrimitiveType(java.lang.Class<?> type)
Converts the type to its java form, or returns the original- Parameters:
type
- The type to convert- Returns:
- The translated type or the type itself
-
isPrivate
public static boolean isPrivate(java.lang.reflect.Member member)
Returns true if the underlying member is private- Parameters:
member
- The non-null member to test- Returns:
- true if the member is private
-
getAllTypes
public static java.util.Set<java.lang.reflect.Type> getAllTypes(java.lang.reflect.Type t)
-
fillInPT
private static java.lang.reflect.ParameterizedType fillInPT(java.lang.reflect.ParameterizedType pt, java.util.HashMap<java.lang.Class<?>,java.lang.reflect.ParameterizedType> class2TypeMap)
-
isFilledIn
private static boolean isFilledIn(java.lang.reflect.ParameterizedType pt, java.util.HashSet<java.lang.reflect.ParameterizedType> recursionKiller)
-
isFilledIn
private static boolean isFilledIn(java.lang.reflect.ParameterizedType pt)
-
addAllInterfaceContracts
private static void addAllInterfaceContracts(java.lang.reflect.Type interfaceType, java.util.LinkedHashSet<java.lang.reflect.Type> addToMe)
-
createMethodWrapper
public static MethodWrapper createMethodWrapper(java.lang.reflect.Method wrapMe)
Creates a method wrapper for the given method- Parameters:
wrapMe
- The non-null method to wrap- Returns:
- A method wrapper that has a proper equals/hashCode
-
cast
public static <T> T cast(java.lang.Object o)
Casts this thing to the given type- Parameters:
o
- The thing to cast- Returns:
- A casted version of o
-
-