groovy.transform.stc

## Class PickAnyArgumentHint

- java.lang.Object
- - groovy.transform.stc.ClosureSignatureHint
  - - groovy.transform.stc.SingleSignatureClosureHint
    - - groovy.transform.stc.PickAnyArgumentHint

- Direct Known Subclasses:
    FirstParam, FirstParam.FirstGenericType, FirstParam.SecondGenericType, FirstParam.ThirdGenericType, SecondParam, SecondParam.FirstGenericType, SecondParam.SecondGenericType, SecondParam.ThirdGenericType, ThirdParam, ThirdParam.FirstGenericType, ThirdParam.SecondGenericType, ThirdParam.ThirdGenericType

      public class PickAnyArgumentHint
      extends SingleSignatureClosureHint

  Base class for hints which use the type of a parameter of the annotated method as the signature. This can optionally use a generic type of the selected parameter as the hint. For example, imagine the following method:

  `void foo(A firstArg, B secondArg, Closure c) {...}`

  If the c closure should be `{ B it -> ...}`, then we can see that the parameter type should be picked from the second parameter of the foo method, which is what `PickAnyArgumentHint` lets you do.

  Alternatively, the method may look like this:

  `void <T> foo(A<T> firstArg, B secondArg, Closure c) {...}`

  in which case if you want to express the fact that c should accept a <T> then you can use the `genericTypeIndex` value.

  This class is extended by several hint providers that make it easier to use as annotation values.

  Since:
    2.3.0
  Author:
    Cédric Champeau

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `PickAnyArgumentHint()` Creates the an argument picker which extracts the type of the first parameter.
    `PickAnyArgumentHint(int parameterIndex, int genericTypeIndex)` Creates a picker which will extract the parameterIndex-th parameter type, or its genericTypeIndex-th generic type genericTypeIndex is >=0.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ClassNode[]` | `getParameterTypes(MethodNode node, String[] options, SourceUnit sourceUnit, CompilationUnit unit, ASTNode usage)`

    - ### Methods inherited from class groovy.transform.stc.SingleSignatureClosureHint

      `getClosureSignatures`

    - ### Methods inherited from class groovy.transform.stc.ClosureSignatureHint

      `findClassNode, pickGenericType, pickGenericType`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### PickAnyArgumentHint

          public PickAnyArgumentHint()

      Creates the an argument picker which extracts the type of the first parameter.

    - #### PickAnyArgumentHint

          public PickAnyArgumentHint(int parameterIndex,
                             int genericTypeIndex)

      Creates a picker which will extract the parameterIndex-th parameter type, or its genericTypeIndex-th generic type genericTypeIndex is >=0.
      Parameters:
        `parameterIndex` - the index of the parameter from which to extract the type
        `genericTypeIndex` - if >=0, then returns the corresponding generic type instead of the parameter type.

  - ### Method Detail

    - #### getParameterTypes

          public ClassNode[] getParameterTypes(MethodNode node,
                                      String[] options,
                                      SourceUnit sourceUnit,
                                      CompilationUnit unit,
                                      ASTNode usage)

      Specified by:
        `getParameterTypes` in class `SingleSignatureClosureHint`