Class NamedVariantASTStubber

java.lang.Object
org.codehaus.groovy.transform.AbstractASTTransformation
org.codehaus.groovy.transform.NamedVariantASTStubber
All Implemented Interfaces:
ASTTransformation, ErrorCollecting

public class NamedVariantASTStubber extends AbstractASTTransformation
Joint-compilation stubber for NamedVariant. Emits a placeholder Map-arg variant alongside the user-declared method or constructor so Java consumers can call the named-arg form against the joint-compilation stub.

The signature emitted is the simple "all params named" shape: returnType methodName(Map namedArgs) for methods, or ClassName(Map namedArgs) for constructors. Mixed cases — where some parameters carry @NamedParam / @NamedDelegate and some remain positional — produce a richer signature at runtime that the stubber does not yet reproduce; Java consumers in those cases see only the single Map-arg variant in the stub. That is a strict subset of the runtime, so call sites that match it work either way; call sites needing positional-plus-map don't compile against the stub.

Originally listed in Tier 3 because a @NamedVariant target "added by another transform" wouldn't be visible at CONVERSION. In practice transforms compose this kind of variant via @NamedParam on parameters of an existing method, and direct user-written @NamedVariant on a hand-written method has the target visible at CONVERSION. The Tier 3 deferral was overly cautious; this stubber covers the common case.

Since:
6.0.0
  • Constructor Details

    • NamedVariantASTStubber

      public NamedVariantASTStubber()
  • 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.