Package org.codehaus.groovy.transform.trait

# Class TraitASTTransformation

java.lang.Object
org.codehaus.groovy.transform.AbstractASTTransformation
org.codehaus.groovy.transform.trait.TraitASTTransformation

All Implemented Interfaces:
  `CompilationUnitAware`, `ASTTransformation`, `ErrorCollecting`

public class TraitASTTransformation extends AbstractASTTransformation implements CompilationUnitAware
Handles generation of code for the traits (trait keyword is equivalent to using the @Trait annotation). A class annotated with @Trait will generate, instead:

- an interface with the same name
- a utility inner class that will be used by the compiler to implement the trait
- potentially a utility inner class to assist with implementing trait fields

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `DO_DYNAMIC`
  Metadata key that marks trait-generated calls requiring dynamic dispatch.
  `static final String`
  `POST_TYPECHECKING_REPLACEMENT`
  Metadata key that stores an expression replacement to apply after type checking.

  ### Fields inherited from class org.codehaus.groovy.transform.AbstractASTTransformation

  `RETENTION_CLASSNODE, sourceUnit`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TraitASTTransformation()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `setCompilationUnit(CompilationUnit unit)`
  Stores the compilation unit so generated helper classes can register follow-up transformations.
  `void`
  `visit(ASTNode[] nodes, SourceUnit source)`
  Rewrites a trait declaration into the interface and helper classes used during compilation.

  ### Methods inherited from class org.codehaus.groovy.transform.AbstractASTTransformation

  `addError, checkIncludeExcludeUndefinedAware, checkIncludeExcludeUndefinedAware, checkNotInterface, checkPropertyList, checkPropertyList, checkPropertyList, copyAnnotatedNodeAnnotations, copyAnnotatedNodeAnnotations, deemedInternal, deemedInternalName, getAnnotationName, getMemberClassList, getMemberClassValue, getMemberClassValue, getMemberIntValue, getMemberStringList, getMemberStringValue, getMemberStringValue, getMemberValue, hasAnnotation, init, markAsInternal, memberHasValue, shouldSkip, shouldSkip, shouldSkip, shouldSkipOnDescriptorUndefinedAware, shouldSkipUndefinedAware, shouldSkipUndefinedAware, shouldSkipUndefinedAware, tokenize`

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

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

- ## Field Details

  - ### DO_DYNAMIC

    public static final String DO_DYNAMIC
    Metadata key that marks trait-generated calls requiring dynamic dispatch.

  - ### POST_TYPECHECKING_REPLACEMENT

    public static final String POST_TYPECHECKING_REPLACEMENT
    Metadata key that stores an expression replacement to apply after type checking.

- ## Constructor Details

  - ### TraitASTTransformation

    public TraitASTTransformation()

- ## Method Details

  - ### setCompilationUnit

    public void setCompilationUnit(CompilationUnit unit)
    Stores the compilation unit so generated helper classes can register follow-up transformations.
    Specified by:
      `setCompilationUnit` in interface `CompilationUnitAware`
    Parameters:
      `unit` - the active compilation unit

  - ### visit

    public void visit(ASTNode[] nodes, SourceUnit source)
    Rewrites a trait declaration into the interface and helper classes used during compilation.
    Specified by:
      `visit` in interface `ASTTransformation`
    Parameters:
      `nodes` - the annotation and annotated nodes participating in the transformation
      `source` - the source unit being transformed