public class MethodParameter
extends java.lang.Object
GenericCollectionTypeResolver
Modifier and Type | Field and Description |
---|---|
private java.lang.reflect.Constructor |
constructor |
private java.lang.reflect.Type |
genericParameterType |
private int |
hash |
private java.lang.reflect.Method |
method |
private int |
nestingLevel |
private java.lang.annotation.Annotation[] |
parameterAnnotations |
private int |
parameterIndex |
private java.lang.String |
parameterName |
private ParameterNameDiscoverer |
parameterNameDiscoverer |
private java.lang.Class<?> |
parameterType |
(package private) java.util.Map<java.lang.Integer,java.lang.Integer> |
typeIndexesPerLevel
Map from Integer level to Integer type index
|
(package private) java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> |
typeVariableMap |
Constructor and Description |
---|
MethodParameter(java.lang.reflect.Constructor constructor,
int parameterIndex)
Create a new MethodParameter for the given constructor, with nesting level 1.
|
MethodParameter(java.lang.reflect.Constructor constructor,
int parameterIndex,
int nestingLevel)
Create a new MethodParameter for the given constructor.
|
MethodParameter(java.lang.reflect.Method method,
int parameterIndex)
Create a new MethodParameter for the given method, with nesting level 1.
|
MethodParameter(java.lang.reflect.Method method,
int parameterIndex,
int nestingLevel)
Create a new MethodParameter for the given method.
|
MethodParameter(MethodParameter original)
Copy constructor, resulting in an independent MethodParameter object
based on the same metadata and cache state that the original object was in.
|
Modifier and Type | Method and Description |
---|---|
void |
decreaseNestingLevel()
Decrease this parameter's nesting level.
|
boolean |
equals(java.lang.Object obj) |
static MethodParameter |
forMethodOrConstructor(java.lang.Object methodOrConstructor,
int parameterIndex)
Create a new MethodParameter for the given method or constructor.
|
private java.lang.reflect.AnnotatedElement |
getAnnotatedElement()
Returns the wrapped annotated element.
|
java.lang.reflect.Constructor |
getConstructor()
Return the wrapped Constructor, if any.
|
java.lang.Class<?> |
getDeclaringClass()
Return the class that declares the underlying Method or Constructor.
|
java.lang.reflect.Type |
getGenericParameterType()
Return the generic type of the method/constructor parameter.
|
private java.lang.reflect.Member |
getMember()
Returns the wrapped member.
|
java.lang.reflect.Method |
getMethod()
Return the wrapped Method, if any.
|
<T extends java.lang.annotation.Annotation> |
getMethodAnnotation(java.lang.Class<T> annotationType)
Return the method/constructor annotation of the given type, if available.
|
java.lang.annotation.Annotation[] |
getMethodAnnotations()
Return the annotations associated with the target method/constructor itself.
|
java.lang.Class<?> |
getNestedParameterType() |
int |
getNestingLevel()
Return the nesting level of the target type
(typically 1; e.g.
|
<T extends java.lang.annotation.Annotation> |
getParameterAnnotation(java.lang.Class<T> annotationType)
Return the parameter annotation of the given type, if available.
|
java.lang.annotation.Annotation[] |
getParameterAnnotations()
Return the annotations associated with the specific method/constructor parameter.
|
int |
getParameterIndex()
Return the index of the method/constructor parameter.
|
java.lang.String |
getParameterName()
Return the name of the method/constructor parameter.
|
java.lang.Class<?> |
getParameterType()
Return the type of the method/constructor parameter.
|
private java.util.Map<java.lang.Integer,java.lang.Integer> |
getTypeIndexesPerLevel()
Obtain the (lazily constructed) type-indexes-per-level Map.
|
java.lang.Integer |
getTypeIndexForCurrentLevel()
Return the type index for the current nesting level.
|
java.lang.Integer |
getTypeIndexForLevel(int nestingLevel)
Return the type index for the specified nesting level.
|
int |
hashCode() |
<T extends java.lang.annotation.Annotation> |
hasParameterAnnotation(java.lang.Class<T> annotationType)
Return true if the parameter has the given annotation type, and false if it doesn't.
|
boolean |
hasParameterAnnotations()
Return true if the parameter has at least one annotation, false if it has none.
|
void |
increaseNestingLevel()
Increase this parameter's nesting level.
|
void |
initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer)
Initialize parameter name discovery for this method parameter.
|
(package private) void |
setParameterType(java.lang.Class<?> parameterType)
Set a resolved (generic) parameter type.
|
void |
setTypeIndexForCurrentLevel(int typeIndex)
Set the type index for the current nesting level.
|
private final java.lang.reflect.Method method
private final java.lang.reflect.Constructor constructor
private final int parameterIndex
private java.lang.Class<?> parameterType
private java.lang.reflect.Type genericParameterType
private java.lang.annotation.Annotation[] parameterAnnotations
private ParameterNameDiscoverer parameterNameDiscoverer
private java.lang.String parameterName
private int nestingLevel
java.util.Map<java.lang.Integer,java.lang.Integer> typeIndexesPerLevel
java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> typeVariableMap
private int hash
public MethodParameter(java.lang.reflect.Method method, int parameterIndex)
method
- the Method to specify a parameter forparameterIndex
- the index of the parameterpublic MethodParameter(java.lang.reflect.Method method, int parameterIndex, int nestingLevel)
method
- the Method to specify a parameter forparameterIndex
- the index of the parameter
(-1 for the method return type; 0 for the first method parameter,
1 for the second method parameter, etc)nestingLevel
- the nesting level of the target type
(typically 1; e.g. in case of a List of Lists, 1 would indicate the
nested List, whereas 2 would indicate the element of the nested List)public MethodParameter(java.lang.reflect.Constructor constructor, int parameterIndex)
constructor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameterpublic MethodParameter(java.lang.reflect.Constructor constructor, int parameterIndex, int nestingLevel)
constructor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameternestingLevel
- the nesting level of the target type
(typically 1; e.g. in case of a List of Lists, 1 would indicate the
nested List, whereas 2 would indicate the element of the nested List)public MethodParameter(MethodParameter original)
original
- the original MethodParameter object to copy frompublic java.lang.reflect.Method getMethod()
Note: Either Method or Constructor is available.
null
if nonepublic java.lang.reflect.Constructor getConstructor()
Note: Either Method or Constructor is available.
null
if noneprivate java.lang.reflect.Member getMember()
private java.lang.reflect.AnnotatedElement getAnnotatedElement()
public java.lang.Class<?> getDeclaringClass()
public int getParameterIndex()
void setParameterType(java.lang.Class<?> parameterType)
public java.lang.Class<?> getParameterType()
null
)public java.lang.reflect.Type getGenericParameterType()
null
)public java.lang.Class<?> getNestedParameterType()
public java.lang.annotation.Annotation[] getMethodAnnotations()
public <T extends java.lang.annotation.Annotation> T getMethodAnnotation(java.lang.Class<T> annotationType)
annotationType
- the annotation type to look fornull
if not foundpublic java.lang.annotation.Annotation[] getParameterAnnotations()
public <T extends java.lang.annotation.Annotation> T getParameterAnnotation(java.lang.Class<T> annotationType)
annotationType
- the annotation type to look fornull
if not foundpublic boolean hasParameterAnnotations()
public <T extends java.lang.annotation.Annotation> boolean hasParameterAnnotation(java.lang.Class<T> annotationType)
public void initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer)
This method does not actually try to retrieve the parameter name at
this point; it just allows discovery to happen when the application calls
getParameterName()
(if ever).
public java.lang.String getParameterName()
null
if no
parameter name metadata is contained in the class file or no
ParameterNameDiscoverer
has been set to begin with)public void increaseNestingLevel()
getNestingLevel()
public void decreaseNestingLevel()
getNestingLevel()
public int getNestingLevel()
public void setTypeIndexForCurrentLevel(int typeIndex)
typeIndex
- the corresponding type index
(or null
for the default type index)getNestingLevel()
public java.lang.Integer getTypeIndexForCurrentLevel()
null
if none specified (indicating the default type index)getNestingLevel()
public java.lang.Integer getTypeIndexForLevel(int nestingLevel)
nestingLevel
- the nesting level to checknull
if none specified (indicating the default type index)private java.util.Map<java.lang.Integer,java.lang.Integer> getTypeIndexesPerLevel()
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public static MethodParameter forMethodOrConstructor(java.lang.Object methodOrConstructor, int parameterIndex)
This is a convenience constructor for scenarios where a Method or Constructor reference is treated in a generic fashion.
methodOrConstructor
- the Method or Constructor to specify a parameter forparameterIndex
- the index of the parameter