java.lang.Object
org.codehaus.plexus.interpolation.reflection.ClassMap

public class ClassMap extends 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.

  • Field Details

    • CACHE_MISS

      private static final ClassMap.CacheMiss CACHE_MISS
    • OBJECT

      private static final Object OBJECT
    • clazz

      private Class<?> clazz
      Class passed into the constructor used to as the basis for the Method map.
    • methodCache

      private Map<String,Object> methodCache
      Cache of Methods, or CACHE_MISS, keyed by method name and actual arguments used to find it.
    • methodMap

      private MethodMap methodMap
  • Constructor Details

    • ClassMap

      public ClassMap(Class<?> clazz)
      Standard constructor
      Parameters:
      clazz - The class to be analyzed.
  • Method Details

    • getCachedClass

      Class<?> getCachedClass()
      Returns:
      the class object whose methods are cached by this map.
    • findMethod

      public Method findMethod(String name, 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 String makeMethodKey(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 String makeMethodKey(String method, Object[] params)
    • getAccessibleMethods

      private static Method[] getAccessibleMethods(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(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 check
      methodInfos - array of methods we are searching to match
      upcastCount - current number of methods we have matched
      Returns:
      count of matched methods
    • getPublicMethod

      public static Method getPublicMethod(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 Method getPublicMethod(Class<?> clazz, String name, 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 sought
      name - the name of the method
      paramTypes - the classes of method parameters