Class MethodMap
- java.lang.Object
-
- org.apache.velocity.util.introspection.MethodMap
-
public class MethodMap extends Object
- Version:
- $Id$
- Author:
- Jason van Zyl, Bob McWhirter, Christoph Reck, Geir Magnusson Jr., Attila Szegedi, Claude Brisson
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MethodMap.AmbiguousException
Simple distinguishable exception, used when we run across ambiguous overloading.
-
Constructor Summary
Constructors Constructor Description MethodMap()
Default constructorMethodMap(TypeConversionHandler conversionHandler)
Constructor with provided conversion handler
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(Method method)
Add a method to a list of methods by name.Method
find(String methodName, Object[] args)
Find a method.List<Method>
get(String key)
Return a list of methods with the same name.static Method
getTopMostMethodDeclaration(Method method)
Once we identified a best match of a specific call, walk up the chain of inheritance to find the top-most declaration for this method.
-
-
-
Constructor Detail
-
MethodMap
public MethodMap()
Default constructor
-
MethodMap
public MethodMap(TypeConversionHandler conversionHandler)
Constructor with provided conversion handler- Parameters:
conversionHandler
- conversion handler- Since:
- 2.0
-
-
Method Detail
-
add
public void add(Method method)
Add a method to a list of methods by name. For a particular class we are keeping track of all the methods with the same name.- Parameters:
method
-
-
get
public List<Method> get(String key)
Return a list of methods with the same name.- Parameters:
key
-- Returns:
- List list of methods
-
find
public Method find(String methodName, Object[] args) throws MethodMap.AmbiguousException
Find a method. Attempts to find the most specific applicable method using the algorithm described in the JLS section 15.12.2 (with the exception that it can't distinguish a primitive type argument from an object type argument, since in reflection primitive type arguments are represented by their object counterparts, so for an argument of type (say) java.lang.Integer, it will not be able to decide between a method that takes int and a method that takes java.lang.Integer as a parameter.
This turns out to be a relatively rare case where this is needed - however, functionality like this is needed.
- Parameters:
methodName
- name of methodargs
- the actual arguments with which the method is called- Returns:
- the most specific applicable method, or null if no method is applicable.
- Throws:
MethodMap.AmbiguousException
- if there is more than one maximally specific applicable method
-
getTopMostMethodDeclaration
public static Method getTopMostMethodDeclaration(Method method)
Once we identified a best match of a specific call, walk up the chain of inheritance to find the top-most declaration for this method. This is needed to avoid IllegalAccessException, when a public API method is implemented by a class which is not exported.- Parameters:
method
-- Returns:
-
-