groovy.transform

## Annotation Type BaseScript

-     @Documented
      @Retention(value=SOURCE)
      @Target(value={LOCAL_VARIABLE,PACKAGE,TYPE})
      public @interface BaseScript

  Variable annotation used for changing the base script class of the current script.

  The type of the variable annotated with `@BaseScript` must extend `Script`. It will be used as the base script class. The annotated variable will become shortcut to `this` object. Using this annotation will override base script set by Groovy compiler or `CompilerConfiguration` of `GroovyShell` Example usage:

       class CustomScript extends Script {
           int getTheMeaningOfLife() { 42 }
       }

       @BaseScript CustomScript baseScript

       assert baseScript == this
       assert theMeaningOfLife == 42
       assert theMeaningOfLife == baseScript.theMeaningOfLife

  In this example, the base script of the current script will be changed to `CustomScript` allowing usage of `getTheMeaningOfLife()` method. `baseScript` variable will become typed shortcut for `this` object which enables better IDE support.

  The custom base script may implement the run() method and specify a different method name to be used for the script body by declaring a single abstract method. For example:

       abstract class CustomScriptBodyMethod extends Script {
           abstract def runScript()
           def preRun() { println "preRunning" }
           def postRun() { println "postRunning" }
           def run() {
               preRun()
               try {
                   3.times { runScript() }
               } finally {
                   postRun()
               }
           }
       }

       @BaseScript CustomScriptBodyMethod baseScript
       println "Script body run"

  That will produce the following output:

       preRunning
       Script body run
       Script body run
       Script body run
       postRunning

  Note that while you can declare arguments for the script body's method, as the AST is currently implemented they are not accessible in the script body code.
  Since:
    2.2.0
  Author:
    Paul King, Vladimir Orany, Jim White

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `Class` | `value`

- - ### Element Detail

    - #### value

          public abstract Class value

      Default:
        groovy.lang.Script.class