public class MethodParameter extends Object
Method
or Constructor
plus a parameter index and a nested type index for a declared generic
type. Useful as a specification object to pass along.
As of 4.2, there is a SynthesizingMethodParameter
subclass available which synthesizes annotations with attribute aliases. That subclass is used
for web and message endpoint processing, in particular.
SynthesizingMethodParameter
Constructor and Description |
---|
MethodParameter(Constructor<?> constructor,
int parameterIndex)
Create a new MethodParameter for the given constructor, with nesting level 1.
|
MethodParameter(Constructor<?> constructor,
int parameterIndex,
int nestingLevel)
Create a new MethodParameter for the given constructor.
|
MethodParameter(Method method,
int parameterIndex)
Create a new
MethodParameter for the given method, with nesting level 1. |
MethodParameter(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 |
---|---|
protected <A extends Annotation> |
adaptAnnotation(A annotation)
A template method to post-process a given annotation instance before
returning it to the caller.
|
protected Annotation[] |
adaptAnnotationArray(Annotation[] annotations)
A template method to post-process a given annotation array before
returning it to the caller.
|
MethodParameter |
clone() |
void |
decreaseNestingLevel()
Deprecated.
since 5.2 in favor of retaining the original MethodParameter and
using
nested(Integer) if nesting is required |
boolean |
equals(Object other) |
protected static int |
findParameterIndex(Parameter parameter) |
static MethodParameter |
forExecutable(Executable executable,
int parameterIndex)
Create a new MethodParameter for the given method or constructor.
|
static MethodParameter |
forMethodOrConstructor(Object methodOrConstructor,
int parameterIndex)
Deprecated.
as of 5.0, in favor of
forExecutable(java.lang.reflect.Executable, int) |
static MethodParameter |
forParameter(Parameter parameter)
Create a new MethodParameter for the given parameter descriptor.
|
AnnotatedElement |
getAnnotatedElement()
Return the wrapped annotated element.
|
Constructor<?> |
getConstructor()
Return the wrapped Constructor, if any.
|
Class<?> |
getContainingClass()
Return the containing class for this method parameter.
|
Class<?> |
getDeclaringClass()
Return the class that declares the underlying Method or Constructor.
|
Executable |
getExecutable()
Return the wrapped executable.
|
Type |
getGenericParameterType()
Return the generic type of the method/constructor parameter.
|
Member |
getMember()
Return the wrapped member.
|
Method |
getMethod()
Return the wrapped Method, if any.
|
<A extends Annotation> |
getMethodAnnotation(Class<A> annotationType)
Return the method/constructor annotation of the given type, if available.
|
Annotation[] |
getMethodAnnotations()
Return the annotations associated with the target method/constructor itself.
|
Type |
getNestedGenericParameterType()
Return the nested generic type of the method/constructor parameter.
|
Class<?> |
getNestedParameterType()
Return the nested type of the method/constructor parameter.
|
int |
getNestingLevel()
Return the nesting level of the target type
(typically 1; e.g.
|
Parameter |
getParameter()
Return the
Parameter descriptor for method/constructor parameter. |
<A extends Annotation> |
getParameterAnnotation(Class<A> annotationType)
Return the parameter annotation of the given type, if available.
|
Annotation[] |
getParameterAnnotations()
Return the annotations associated with the specific method/constructor parameter.
|
int |
getParameterIndex()
Return the index of the method/constructor parameter.
|
String |
getParameterName()
Return the name of the method/constructor parameter.
|
Class<?> |
getParameterType()
Return the type of the method/constructor parameter.
|
Integer |
getTypeIndexForCurrentLevel()
Return the type index for the current nesting level.
|
Integer |
getTypeIndexForLevel(int nestingLevel)
Return the type index for the specified nesting level.
|
int |
hashCode() |
<A extends Annotation> |
hasMethodAnnotation(Class<A> annotationType)
Return whether the method/constructor is annotated with the given type.
|
<A extends Annotation> |
hasParameterAnnotation(Class<A> annotationType)
Return whether the parameter is declared with the given annotation type.
|
boolean |
hasParameterAnnotations()
Return
true if the parameter has at least one annotation,
false if it has none. |
void |
increaseNestingLevel()
Deprecated.
since 5.2 in favor of
nested(Integer) |
void |
initParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer)
Initialize parameter name discovery for this method parameter.
|
boolean |
isOptional()
Return whether this method indicates a parameter which is not required:
either in the form of Java 8's
Optional , any variant
of a parameter-level Nullable annotation (such as from JSR-305
or the FindBugs set of annotations), or a language-level nullable type
declaration or Continuation parameter in Kotlin. |
MethodParameter |
nested()
Return a variant of this
MethodParameter which points to the
same parameter but one nesting level deeper. |
MethodParameter |
nested(Integer typeIndex)
Return a variant of this
MethodParameter which points to the
same parameter but one nesting level deeper. |
MethodParameter |
nestedIfOptional()
Return a variant of this
MethodParameter which points to
the same parameter but one nesting level deeper in case of a
Optional declaration. |
void |
setTypeIndexForCurrentLevel(int typeIndex)
Deprecated.
since 5.2 in favor of
withTypeIndex(int) |
String |
toString() |
MethodParameter |
withContainingClass(Class<?> containingClass)
Return a variant of this
MethodParameter which refers to the
given containing class. |
MethodParameter |
withTypeIndex(int typeIndex)
Return a variant of this
MethodParameter with the type
for the current level set to the specified value. |
public MethodParameter(Method method, int parameterIndex)
MethodParameter
for the given method, with nesting level 1.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.public MethodParameter(Method method, int parameterIndex, int nestingLevel)
MethodParameter
for the given method.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(Constructor<?> constructor, int parameterIndex)
constructor
- the Constructor to specify a parameter forparameterIndex
- the index of the parameterpublic MethodParameter(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 from@Nullable public Method getMethod()
Note: Either Method or Constructor is available.
null
if none@Nullable public Constructor<?> getConstructor()
Note: Either Method or Constructor is available.
null
if nonepublic Class<?> getDeclaringClass()
public Member getMember()
public AnnotatedElement getAnnotatedElement()
Note: This method exposes the annotations declared on the method/constructor itself (i.e. at the method/constructor level, not at the parameter level).
public Executable getExecutable()
public Parameter getParameter()
Parameter
descriptor for method/constructor parameter.public int getParameterIndex()
@Deprecated public void increaseNestingLevel()
nested(Integer)
getNestingLevel()
@Deprecated public void decreaseNestingLevel()
nested(Integer)
if nesting is requiredgetNestingLevel()
public int getNestingLevel()
public MethodParameter withTypeIndex(int typeIndex)
MethodParameter
with the type
for the current level set to the specified value.typeIndex
- the new type index@Deprecated public void setTypeIndexForCurrentLevel(int typeIndex)
withTypeIndex(int)
typeIndex
- the corresponding type index
(or null
for the default type index)getNestingLevel()
@Nullable public Integer getTypeIndexForCurrentLevel()
null
if none specified (indicating the default type index)getNestingLevel()
@Nullable public Integer getTypeIndexForLevel(int nestingLevel)
nestingLevel
- the nesting level to checknull
if none specified (indicating the default type index)public MethodParameter nested()
MethodParameter
which points to the
same parameter but one nesting level deeper.public MethodParameter nested(@Nullable Integer typeIndex)
MethodParameter
which points to the
same parameter but one nesting level deeper.typeIndex
- the type index for the new nesting levelpublic boolean isOptional()
Optional
, any variant
of a parameter-level Nullable
annotation (such as from JSR-305
or the FindBugs set of annotations), or a language-level nullable type
declaration or Continuation
parameter in Kotlin.public MethodParameter nestedIfOptional()
MethodParameter
which points to
the same parameter but one nesting level deeper in case of a
Optional
declaration.isOptional()
,
nested()
public MethodParameter withContainingClass(@Nullable Class<?> containingClass)
MethodParameter
which refers to the
given containing class.containingClass
- a specific containing class (potentially a
subclass of the declaring class, e.g. substituting a type variable)getParameterType()
public Class<?> getContainingClass()
getDeclaringClass()
public Class<?> getParameterType()
null
)public Type getGenericParameterType()
null
)public Class<?> getNestedParameterType()
null
)getNestingLevel()
public Type getNestedGenericParameterType()
null
)getNestingLevel()
public Annotation[] getMethodAnnotations()
@Nullable public <A extends Annotation> A getMethodAnnotation(Class<A> annotationType)
annotationType
- the annotation type to look fornull
if not foundpublic <A extends Annotation> boolean hasMethodAnnotation(Class<A> annotationType)
annotationType
- the annotation type to look forgetMethodAnnotation(Class)
public Annotation[] getParameterAnnotations()
public boolean hasParameterAnnotations()
true
if the parameter has at least one annotation,
false
if it has none.getParameterAnnotations()
@Nullable public <A extends Annotation> A getParameterAnnotation(Class<A> annotationType)
annotationType
- the annotation type to look fornull
if not foundpublic <A extends Annotation> boolean hasParameterAnnotation(Class<A> annotationType)
annotationType
- the annotation type to look forgetParameterAnnotation(Class)
public void initParameterNameDiscovery(@Nullable 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).
@Nullable public String getParameterName()
null
if no
parameter name metadata is contained in the class file or no
ParameterNameDiscoverer
has been set to begin with)protected <A extends Annotation> A adaptAnnotation(A annotation)
The default implementation simply returns the given annotation as-is.
annotation
- the annotation about to be returnedprotected Annotation[] adaptAnnotationArray(Annotation[] annotations)
The default implementation simply returns the given annotation array as-is.
annotations
- the annotation array about to be returnedpublic MethodParameter clone()
@Deprecated public static MethodParameter forMethodOrConstructor(Object methodOrConstructor, int parameterIndex)
forExecutable(java.lang.reflect.Executable, int)
This is a convenience factory method 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 parameterpublic static MethodParameter forExecutable(Executable executable, int parameterIndex)
This is a convenience factory method for scenarios where a Method or Constructor reference is treated in a generic fashion.
executable
- the Method or Constructor to specify a parameter forparameterIndex
- the index of the parameterpublic static MethodParameter forParameter(Parameter parameter)
This is a convenience factory method for scenarios where a
Java 8 Parameter
descriptor is already available.
parameter
- the parameter descriptorprotected static int findParameterIndex(Parameter parameter)