anchor.diff:  Groovy comes with various AST transformations covering different needs: reducing boilerplate (code generation), implementing
   design patterns (delegation, ...), logging, declarative concurrency, cloning, safer scripting, tweaking the compilation,
   implementing Swing patterns, testing and eventually managing dependencies. If none of those AST transformations cover
  -your needs, you can still implement your own, as show in section <<developing-ast-xforms,Developing your own AST
  -transformations>>.
  +your needs, you can still implement your own, as show in section <<developing-ast-xforms,Developing your own AST transformations>>.
   
   AST transformations can be separated into two categories:
   
  
positive.code: [[xform-AnnotationCollector]]
  ===== `@groovy.transform.AnnotationCollector`
  
  `@AnnotationCollector` allows the creation of meta-annotations, which are described in a <<meta-annotations,dedicated section>>.
  
  [[xform-TypeChecked]]
  ===== `@groovy.transform.TypeChecked`
  
  `@TypeChecked` activates compile-time type checking on your Groovy code. See <<section-typechecked,section on type checking>> for details.
  
  [[xform-CompileStatic]]
  ===== `@groovy.transform.CompileStatic`
  
  `@CompileStatic` activates static compilation on your Groovy code. See <<section-typechecked,section on type checking>> for details.
  
  [[xform-CompileDynamic]]
  ===== `@groovy.transform.CompileDynamic`
  
  `@CompileDynamic` disables static compilation on parts of your Groovy code. See <<section-typechecked,section on type checking>> for details.
  
  [[xform-DelegatesTo]]
  ===== `@groovy.lang.DelegatesTo`
  
  `@DelegatesTo` is not, technically speaking, an AST transformation. It is aimed at documenting code and helping the compiler in case you are
  using <<xform-TypeChecked,type checking>> or <<xform-CompileStatic, static compilation>>. The annotation is described thoroughly in the
  <<section-delegatesto,DSL section>> of this guide.
  
  [[xform-SelfType]]
  ===== `@groovy.transform.SelfType`
  
negative.code: they are applied _globally_, that is to say on each class being compiled. It is therefore very important to limit their
  use to last resort, because it can have a significant impact on the compiler performance.
  
  Following the example of the <<transform-local,local AST transformation>>, imagine that we would like to trace all
  methods, and not only those which are annotated with `@WithLogging`. Basically, we need this code to behave the same
  as the one annotated with `@WithLogging` before:
  
  