Package: org.codehaus.groovy.transform.tailrec

## [Java] Class TailRecursiveASTTransformation

- org.codehaus.groovy.transform.tailrec.TailRecursiveASTTransformation

-     public class TailRecursiveASTTransformation
      extends AbstractASTTransformation

  Handles generation of code for the

  TailRecursive:
    annotation.

    It's doing its work in the earliest possible compile phase

- - Inherited fields
    Fields inherited from class | Fields
    --- | ---
    `class AbstractASTTransformation` | `RETENTION_CLASSNODE, sourceUnit`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public static String` | `getMY_TYPE_NAME()` Returns the annotation name used in diagnostics emitted by this transformation.
    `` | `public Map<String, Map>` | `name2VariableMappingFor(MethodNode method)` Builds the parameter-to-iteration-variable mapping used during transformation.
    `` | `public Map<Integer, Map>` | `position2VariableMappingFor(MethodNode method)` Builds the argument-position mapping used during recursive return conversion.
    `` | `public void` | `visit(ASTNode[] nodes, SourceUnit source)` * The method is invoked when an AST Transformation is active. For local transformations, it is invoked once * each time the local annotation is encountered. For global transformations, it is invoked once for every source * unit, which is typically a source file. * * Parameters: `nodes` - The ASTnodes when the call was triggered. Element 0 is the AnnotationNode that triggered this * annotation to be activated. Element 1 is the AnnotatedNode decorated, such as a MethodNode or ClassNode. For * global transformations it is usually safe to ignore this parameter. * `source` - The source unit being compiled. The source unit may contain several classes. For global transformations, * information about the AST can be retrieved from this object.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class 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`

- - ### Method Detail

    - #### public static String getMY_TYPE_NAME()

      Returns the annotation name used in diagnostics emitted by this transformation.

      Returns:
        the simple annotation name prefixed with `@`

    - #### public Map<String, Map> name2VariableMappingFor(MethodNode method)

      Builds the parameter-to-iteration-variable mapping used during transformation.

      Parameters:
        `method` - the method being transformed
      Returns:
        a mapping from parameter name to iteration variable metadata

    - #### public Map<Integer, Map> position2VariableMappingFor(MethodNode method)

      Builds the argument-position mapping used during recursive return conversion.

      Parameters:
        `method` - the method being transformed
      Returns:
        a mapping from parameter position to iteration variable metadata

    - #### public void visit(ASTNode[] nodes, SourceUnit source)

      * The method is invoked when an AST Transformation is active. For local transformations, it is invoked once * each time the local annotation is encountered. For global transformations, it is invoked once for every source * unit, which is typically a source file. * *

      Parameters:
        `nodes` - The ASTnodes when the call was triggered. Element 0 is the AnnotationNode that triggered this * annotation to be activated. Element 1 is the AnnotatedNode decorated, such as a MethodNode or ClassNode. For * global transformations it is usually safe to ignore this parameter. *
        `source` - The source unit being compiled. The source unit may contain several classes. For global transformations, * information about the AST can be retrieved from this object.