Package org.codehaus.groovy.transform

# Class AutoCloneASTStubber

java.lang.Object
org.codehaus.groovy.transform.AbstractASTTransformation
org.codehaus.groovy.transform.AutoCloneASTStubber

All Implemented Interfaces:
  `ASTTransformation`, `ErrorCollecting`

public class AutoCloneASTStubber extends AbstractASTTransformation
Joint-compilation stubber for `AutoClone`. Adds the `Cloneable` interface to the class header and emits a placeholder `public Foo clone()` so Java consumers can call the AutoClone-generated covariant `clone()` against the joint-compilation stub.

Without this, Java sees only `Object.clone()` (which is `protected`), so `foo.clone()` from Java fails to compile even though the runtime exposes a public covariant override.

The placeholder's `throws` clause is computed by `AutoCloneASTTransformation.cloneExceptionsFor(ClassNode)` so it is a legal Java override of the superclass `clone()` (e.g. a subclass of `HashMap` must not declare `CloneNotSupportedException` since `HashMap.clone()` doesn't).

The full `AutoCloneASTTransformation` at CANONICALIZATION removes the stubber-tagged placeholder before installing whichever `clone()` body the chosen `style` produces (CLONE, COPY_CONSTRUCTOR, SERIALIZATION, or SIMPLE).

Since:
  6.0.0

- ## Field Summary

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

  `RETENTION_CLASSNODE, sourceUnit`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AutoCloneASTStubber()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `visit(ASTNode[] nodes, SourceUnit source)`
  The method is invoked when an AST Transformation is active.

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

- ## Constructor Details

  - ### AutoCloneASTStubber

    public AutoCloneASTStubber()

- ## Method Details

  - ### visit

    public void visit(ASTNode[] nodes, SourceUnit source)
    Description copied from interface: `ASTTransformation`
    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.