Package: org.codehaus.groovy.transform

## [Java] Class FinalASTStubber

- org.codehaus.groovy.transform.FinalASTStubber

-     @GroovyASTTransformation(phase = CompilePhase.CONVERSION)
      public class FinalASTStubber
      extends AbstractASTTransformation

  Joint-compilation stubber for Final. Flips the `ACC_FINAL` modifier on the target class / field / method at CONVERSION so the stub presents the runtime final-ness to `javac`.

  Without this, an `@Immutable` (or any `@Final`-composed) Groovy class compiles in joint compilation against a stub that lets Java code declare `class JavaSubclass extends ImmutableThing`, which the runtime then rejects (or breaks the immutability invariants if it doesn't).

  No metadata-key handoff is required: the full FinalASTTransformation ORs `ACC_FINAL` into the modifiers unconditionally, which is idempotent if the bit was already set by the stubber.

  Like LazyASTStubber this stubber adds no new members — it only adjusts modifiers — so the typical `addStub*` + metadata-key dance from StubberSupport doesn't apply.

  Since:
    6.0.0

- - Inherited fields
    Fields inherited from class | Fields
    --- | ---
    `class AbstractASTTransformation` | `RETENTION_CLASSNODE, sourceUnit`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `visit(ASTNode[] nodes, SourceUnit source)`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class 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`

- - ### Method Detail

    - #### public void visit(ASTNode[] nodes, SourceUnit source)