Class MethodParameter
- Direct Known Subclasses:
SynthesizingMethodParameter
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.
- Since:
- 2.0
- Author:
- Juergen Hoeller, Rob Harrop, Andy Clement, Sam Brannen, Sebastien Deleuze, Phillip Webb
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionMethodParameter(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 newMethodParameterfor the given method, with nesting level 1.MethodParameter(Method method, int parameterIndex, int nestingLevel) Create a newMethodParameterfor 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. -
Method Summary
Modifier and TypeMethodDescriptionprotected <A extends Annotation>
AadaptAnnotation(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.clone()voidDeprecated.booleanprotected static intfindParameterIndex(Parameter parameter) static MethodParameterforExecutable(Executable executable, int parameterIndex) Create a new MethodParameter for the given method or constructor.static MethodParameterforFieldAwareConstructor(Constructor<?> ctor, int parameterIndex, String fieldName) Create a new MethodParameter for the given field-aware constructor, for example, on a data class or record type.static MethodParameterforMethodOrConstructor(Object methodOrConstructor, int parameterIndex) Deprecated.as of 5.0, in favor offorExecutable(java.lang.reflect.Executable, int)static MethodParameterforParameter(Parameter parameter) Create a new MethodParameter for the given parameter descriptor.Return the wrapped annotated element.Constructor<?>Return the wrapped Constructor, if any.Class<?>Return the containing class for this method parameter.Class<?>Return the class that declares the underlying Method or Constructor.Return the wrapped executable.Return the generic type of the method/constructor parameter.Return the wrapped member.Return the wrapped Method, if any.<A extends Annotation>
AgetMethodAnnotation(Class<A> annotationType) Return the method/constructor annotation of the given type, if available.Return the annotations associated with the target method/constructor itself.Return the nested generic type of the method/constructor parameter.Class<?>Return the nested type of the method/constructor parameter.intReturn the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List).Return theParameterdescriptor for method/constructor parameter.<A extends Annotation>
AgetParameterAnnotation(Class<A> annotationType) Return the parameter annotation of the given type, if available.Return the annotations associated with the specific method/constructor parameter.intReturn the index of the method/constructor parameter.Return the name of the method/constructor parameter.Class<?>Return the type of the method/constructor parameter.Return the type index for the current nesting level.getTypeIndexForLevel(int nestingLevel) Return the type index for the specified nesting level.inthashCode()<A extends Annotation>
booleanhasMethodAnnotation(Class<A> annotationType) Return whether the method/constructor is annotated with the given type.<A extends Annotation>
booleanhasParameterAnnotation(Class<A> annotationType) Return whether the parameter is declared with the given annotation type.booleanReturntrueif the parameter has at least one annotation,falseif it has none.voidDeprecated.since 5.2 in favor ofnested(Integer)voidinitParameterNameDiscovery(ParameterNameDiscoverer parameterNameDiscoverer) Initialize parameter name discovery for this method parameter.booleanReturn whether this method indicates a parameter which is not required: either in the form of Java 8'sOptional, any variant of a parameter-levelNullableannotation (such as from JSR-305 or the FindBugs set of annotations), or a language-level nullable type declaration orContinuationparameter in Kotlin.nested()Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper.Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper.Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper in case of aOptionaldeclaration.voidsetTypeIndexForCurrentLevel(int typeIndex) Deprecated.since 5.2 in favor ofwithTypeIndex(int)toString()withContainingClass(Class<?> containingClass) Return a variant of thisMethodParameterwhich refers to the given containing class.withTypeIndex(int typeIndex) Return a variant of thisMethodParameterwith the type for the current level set to the specified value.
-
Constructor Details
-
MethodParameter
Create a newMethodParameterfor the given method, with nesting level 1.- Parameters:
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.
-
MethodParameter
Create a newMethodParameterfor the given method.- Parameters:
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; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
-
MethodParameter
Create a new MethodParameter for the given constructor, with nesting level 1.- Parameters:
constructor- the Constructor to specify a parameter forparameterIndex- the index of the parameter
-
MethodParameter
Create a new MethodParameter for the given constructor.- Parameters:
constructor- the Constructor to specify a parameter forparameterIndex- the index of the parameternestingLevel- the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List)
-
MethodParameter
Copy constructor, resulting in an independent MethodParameter object based on the same metadata and cache state that the original object was in.- Parameters:
original- the original MethodParameter object to copy from
-
-
Method Details
-
getMethod
Return the wrapped Method, if any.Note: Either Method or Constructor is available.
- Returns:
- the Method, or
nullif none
-
getConstructor
Return the wrapped Constructor, if any.Note: Either Method or Constructor is available.
- Returns:
- the Constructor, or
nullif none
-
getDeclaringClass
Return the class that declares the underlying Method or Constructor. -
getMember
Return the wrapped member.- Returns:
- the Method or Constructor as Member
-
getAnnotatedElement
Return the wrapped annotated element.Note: This method exposes the annotations declared on the method/constructor itself (i.e. at the method/constructor level, not at the parameter level).
To get the
AnnotatedElementat the parameter level, usegetParameter().- Returns:
- the Method or Constructor as AnnotatedElement
-
getExecutable
Return the wrapped executable.- Returns:
- the Method or Constructor as Executable
- Since:
- 5.0
-
getParameter
Return theParameterdescriptor for method/constructor parameter.- Since:
- 5.0
-
getParameterIndex
public int getParameterIndex()Return the index of the method/constructor parameter.- Returns:
- the parameter index (-1 in case of the return type)
-
increaseNestingLevel
Deprecated.since 5.2 in favor ofnested(Integer)Increase this parameter's nesting level.- See Also:
-
decreaseNestingLevel
Deprecated.since 5.2 in favor of retaining the original MethodParameter and usingnested(Integer)if nesting is requiredDecrease this parameter's nesting level.- See Also:
-
getNestingLevel
public int getNestingLevel()Return the nesting level of the target type (typically 1; for example, in case of a List of Lists, 1 would indicate the nested List, whereas 2 would indicate the element of the nested List). -
withTypeIndex
Return a variant of thisMethodParameterwith the type for the current level set to the specified value.- Parameters:
typeIndex- the new type index- Since:
- 5.2
-
setTypeIndexForCurrentLevel
Deprecated.since 5.2 in favor ofwithTypeIndex(int)Set the type index for the current nesting level.- Parameters:
typeIndex- the corresponding type index (ornullfor the default type index)- See Also:
-
getTypeIndexForCurrentLevel
Return the type index for the current nesting level.- Returns:
- the corresponding type index, or
nullif none specified (indicating the default type index) - See Also:
-
getTypeIndexForLevel
Return the type index for the specified nesting level.- Parameters:
nestingLevel- the nesting level to check- Returns:
- the corresponding type index, or
nullif none specified (indicating the default type index)
-
nested
Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper.- Since:
- 4.3
-
nested
Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper.- Parameters:
typeIndex- the type index for the new nesting level- Since:
- 5.2
-
isOptional
public boolean isOptional()Return whether this method indicates a parameter which is not required: either in the form of Java 8'sOptional, any variant of a parameter-levelNullableannotation (such as from JSR-305 or the FindBugs set of annotations), or a language-level nullable type declaration orContinuationparameter in Kotlin.- Since:
- 4.3
-
nestedIfOptional
Return a variant of thisMethodParameterwhich points to the same parameter but one nesting level deeper in case of aOptionaldeclaration.- Since:
- 4.3
- See Also:
-
withContainingClass
Return a variant of thisMethodParameterwhich refers to the given containing class.- Parameters:
containingClass- a specific containing class (potentially a subclass of the declaring class, for example, substituting a type variable)- Since:
- 5.2
- See Also:
-
getContainingClass
Return the containing class for this method parameter.- Returns:
- a specific containing class (potentially a subclass of the declaring class), or otherwise simply the declaring class itself
- See Also:
-
getParameterType
Return the type of the method/constructor parameter.- Returns:
- the parameter type (never
null)
-
getGenericParameterType
Return the generic type of the method/constructor parameter.- Returns:
- the parameter type (never
null) - Since:
- 3.0
-
getNestedParameterType
Return the nested type of the method/constructor parameter.- Returns:
- the parameter type (never
null) - Since:
- 3.1
- See Also:
-
getNestedGenericParameterType
Return the nested generic type of the method/constructor parameter.- Returns:
- the parameter type (never
null) - Since:
- 4.2
- See Also:
-
getMethodAnnotations
Return the annotations associated with the target method/constructor itself. -
getMethodAnnotation
Return the method/constructor annotation of the given type, if available.- Parameters:
annotationType- the annotation type to look for- Returns:
- the annotation object, or
nullif not found
-
hasMethodAnnotation
Return whether the method/constructor is annotated with the given type.- Parameters:
annotationType- the annotation type to look for- Since:
- 4.3
- See Also:
-
getParameterAnnotations
Return the annotations associated with the specific method/constructor parameter. -
hasParameterAnnotations
public boolean hasParameterAnnotations()Returntrueif the parameter has at least one annotation,falseif it has none.- See Also:
-
getParameterAnnotation
Return the parameter annotation of the given type, if available.- Parameters:
annotationType- the annotation type to look for- Returns:
- the annotation object, or
nullif not found
-
hasParameterAnnotation
Return whether the parameter is declared with the given annotation type.- Parameters:
annotationType- the annotation type to look for- See Also:
-
initParameterNameDiscovery
Initialize parameter name discovery for this method parameter.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). -
getParameterName
Return the name of the method/constructor parameter.- Returns:
- the parameter name (may be
nullif no parameter name metadata is contained in the class file or noParameterNameDiscovererhas been set to begin with)
-
adaptAnnotation
A template method to post-process a given annotation instance before returning it to the caller.The default implementation simply returns the given annotation as-is.
- Parameters:
annotation- the annotation about to be returned- Returns:
- the post-processed annotation (or simply the original one)
- Since:
- 4.2
-
adaptAnnotationArray
A template method to post-process a given annotation array before returning it to the caller.The default implementation simply returns the given annotation array as-is.
- Parameters:
annotations- the annotation array about to be returned- Returns:
- the post-processed annotation array (or simply the original one)
- Since:
- 4.2
-
equals
-
hashCode
public int hashCode() -
toString
-
clone
-
forMethodOrConstructor
@Deprecated public static MethodParameter forMethodOrConstructor(Object methodOrConstructor, int parameterIndex) Deprecated.as of 5.0, in favor offorExecutable(java.lang.reflect.Executable, int)Create a new MethodParameter for the given method or constructor.This is a convenience factory method for scenarios where a Method or Constructor reference is treated in a generic fashion.
- Parameters:
methodOrConstructor- the Method or Constructor to specify a parameter forparameterIndex- the index of the parameter- Returns:
- the corresponding MethodParameter instance
-
forExecutable
Create a new MethodParameter for the given method or constructor.This is a convenience factory method for scenarios where a Method or Constructor reference is treated in a generic fashion.
- Parameters:
executable- the Method or Constructor to specify a parameter forparameterIndex- the index of the parameter- Returns:
- the corresponding MethodParameter instance
- Since:
- 5.0
-
forParameter
Create a new MethodParameter for the given parameter descriptor.This is a convenience factory method for scenarios where a Java 8
Parameterdescriptor is already available.- Parameters:
parameter- the parameter descriptor- Returns:
- the corresponding MethodParameter instance
- Since:
- 5.0
-
findParameterIndex
-
forFieldAwareConstructor
public static MethodParameter forFieldAwareConstructor(Constructor<?> ctor, int parameterIndex, String fieldName) Create a new MethodParameter for the given field-aware constructor, for example, on a data class or record type.A field-aware method parameter will detect field annotations as well, as long as the field name matches the parameter name.
- Parameters:
ctor- the Constructor to specify a parameter forparameterIndex- the index of the parameterfieldName- the name of the underlying field, matching the constructor's parameter name- Returns:
- the corresponding MethodParameter instance
- Since:
- 6.1
-
nested(Integer)if nesting is required