Class MethodMap
java.lang.Object
org.apache.velocity.util.introspection.MethodMap
- Version:
- $Id$
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Simple distinguishable exception, used when we run across ambiguous overloading.private class
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) TypeConversionHandler
private static final int
private static final int
private static final int
private static final int
private static final int
Keep track of all methods with the same name.private static final int
private static final int
private static final int
-
Constructor Summary
ConstructorsConstructorDescriptionDefault constructorMethodMap
(TypeConversionHandler conversionHandler) Constructor with provided conversion handler -
Method Summary
Modifier and TypeMethodDescriptionvoid
Add a method to a list of methods by name.private int
Determines which method signature (represented by a class array) is more specific.Find a method.Return a list of methods with the same name.private int
getApplicability
(Method method, Class<?>[] classes) Returns the applicability of the supplied method against actual argument types.private Method
getBestMatch
(List<Method> methods, Class<?>[] args) private boolean
isConvertible
(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactual
is convertible toformal
by implicit Java method call conversionsprivate boolean
isExplicitlyConvertible
(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactual
is convertible toformal
using an explicit converterprivate static boolean
isStrictConvertible
(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactual
is strictly convertible toformal
(aka without implicit boxing/unboxing)private static boolean
onlyNullOrObjects
(Class<?>[] args)
-
Field Details
-
INCOMPARABLE
private static final int INCOMPARABLE- See Also:
-
MORE_SPECIFIC
private static final int MORE_SPECIFIC- See Also:
-
EQUIVALENT
private static final int EQUIVALENT- See Also:
-
LESS_SPECIFIC
private static final int LESS_SPECIFIC- See Also:
-
NOT_CONVERTIBLE
private static final int NOT_CONVERTIBLE- See Also:
-
EXPLICITLY_CONVERTIBLE
private static final int EXPLICITLY_CONVERTIBLE- See Also:
-
IMPLCITLY_CONVERTIBLE
private static final int IMPLCITLY_CONVERTIBLE- See Also:
-
STRICTLY_CONVERTIBLE
private static final int STRICTLY_CONVERTIBLE- See Also:
-
conversionHandler
TypeConversionHandler conversionHandler -
methodByNameMap
Keep track of all methods with the same name.
-
-
Constructor Details
-
MethodMap
public MethodMap()Default constructor -
MethodMap
Constructor with provided conversion handler- Parameters:
conversionHandler
- conversion handler- Since:
- 2.0
-
-
Method Details
-
add
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
Return a list of methods with the same name.- Parameters:
key
-- Returns:
- List list of methods
-
find
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
-
onlyNullOrObjects
-
getBestMatch
-
compare
Determines which method signature (represented by a class array) is more specific. This defines a partial ordering on the method signatures.- Parameters:
t1
- first signature to comparet2
- second signature to compare- Returns:
- MORE_SPECIFIC if c1 is more specific than c2, LESS_SPECIFIC if c1 is less specific than c2, INCOMPARABLE if they are incomparable.
-
getApplicability
Returns the applicability of the supplied method against actual argument types.- Parameters:
method
- method that will be calledclasses
- arguments to method- Returns:
- the level of applicability: 0 = not applicable 1 = explicitly applicable (i.e. using stock or custom conversion handlers) 2 = implicitly applicable (i.e. using JAva implicit boxing/unboxing and primitive types widening) 3 = strictly applicable
-
isConvertible
Returns true ifactual
is convertible toformal
by implicit Java method call conversions- Parameters:
formal
-actual
-possibleVarArg
-- Returns:
- convertible
-
isStrictConvertible
Returns true ifactual
is strictly convertible toformal
(aka without implicit boxing/unboxing)- Parameters:
formal
-actual
-possibleVarArg
-- Returns:
- convertible
-
isExplicitlyConvertible
Returns true ifactual
is convertible toformal
using an explicit converter- Parameters:
formal
-actual
-possibleVarArg
-- Returns:
-