@GroovyASTTransformation(phase = CompilePhase.CONVERSION)
public class SingletonASTStubber
extends AbstractASTTransformation
Joint-compilation stubber for Singleton. Emits the public static
getInstance() method (or getXxx() for a custom property
name) so Java consumers can call MyClass.getInstance() against
the joint-compilation stub.
The placeholder body returns null; the full
SingletonASTTransformation at CANONICALIZATION recognises the
stubber metadata and replaces the body with the real implementation
(which dereferences the singleton field, optionally with double-checked
locking when lazy = true).
The corresponding singleton field is intentionally not emitted from
the stubber. For the default lazy = false configuration the
runtime field is public static final and Java callers could read it
directly; emitting it here would risk a duplicate-add at CANONICALIZATION,
and the getInstance() accessor is the canonical Java idiom.
Adding the field could be a follow-up if the spike's experience suggests
Java consumers commonly want field-level access.
| Fields inherited from class | Fields |
|---|---|
class AbstractASTTransformation |
RETENTION_CLASSNODE, sourceUnit |
| Type Params | Return Type | Name and description |
|---|---|---|
|
public void |
visit(ASTNode[] nodes, SourceUnit source) |