Class BaseGenerator

java.lang.Object
org.apache.groovy.contracts.generation.BaseGenerator
Direct Known Subclasses:
ClassInvariantGenerator, PostconditionGenerator, PreconditionGenerator

public abstract class BaseGenerator extends Object
Base class for groovy-contracts code generators.
  • Field Details

    • INVARIANT_CLOSURE_PREFIX

      public static final String INVARIANT_CLOSURE_PREFIX
      Prefix used for synthetic methods that evaluate class invariants.
      See Also:
    • META_DATA_USE_INLINE_MODE

      public static final String META_DATA_USE_INLINE_MODE
      Node metadata flag indicating that assertions can be emitted in inline mode.
      See Also:
    • source

      protected final ReaderSource source
      Reader source used by generators that need source-aware AST construction.
  • Constructor Details

    • BaseGenerator

      protected BaseGenerator(ReaderSource source)
      Creates a generator bound to the supplied reader source.
      Parameters:
      source - the reader source backing the current source unit
  • Method Details

    • getInvariantMethodName

      public static String getInvariantMethodName(ClassNode classNode)
      Parameters:
      classNode - the ClassNode used to look up the invariant closure field
      Returns:
      the field name of the invariant closure field of the given classNode
    • getInvariantMethodNode

      public static MethodNode getInvariantMethodNode(ClassNode classNode)
      Parameters:
      classNode - the ClassNode used to look up the invariant closure field
      Returns:
      the MethodNode which contains the invariant of the given classNode
    • getInlineModeBlockStatement

      protected BlockStatement getInlineModeBlockStatement(BlockStatement blockStatement)
      Extracts the inline-mode assertion block from the supplied wrapper block.
      Parameters:
      blockStatement - the block containing generated assertion statements
      Returns:
      an inline-mode block guarded by the contracts-enabled flag
    • wrapAssertionBooleanExpression

      protected BlockStatement wrapAssertionBooleanExpression(ClassNode type, MethodNode methodNode, BooleanExpression classInvariantExpression, String assertionType)
      Wraps a contract predicate with tracking, violation rethrowing, and execution guards.
      Parameters:
      type - the declaring class
      methodNode - the method whose assertion is being emitted
      classInvariantExpression - the predicate to evaluate
      assertionType - the logical assertion kind
      Returns:
      the generated wrapper block
    • addCallsToSuperMethodNodeAnnotationClosure

      protected BooleanExpression addCallsToSuperMethodNodeAnnotationClosure(ClassNode type, MethodNode methodNode, Class<? extends Annotation> annotationType, BooleanExpression booleanExpression, boolean isPostcondition)
      Merges inherited contract closures into the supplied predicate for the given method.
      Parameters:
      type - the declaring class
      methodNode - the method whose inherited contracts should be consulted
      annotationType - the contract meta-annotation to search for
      booleanExpression - the predicate built from the current declaration
      isPostcondition - whether postcondition calling conventions should be used
      Returns:
      the predicate augmented with inherited contract closures