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 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