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