Package: org.apache.groovy.contracts.ast

## [Java] Class MethodVariantInheritanceASTTransformation

- org.apache.groovy.contracts.ast.MethodVariantInheritanceASTTransformation

- All Implemented Interfaces and Traits:
    ASTTransformation

      public class MethodVariantInheritanceASTTransformation
      extends Object
      implements ASTTransformation

  Inherits a method-level Decreases termination measure onto an override that does not redeclare it — mirroring how groovy-contracts inherits `@Requires`/`@Ensures` (Liskov substitution). Because such an override carries no annotation of its own, the per-annotation MethodVariantASTTransformation never fires on it; this global transform fills that gap.

  For each concrete method that overrides a super-type method carrying `@Decreases` (and does not declare its own), the ancestor's measure — re-mapped from the ancestor's parameter names to the override's, since an override may rename parameters — is woven onto the override via MethodVariantASTTransformation.weaveMeasure. An override is free to declare its own `@Decreases` to refine the measure; in that case the local transform handles it and this one skips it.

  Limitation: the ancestor's measure must be available as source AST (same compilation unit). When the ancestor is a precompiled (binary) super-type, its measure closure survives only as a generated class, so the override degrades to no recursion check — sound (conservative), and a documented follow-up.

  Since:
    6.0.0
  See Also:
    Decreases
    MethodVariantASTTransformation

- - ### 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 Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

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