groovy.lang

## Annotation Type DelegatesTo

    @Documented
     @Retention(value=RUNTIME)
     @Target(value=PARAMETER)
    public @interface DelegatesTo

This annotation can be used by API or DSL writers to document parameters which accept a closure. In that case, using this annotation, you can specify what the delegate type of the closure will be. This is important for IDE support.

This annotation can also be used to help the type checker (`TypeChecked`) which would not report errors then if the delegate is of the documented type. Of course, it is also compatible with `CompileStatic`.

Example:

     // Document the fact that the delegate of the closure will be an ExecSpec
     ExecResult exec(@DelegatesTo(ExecSpec) Closure closure) { ... }

Since:
  2.1.0
Author:
  Cedric Champeau, Peter Niderwieser

### Optional Element Summary

Optional Elements
`int` `genericTypeIndex` The index of the generic type that will be the type of the closure's delegate.
`int` `strategy` The `Closure.resolveStrategy` used by the closure.
`java.lang.String` `target` In cases when there are multiple `@DelegatesTo.Target` annotated parameters, this member should be set to the `DelegatesTo.Target.value()` of the correct target.
`java.lang.String` `type` The type member should be used when the type of the delegate cannot be represented with `value()`, `genericTypeIndex()` or `target()`.
`java.lang.Class` `value`

### Element Detail

#### value

    public abstract java.lang.Class value

Default:
  groovy.lang.DelegatesTo.Target.class

#### strategy

    public abstract int strategy

The `Closure.resolveStrategy` used by the closure.

Default:
  0

#### genericTypeIndex

    public abstract int genericTypeIndex

The index of the generic type that will be the type of the closure's delegate. The generic types are considered with respect to the `@DelegatesTo.Target` annotated parameter for this usage, with the index starting at 0.

Default:
  -1

#### target

    public abstract java.lang.String target

In cases when there are multiple `@DelegatesTo.Target` annotated parameters, this member should be set to the `DelegatesTo.Target.value()` of the correct target.

Default:
  ""

#### type

    public abstract java.lang.String type

The type member should be used when the type of the delegate cannot be represented with `value()`, `genericTypeIndex()` or `target()`. In this case, it is possible to use a String to represent the type, at the cost of potential uncaught errors at compile time if the type is invalid and increased compile time.

Returns:
  a String representation of a type
Since:
  2.4.0

Default:
  ""