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
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 -
Method Summary
Modifier and TypeMethodDescriptionvoidvisit(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
-
Constructor Details
-
AutoCloneASTStubber
public AutoCloneASTStubber()
-
-
Method Details
-
visit
Description copied from interface:ASTTransformationThe 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.
-