Class MethodParameter

  • Direct Known Subclasses:
    SynthesizingMethodParameter

    public class MethodParameter
    extends Object
    Helper class that encapsulates the specification of a method parameter, i.e. a 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
    See Also:
    SynthesizingMethodParameter
    • Constructor Detail

      • MethodParameter

        public MethodParameter​(Method method,
                               int parameterIndex)
        Create a new MethodParameter for the given method, with nesting level 1.
        Parameters:
        method - the Method to specify a parameter for
        parameterIndex - 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

        public MethodParameter​(Method method,
                               int parameterIndex,
                               int nestingLevel)
        Create a new MethodParameter for the given method.
        Parameters:
        method - the Method to specify a parameter for
        parameterIndex - 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)
      • MethodParameter

        public MethodParameter​(Constructor<?> constructor,
                               int parameterIndex)
        Create a new MethodParameter for the given constructor, with nesting level 1.
        Parameters:
        constructor - the Constructor to specify a parameter for
        parameterIndex - the index of the parameter
      • MethodParameter

        public MethodParameter​(Constructor<?> constructor,
                               int parameterIndex,
                               int nestingLevel)
        Create a new MethodParameter for the given constructor.
        Parameters:
        constructor - the Constructor to specify a parameter for
        parameterIndex - the index of the parameter
        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)
      • MethodParameter

        public 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.
        Parameters:
        original - the original MethodParameter object to copy from
    • Method Detail

      • getMethod

        public Method getMethod()
        Return the wrapped Method, if any.

        Note: Either Method or Constructor is available.

        Returns:
        the Method, or null if none
      • getConstructor

        public Constructor<?> getConstructor()
        Return the wrapped Constructor, if any.

        Note: Either Method or Constructor is available.

        Returns:
        the Constructor, or null if none
      • getDeclaringClass

        public Class<?> getDeclaringClass()
        Return the class that declares the underlying Method or Constructor.
      • getMember

        public Member getMember()
        Return the wrapped member.
        Returns:
        the Method or Constructor as Member
      • getAnnotatedElement

        public AnnotatedElement 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).

        Returns:
        the Method or Constructor as AnnotatedElement
      • getParameterIndex

        public int getParameterIndex()
        Return the index of the method/constructor parameter.
        Returns:
        the parameter index (-1 in case of the return type)
      • getNestingLevel

        public int getNestingLevel()
        Return 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).
      • setTypeIndexForCurrentLevel

        public void setTypeIndexForCurrentLevel​(int typeIndex)
        Set the type index for the current nesting level.
        Parameters:
        typeIndex - the corresponding type index (or null for the default type index)
        See Also:
        getNestingLevel()
      • getTypeIndexForLevel

        public Integer getTypeIndexForLevel​(int nestingLevel)
        Return the type index for the specified nesting level.
        Parameters:
        nestingLevel - the nesting level to check
        Returns:
        the corresponding type index, or null if none specified (indicating the default type index)
      • nested

        public MethodParameter nested()
        Return a variant of this MethodParameter which points to the same parameter but one nesting level deeper. This is effectively the same as increaseNestingLevel(), just with an independent MethodParameter object (e.g. in case of the original being cached).
        Since:
        4.3
      • isOptional

        public boolean isOptional()
        Return whether this method parameter is declared as optional in the form of Java 8's Optional.
        Since:
        4.3
      • getContainingClass

        public Class<?> 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:
        getDeclaringClass()
      • getParameterType

        public Class<?> getParameterType()
        Return the type of the method/constructor parameter.
        Returns:
        the parameter type (never null)
      • getGenericParameterType

        public Type getGenericParameterType()
        Return the generic type of the method/constructor parameter.
        Returns:
        the parameter type (never null)
        Since:
        3.0
      • getMethodAnnotation

        public <A extends Annotation> A getMethodAnnotation​(Class<A> annotationType)
        Return the method/constructor annotation of the given type, if available.
        Parameters:
        annotationType - the annotation type to look for
        Returns:
        the annotation object, or null if not found
      • getParameterAnnotation

        public <A extends Annotation> A getParameterAnnotation​(Class<A> annotationType)
        Return the parameter annotation of the given type, if available.
        Parameters:
        annotationType - the annotation type to look for
        Returns:
        the annotation object, or null if not found
      • initParameterNameDiscovery

        public void initParameterNameDiscovery​(ParameterNameDiscoverer parameterNameDiscoverer)
        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

        public String getParameterName()
        Return the name of the method/constructor parameter.
        Returns:
        the parameter name (may be null if no parameter name metadata is contained in the class file or no ParameterNameDiscoverer has been set to begin with)
      • adaptAnnotation

        protected <A extends Annotation> A adaptAnnotation​(A annotation)
        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

        protected Annotation[] adaptAnnotationArray​(Annotation[] annotations)
        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
      • forMethodOrConstructor

        public static MethodParameter forMethodOrConstructor​(Object methodOrConstructor,
                                                             int parameterIndex)
        Create a new MethodParameter for the given method or constructor.

        This is a convenience constructor for scenarios where a Method or Constructor reference is treated in a generic fashion.

        Parameters:
        methodOrConstructor - the Method or Constructor to specify a parameter for
        parameterIndex - the index of the parameter
        Returns:
        the corresponding MethodParameter instance