public class ClassMap
extends java.lang.Object
Method
objects by
a concatenation of the method name and the names of classes that make up the parameters.Modifier and Type | Class and Description |
---|---|
private static class |
ClassMap.CacheMiss |
private static class |
ClassMap.MethodInfo
Used for the iterative discovery process for public methods.
|
Modifier and Type | Field and 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 and Description |
---|
ClassMap(java.lang.Class clazz)
Standard constructor
|
Modifier and Type | Method and 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.
|
private static final ClassMap.CacheMiss CACHE_MISS
private static final java.lang.Object OBJECT
private final java.lang.Class clazz
private java.util.Map<java.lang.String,java.lang.Object> methodCache
private final MethodMap methodMap
java.lang.Class getCachedClass()
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.
MethodMap.AmbiguousException
private void populateMethodCache()
private java.lang.String makeMethodKey(java.lang.reflect.Method method)
private static java.lang.String makeMethodKey(java.lang.String method, java.lang.Object[] params)
private static java.lang.reflect.Method[] getAccessibleMethods(java.lang.Class clazz)
private static int getAccessibleMethods(java.lang.Class clazz, ClassMap.MethodInfo[] methodInfos, int upcastCount)
clazz
- Class to checkmethodInfos
- array of methods we are searching to matchupcastCount
- current number of methods we have matchedpublic static java.lang.reflect.Method getPublicMethod(java.lang.reflect.Method method)
method
- a method whose publicly callable counterpart is requested.private static java.lang.reflect.Method getPublicMethod(java.lang.Class clazz, java.lang.String name, java.lang.Class[] paramTypes)
clazz
- the class whose method is soughtname
- the name of the methodparamTypes
- the classes of method parameters