Class ClassMap
- java.lang.Object
-
- org.codehaus.plexus.interpolation.reflection.ClassMap
-
public class ClassMap extends java.lang.Object
NOTE: This class was copied from plexus-utils, to allow this library to stand completely self-contained.A cache of introspection information for a specific class instance. Keys
Method
objects by a concatenation of the method name and the names of classes that make up the parameters.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
ClassMap.CacheMiss
private static class
ClassMap.MethodInfo
Used for the iterative discovery process for public methods.
-
Field Summary
Fields Modifier and Type Field Description private static ClassMap.CacheMiss
CACHE_MISS
private java.lang.Class<?>
clazz
Class passed into the constructor used to as the basis for the Method map.private java.util.Map<java.lang.String,java.lang.Object>
methodCache
Cache of Methods, or CACHE_MISS, keyed by method name and actual arguments used to find it.private MethodMap
methodMap
private static java.lang.Object
OBJECT
-
Constructor Summary
Constructors Constructor Description ClassMap(java.lang.Class<?> clazz)
Standard constructor
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.reflect.Method
findMethod(java.lang.String name, java.lang.Object[] params)
Find a Method using the methodKey provided.private static java.lang.reflect.Method[]
getAccessibleMethods(java.lang.Class<?> clazz)
Retrieves public methods for a class.private static int
getAccessibleMethods(java.lang.Class<?> clazz, ClassMap.MethodInfo[] methodInfos, int upcastCount)
Recursively finds a match for each method, starting with the class, and then searching the superclass and interfaces.(package private) java.lang.Class<?>
getCachedClass()
private static java.lang.reflect.Method
getPublicMethod(java.lang.Class<?> clazz, java.lang.String name, java.lang.Class<?>[] paramTypes)
Looks up the method with specified name and signature in the first public superclass or implemented interface of the class.static java.lang.reflect.Method
getPublicMethod(java.lang.reflect.Method method)
For a given method, retrieves its publicly accessible counterpart.private java.lang.String
makeMethodKey(java.lang.reflect.Method method)
Make a methodKey for the given method using the concatenation of the name and the types of the method parameters.private static java.lang.String
makeMethodKey(java.lang.String method, java.lang.Object[] params)
private void
populateMethodCache()
Populate the Map of direct hits.
-
-
-
Field Detail
-
CACHE_MISS
private static final ClassMap.CacheMiss CACHE_MISS
-
OBJECT
private static final java.lang.Object OBJECT
-
clazz
private java.lang.Class<?> clazz
Class passed into the constructor used to as the basis for the Method map.
-
methodCache
private java.util.Map<java.lang.String,java.lang.Object> methodCache
Cache of Methods, or CACHE_MISS, keyed by method name and actual arguments used to find it.
-
methodMap
private MethodMap methodMap
-
-
Method Detail
-
getCachedClass
java.lang.Class<?> getCachedClass()
- Returns:
- the class object whose methods are cached by this map.
-
findMethod
public java.lang.reflect.Method findMethod(java.lang.String name, java.lang.Object[] params) throws MethodMap.AmbiguousException
Find a Method using the methodKey provided.
Look in the methodMap for an entry. If found, it'll either be a CACHE_MISS, in which case we simply give up, or it'll be a Method, in which case, we return it.
If nothing is found, then we must actually go and introspect the method from the MethodMap.
- Parameters:
name
- name of the method.params
- The parameters for the method.- Returns:
Method
.- Throws:
MethodMap.AmbiguousException
- in case of an error.
-
populateMethodCache
private void populateMethodCache()
Populate the Map of direct hits. These are taken from all the public methods that our class provides.
-
makeMethodKey
private java.lang.String makeMethodKey(java.lang.reflect.Method method)
Make a methodKey for the given method using the concatenation of the name and the types of the method parameters.
-
makeMethodKey
private static java.lang.String makeMethodKey(java.lang.String method, java.lang.Object[] params)
-
getAccessibleMethods
private static java.lang.reflect.Method[] getAccessibleMethods(java.lang.Class<?> clazz)
Retrieves public methods for a class. In case the class is not public, retrieves methods with same signature as its public methods from public superclasses and interfaces (if they exist). Basically upcasts every method to the nearest acccessible method.
-
getAccessibleMethods
private static int getAccessibleMethods(java.lang.Class<?> clazz, ClassMap.MethodInfo[] methodInfos, int upcastCount)
Recursively finds a match for each method, starting with the class, and then searching the superclass and interfaces.- Parameters:
clazz
- Class to checkmethodInfos
- array of methods we are searching to matchupcastCount
- current number of methods we have matched- Returns:
- count of matched methods
-
getPublicMethod
public static java.lang.reflect.Method getPublicMethod(java.lang.reflect.Method method)
For a given method, retrieves its publicly accessible counterpart. This method will look for a method with same name and signature declared in a public superclass or implemented interface of this method's declaring class. This counterpart method is publicly callable.- Parameters:
method
- a method whose publicly callable counterpart is requested.- Returns:
- the publicly callable counterpart method. Note that if the parameter method is itself declared by a public class, this method is an identity function.
-
getPublicMethod
private static java.lang.reflect.Method getPublicMethod(java.lang.Class<?> clazz, java.lang.String name, java.lang.Class<?>[] paramTypes)
Looks up the method with specified name and signature in the first public superclass or implemented interface of the class.- Parameters:
class
- the class whose method is soughtname
- the name of the methodparamTypes
- the classes of method parameters
-
-