Package: org.apache.groovy.contracts.ast

## [Java] Class LoopInvariantASTTransformation

- org.apache.groovy.contracts.ast.LoopInvariantASTTransformation

- All Implemented Interfaces and Traits:
    ASTTransformation, CompilationUnitAware

      public class LoopInvariantASTTransformation
      extends Object
      implements ASTTransformation, CompilationUnitAware

  Handles Invariant annotations placed on loop statements (`for`, `while`, `do-while`). For `for` and `while` loops the invariant closure is evaluated as an assertion at the start of each loop iteration. For `do-while` loops it is evaluated after each body execution instead (GROOVY-12128): the body runs before the first condition check, so the invariant only needs to be established by that first execution — checking it at loop entry would reject valid loops. (A `continue` inside a `do-while` jumps straight to the condition and therefore skips the check for that pass.)

  When `@Invariant` is placed on a class (its original usage), this transform returns immediately, letting the existing global contract pipeline handle it.

  Example:

       int sum = 0
       @Invariant({ 0 <= i && i <= 4 })
       for (int i in 0..4) {
           sum += i
       }

  Since:
    6.0.0
  See Also:
    Invariant
    LoopInvariantViolation

- - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public void` | `setCompilationUnit(CompilationUnit unit)`
    `` | `public void` | `visit(ASTNode[] nodes, SourceUnit source)` Rewrites a loop-level Invariant annotation into assertion checks injected at the start of the loop body.

  - ### 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 setCompilationUnit(CompilationUnit unit)

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

      Rewrites a loop-level Invariant annotation into assertion checks injected at the start of the loop body.

      Parameters:
        `nodes` - the annotated AST nodes supplied by the compiler
        `source` - the current source unit