Class MethodMap
java.lang.Object
org.apache.velocity.util.introspection.MethodMap
- Version:
- $Id$
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classSimple distinguishable exception, used when we run across ambiguous overloading.private class -
Field Summary
FieldsModifier and TypeFieldDescription(package private) TypeConversionHandlerprivate static final intprivate static final intprivate static final intprivate static final intprivate static final intKeep track of all methods with the same name.private static final intprivate static final intprivate static final int -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructorMethodMap(TypeConversionHandler conversionHandler) Constructor with provided conversion handler -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd a method to a list of methods by name.private intDetermines which method signature (represented by a class array) is more specific.Find a method.Return a list of methods with the same name.private intgetApplicability(Method method, Class<?>[] classes) Returns the applicability of the supplied method against actual argument types.private MethodgetBestMatch(List<Method> methods, Class<?>[] args) private booleanisConvertible(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactualis convertible toformalby implicit Java method call conversionsprivate booleanisExplicitlyConvertible(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactualis convertible toformalusing an explicit converterprivate static booleanisStrictConvertible(Type formal, Class<?> actual, boolean possibleVarArg) Returns true ifactualis strictly convertible toformal(aka without implicit boxing/unboxing)private static booleanonlyNullOrObjects(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 ifactualis convertible toformalby implicit Java method call conversions- Parameters:
formal-actual-possibleVarArg-- Returns:
- convertible
-
isStrictConvertible
Returns true ifactualis strictly convertible toformal(aka without implicit boxing/unboxing)- Parameters:
formal-actual-possibleVarArg-- Returns:
- convertible
-
isExplicitlyConvertible
Returns true ifactualis convertible toformalusing an explicit converter- Parameters:
formal-actual-possibleVarArg-- Returns:
-