Module lettuce.core

Class MethodParameter

java.lang.Object
io.lettuce.core.dynamic.support.MethodParameter

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.
  • Constructor Details

    • 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 Details

    • 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
    • getMember

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

      public AnnotatedElement getAnnotatedElement()
      Returns the wrapped annotated element.
      Returns:
      the Method or Constructor as AnnotatedElement
    • getDeclaringClass

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

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

      public void increaseNestingLevel()
      Increase this parameter's nesting level.
      See Also:
      getNestingLevel()
    • decreaseNestingLevel

      public void decreaseNestingLevel()
      Decrease this parameter's nesting level.
      See Also:
      getNestingLevel()
    • 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()
    • getTypeIndexForCurrentLevel

      public Integer getTypeIndexForCurrentLevel()
      Return the type index for the current nesting level.
      Returns:
      the corresponding type index, or null if none specified (indicating 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)
    • getContainingClass

      public Class<?> getContainingClass()
    • 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)
    • getNestedParameterType

      public Class<?> getNestedParameterType()
      Return the nested type of the method/constructor parameter.
      Returns:
      the parameter type (never null)
      See Also:
      getNestingLevel()
    • getNestedGenericParameterType

      public Type getNestedGenericParameterType()
      Return the nested generic type of the method/constructor parameter.
      Returns:
      the parameter type (never null)
      See Also:
      getNestingLevel()
    • getMethodAnnotations

      public Annotation[] getMethodAnnotations()
      Return the annotations associated with the target method/constructor itself.
    • 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
    • getParameterAnnotations

      public Annotation[] getParameterAnnotations()
      Return the annotations associated with the specific method/constructor parameter.
    • getParameterAnnotation

      public <T extends Annotation> T getParameterAnnotation​(Class<T> 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
    • hasParameterAnnotations

      public boolean hasParameterAnnotations()
      Return true if the parameter has at least one annotation, false if it has none.
    • hasParameterAnnotation

      public <T extends Annotation> boolean hasParameterAnnotation​(Class<T> annotationType)
      Return true if the parameter has the given annotation type, and false if it doesn't.
    • 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)
    • 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)
    • equals

      public boolean equals​(Object other)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • 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