Package groovy.transform.builder
Class BuilderASTStubber
java.lang.Object
org.codehaus.groovy.transform.AbstractASTTransformation
groovy.transform.builder.BuilderASTStubber
- All Implemented Interfaces:
ASTTransformation,ErrorCollecting
Joint-compilation stubber for
Builder, covering the two most
common shapes:
DefaultStrategyon a class-level annotation: emits the inner builder class with fluent setters and abuild()method, plus a staticFoo.builder()factory on the buildee.SimpleStrategywith a non-defaultprefix: emits chainedFoo prefixName(T value)setters on the buildee itself. Skipped silently for the defaultprefix = "set"because the stubber'sFoo setX(value)would clash with the voidsetX(value)that the stub generator's Verifier sub-pass also emits for properties — Java doesn't allow two methods with the same name and parameters but different return types.
Other strategies are out of scope for this spike pass:
InitializerStrategy— typed-builder pattern with generic parameters; structurally larger than the spike's scope.ExternalStrategy— annotates an explicit builder class rather than the buildee; the stubber would fire on the explicit builder, with no impact on the buildee's stub.
Method/constructor targets, the forClass attribute, and
includeSuperProperties are also out of scope. The stubber walks
directly-declared properties only, mirroring the same Tier 1 limitation
other property-walking stubbers carry.
- 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
-
BuilderASTStubber
public BuilderASTStubber()
-
-
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.
-