Class DynamicSetterInjectionVisitor

All Implemented Interfaces:
GroovyClassVisitor, GroovyCodeVisitor, ErrorCollecting

public class DynamicSetterInjectionVisitor extends BaseVisitor

Implements contract support for setter methods and default constructors of POGOs.

See Also:
  • Constructor Details

    • DynamicSetterInjectionVisitor

      public DynamicSetterInjectionVisitor(SourceUnit sourceUnit, ReaderSource source)
      Creates a visitor that injects synthetic setters and constructors needed for invariant checks.
      Parameters:
      sourceUnit - the source unit currently being transformed
      source - the reader source backing the source unit
  • Method Details

    • createSetterBlock

      protected Statement createSetterBlock(ClassNode classNode, FieldNode field, Parameter parameter)
      Creates the body of a synthetic setter that wraps the assignment with invariant checks.
      Parameters:
      classNode - the declaring class
      field - the field being written
      parameter - the synthetic setter parameter
      Returns:
      the generated setter body
    • visitProperty

      public void visitProperty(PropertyNode node)
      Adds a synthetic setter for invariant-checked properties when no explicit setter is present.
      Specified by:
      visitProperty in interface GroovyClassVisitor
      Overrides:
      visitProperty in class ClassCodeVisitorSupport
      Parameters:
      node - the property being visited
    • visitClass

      public void visitClass(ClassNode classNode)
      Prepares invariant-check blocks for the class and adds a synthetic default constructor when needed.
      Specified by:
      visitClass in interface GroovyClassVisitor
      Overrides:
      visitClass in class ClassCodeVisitorSupport
      Parameters:
      classNode - the class being visited