Package org.codehaus.groovy.ast.expr

# Class ClosureExpression

java.lang.Object
org.codehaus.groovy.ast.ASTNode
org.codehaus.groovy.ast.AnnotatedNode
org.codehaus.groovy.ast.expr.Expression
org.codehaus.groovy.ast.expr.ClosureExpression

All Implemented Interfaces:
  `GroovydocHolder<AnnotatedNode>`, `NodeMetaDataHandler`

Direct Known Subclasses:
  `LambdaExpression`

public class ClosureExpression extends Expression
Represents a closure expression such as `{ statement }` or `{ i -> statement }` or `{ i, x, String y -> statement }`. A closure is an anonymous function that can capture local variables from its enclosing scope (closure variables). Closures support zero or more parameters, with optional type annotations, and are executed in their own variable scope.

See Also:
  - `Expression`
  - `Parameter`
  - `VariableScope`
  - `MethodCallExpression`

- ## Field Summary

  ### Fields inherited from class org.codehaus.groovy.ast.expr.Expression

  `EMPTY_ARRAY`

  ### Fields inherited from interface groovy.lang.groovydoc.GroovydocHolder

  `DOC_COMMENT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ClosureExpression(Parameter[] parameters, Statement code)`
  Creates a closure expression with the specified parameters and code body.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Statement`
  `getCode()`
  Returns the code statement that represents the body of this closure.
  `Parameter[]`
  `getParameters()`
  Returns the parameter definitions for this closure.
  `String`
  `getText()`
  Returns a human-readable text representation of this AST node.
  `VariableScope`
  `getVariableScope()`
  Returns the variable scope associated with this closure.
  `boolean`
  `isParameterSpecified()`
  Indicates whether one or more explicit parameters are specified for this closure.
  `void`
  `setCode(Statement code)`
  Sets the code statement for this closure body.
  `void`
  `setVariableScope(VariableScope variableScope)`
  Sets the variable scope for this closure.
  `String`
  `toString()`
  `Expression`
  `transformExpression(ExpressionTransformer transformer)`
  Transforms this expression and any nested expressions according to the provided transformer.
  `void`
  `visit(GroovyCodeVisitor visitor)`
  Accepts a code visitor for AST traversal and transformation.

  ### Methods inherited from class org.codehaus.groovy.ast.expr.Expression

  `getType, setType, transformExpressions, transformExpressions`

  ### Methods inherited from class org.codehaus.groovy.ast.AnnotatedNode

  `addAnnotation, addAnnotation, addAnnotations, getAnnotations, getAnnotations, getDeclaringClass, getGroovydoc, getInstance, hasNoRealSourcePosition, isSynthetic, setDeclaringClass, setHasNoRealSourcePosition, setSynthetic`

  ### Methods inherited from class org.codehaus.groovy.ast.ASTNode

  `copyNodeMetaData, getColumnNumber, getLastColumnNumber, getLastLineNumber, getLineNumber, getMetaDataMap, setColumnNumber, setLastColumnNumber, setLastLineNumber, setLineNumber, setMetaDataMap, setSourcePosition`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface org.codehaus.groovy.ast.NodeMetaDataHandler

  `copyNodeMetaData, getNodeMetaData, getNodeMetaData, getNodeMetaData, newMetaDataMap, putNodeMetaData, removeNodeMetaData, setNodeMetaData`

- ## Constructor Details

  - ### ClosureExpression

    public ClosureExpression(Parameter[] parameters, Statement code)
    Creates a closure expression with the specified parameters and code body.
    Parameters:
      `parameters` - an array of `Parameter` definitions for this closure, or null if the closure has no explicit parameters (allowing implicit it parameter); may be empty for a closure with no parameters
      `code` - the `Statement` representing the body of the closure; must not be null

- ## Method Details

  - ### getCode

    public Statement getCode()
    Returns the code statement that represents the body of this closure. This method can be used to inspect or analyze what actions the closure will perform.
    Returns:
      the code `Statement` representing the closure body; may be null

  - ### setCode

    public void setCode(Statement code)
    Sets the code statement for this closure body. This method can be used to modify or add additional actions during closure execution, typically during AST transformations.
    Parameters:
      `code` - the new `Statement` representing the closure body; must not be null

  - ### getParameters

    public Parameter[] getParameters()
    Returns the parameter definitions for this closure.
    Returns:
      an array of `Parameter` definitions, empty if no explicit parameters are provided (allowing implicit it parameter), or null if the closure has no parameters at all

  - ### isParameterSpecified

    public boolean isParameterSpecified()
    Indicates whether one or more explicit parameters are specified for this closure.
    Returns:
      true if explicit parameters are present; false if no explicit parameters are specified (in which case an implicit 'it' parameter may be available)

  - ### getVariableScope

    public VariableScope getVariableScope()
    Returns the variable scope associated with this closure. The variable scope tracks accessible variables within the closure's execution context, including captured variables.
    Returns:
      the `VariableScope` for this closure; may be null if not yet initialized

  - ### setVariableScope

    public void setVariableScope(VariableScope variableScope)
    Sets the variable scope for this closure.
    Parameters:
      `variableScope` - the `VariableScope` to associate with this closure; may be null

  - ### getText

    public String getText()
    Description copied from class: `ASTNode`
    Returns a human-readable text representation of this AST node. Used for debugging and error messages. Default implementation returns a message indicating the representation is not yet implemented for this node type.
    Overrides:
      `getText` in class `ASTNode`
    Returns:
      text representation of this node, or placeholder for unimplemented types

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### transformExpression

    public Expression transformExpression(ExpressionTransformer transformer)
    Description copied from class: `Expression`
    Transforms this expression and any nested expressions according to the provided transformer. This method is called during AST transformation phases and must recursively transform any nested expressions to support full AST tree transformation.
    Specified by:
      `transformExpression` in class `Expression`
    Parameters:
      `transformer` - the `ExpressionTransformer` to apply
    Returns:
      a transformed copy of this expression (or this expression itself if no changes are needed)

  - ### visit

    public void visit(GroovyCodeVisitor visitor)
    Description copied from class: `ASTNode`
    Accepts a code visitor for AST traversal and transformation. Subclasses must implement this method to support visitor pattern-based processing. The visitor pattern enables decoupling of AST structure from processing logic.
    Overrides:
      `visit` in class `ASTNode`
    Parameters:
      `visitor` - the `GroovyCodeVisitor` to process this node