Package: groovy.transform

## [Java] Annotation Type ASTTest

- groovy.transform.ASTTest

-     @Documented
      @Retention(RetentionPolicy.SOURCE)
      @Target({ElementType.PACKAGE, ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
      public @interface ASTTest

  This AST transformation aims at helping in debugging other AST transformations. It provides a basic infrastructure for performing tests on AST nodes. You can place this annotation on any node which accepts an annotation (types, methods, annotations, constructors, fields, local variables, packages or parameters), then use a script which is run against this AST node at a specific phase. For example, you could test the Field AST transformation this way:

       import groovy.transform.*

       @ASTTest(value = {
          def owner = node.declaringClass
          assert owner.fields.any { it.name == 'x' }
        })
       @Field int x

  The closure code is executed after the specified phase has completed. If no phase is provided, then the code is executed after the semantic analysis phase and each subsequent phase.

  The `node` variable refers to the AST node where the AST test annotation is put. In the previous example, it means that node refers to the declaration "int x".

  Because the closure is evaluated during compilation, merely compiling source which carries this annotation executes that code, whether or not the compiled result is subsequently run. Setting the `groovy.asttest.enable` system property to `false` makes the annotation a no-op, in the same way that `groovy.grape.enable` turns off `@Grab` dependency resolution. Consider doing so when compiling source you do not control; see the Apache Groovy threat model for what compiling such source does and does not imply.

  Since:
    2.0.0

- - ### Element Summary

    Required Element Summary
    Type | Name and Description
    --- | ---
    `Class<? extends Closure<?>>` | `value` A closure which is executed against the annotated node after the specified phase has completed.

    Optional Element Summary
    Type | Name and Description
    --- | ---
    `CompilePhase` | `phase` The compile phase after which the test code should run.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Element Detail

    - #### public CompilePhase phase

      The compile phase after which the test code should run.

      Default:
        CompilePhase.SEMANTIC_ANALYSIS

    - #### public Class<? extends Closure<?>> value

      A closure which is executed against the annotated node after the specified phase has completed.