Class LoopInvariantASTTransformation

java.lang.Object
org.apache.groovy.contracts.ast.LoopInvariantASTTransformation
All Implemented Interfaces:
ASTTransformation

public class LoopInvariantASTTransformation extends Object implements ASTTransformation
Handles Invariant annotations placed on loop statements (for, while, do-while). The invariant closure is evaluated as an assertion at the start of each loop iteration.

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:
  • Constructor Details

    • LoopInvariantASTTransformation

      public LoopInvariantASTTransformation()
  • Method Details

    • visit

      public void visit(ASTNode[] nodes, SourceUnit source)
      Rewrites a loop-level Invariant annotation into assertion checks injected at the start of the loop body.
      Specified by:
      visit in interface ASTTransformation
      Parameters:
      nodes - the annotated AST nodes supplied by the compiler
      source - the current source unit