Groovy Documentation

## org.codehaus.groovy.control.customizers
[Groovy] Class ASTTransformationCustomizer

    java.lang.Object
      CompilationUnit.PrimaryClassNodeOperation
          org.codehaus.groovy.control.customizers.CompilationCustomizer
              org.codehaus.groovy.control.customizers.ASTTransformationCustomizer

All Implemented Interfaces:
  CompilationUnitAware

    class ASTTransformationCustomizer
    extends CompilationCustomizer

This customizer allows applying an AST transformation to a source unit with several strategies. Creating a customizer with the class constructor will trigger an AST transformation for each class node of a source unit. However, you cannot pass parameters to the annotation so the default values will be used. Writing :

         def configuration = new CompilerConfiguration()
         configuration.addCompilationCustomizers(new ASTTransformationCustomizer(Log))
         def shell = new GroovyShell(configuration)
         shell.evaluate("""
            class MyClass {

            }""")

is equivalent to :

         def shell = new GroovyShell()
         shell.evaluate("""
            @Log
            class MyClass {

            }""")

The class passed as a constructor parameter must be an AST transformation annotation. Alternatively, you can apply a global AST transformation by calling the AST transformation. In that case, the transformation is applied once for the whole source unit. Unlike a global AST transformation declared in the META-INF/services/org.codehaus.groovy.transform.ASTTransformation file, which are applied if the file is in the classpath, using this customizer you'll have the choice to apply your transformation selectively. It can also be useful to debug global AST transformations without having to package your annotation in a jar file.

Authors:
  Cedric Champeau

Since:
  1.8.0

Field Summary
`protected CompilationUnit` | `compilationUnit`

Constructor Summary
`ASTTransformationCustomizer(java.lang.Class transformationAnnotation, java.lang.ClassLoader transformationClassLoader)` Creates an AST transformation customizer using the specified annotation.
`ASTTransformationCustomizer(java.lang.Class transformationAnnotation)` Creates an AST transformation customizer using the specified annotation.
`ASTTransformationCustomizer(ASTTransformation transformation)` Creates an AST transformation customizer using the specified transformation.
`ASTTransformationCustomizer(java.util.Map annotationParams, java.lang.Class transformationAnnotation, java.lang.ClassLoader transformationClassLoader)` Creates an AST transformation customizer using the specified annotation.
`ASTTransformationCustomizer(java.util.Map annotationParams, java.lang.Class transformationAnnotation)`
`ASTTransformationCustomizer(java.util.Map annotationParams, ASTTransformation transformation)`

Method Summary
`void` | `call(SourceUnit source, GeneratorContext context, ClassNode classNode)`
`void` | `setAnnotationParameters(java.util.Map params)` Specify annotation parameters.
`void` | `setCompilationUnit(CompilationUnit unit)`

Methods inherited from class CompilationCustomizer
getPhase

Field Detail

### compilationUnit

    protected CompilationUnit compilationUnit

Constructor Detail

### ASTTransformationCustomizer

    ASTTransformationCustomizer(java.lang.Class transformationAnnotation, java.lang.ClassLoader transformationClassLoader)

  Creates an AST transformation customizer using the specified annotation. The transformation classloader can be used if the transformation class cannot be loaded from the same class loader as the annotation class.
  Parameters:
    transformationAnnotation
    transformationClassLoader

### ASTTransformationCustomizer

    ASTTransformationCustomizer(java.lang.Class transformationAnnotation)

  Creates an AST transformation customizer using the specified annotation.
  Parameters:
    transformationAnnotation

### ASTTransformationCustomizer

    ASTTransformationCustomizer(ASTTransformation transformation)

  Creates an AST transformation customizer using the specified transformation.

### ASTTransformationCustomizer

    ASTTransformationCustomizer(java.util.Map annotationParams, java.lang.Class transformationAnnotation, java.lang.ClassLoader transformationClassLoader)

  Creates an AST transformation customizer using the specified annotation. The transformation classloader can be used if the transformation class cannot be loaded from the same class loader as the annotation class. Additionally, you can pass a map of parameters that will be used to parameterize the annotation.
  Parameters:
    transformationAnnotation
    transformationClassLoader

### ASTTransformationCustomizer

    ASTTransformationCustomizer(java.util.Map annotationParams, java.lang.Class transformationAnnotation)

### ASTTransformationCustomizer

    ASTTransformationCustomizer(java.util.Map annotationParams, ASTTransformation transformation)

Method Detail

### call

    @Override
    void call(SourceUnit source, GeneratorContext context, ClassNode classNode)

### setAnnotationParameters

    void setAnnotationParameters(java.util.Map params)

  Specify annotation parameters. For example, if the annotation is :

      @Log(value='logger')

  You could create an AST transformation customizer and specify the "value" parameter thanks to this method:

      annotationParameters = [value: 'logger']

       Note that you cannot specify annotation closure values directly. If the annotation you want to add takes
       a closure as an argument, you will have to set a ClosureExpression instead. This can be done by either
       creating a custom ClosureExpression from code, or using the AstBuilder.

       Here is an example :

              // add @Contract({distance >= 0 })
              customizer = new ASTTransformationCustomizer(Contract)
              final expression = new AstBuilder().buildFromCode(CompilePhase.CONVERSION) {->
                  distance >= 0
              }.expression[0]
              customizer.annotationParameters = [value: expression]
           Parameters:params -  the annotation parametersSince:1.8.1

### setCompilationUnit

    void setCompilationUnit(CompilationUnit unit)

Groovy Documentation