public class ClosureWriter
extends Object
Generates bytecode for closure expressions.
| Modifiers | Name | Description |
|---|---|---|
protected static class |
ClosureWriter.CorrectAccessedVariableVisitor |
Visitor that rewrites VariableExpression nodes whose accessed variable is a FieldNode in an outer class to instead reference the corresponding field in the generated closure inner class. |
protected interface |
ClosureWriter.UseExistingReference |
Marker interface for using existing reference. |
| Modifiers | Name | Description |
|---|---|---|
static String |
OUTER_INSTANCE |
Field name for the outer instance reference. |
static String |
THIS_OBJECT |
Field name for the this object reference. |
protected WriterController |
controller |
The controller coordinating all bytecode writers for the current class. |
| Constructor and description |
|---|
ClosureWriter(WriterController controller)Creates a closure writer with the given controller. |
| Type Params | Return Type | Name and description |
|---|---|---|
|
protected ConstructorNode |
addConstructor(ClosureExpression expression, Parameter[] localVariableParams, InnerClassNode answer, BlockStatement block)Adds a synthetic public constructor to the closure inner class that accepts
the outer instance, this object, and all captured local variable references. |
|
protected void |
addFieldsForLocalVariables(InnerClassNode closureClass, Parameter[] localVariableParams)Adds synthetic private fields to the closure inner class for each captured local variable parameter, promoting them to Reference holders. |
|
public boolean |
addGeneratedClosureConstructorCall(ConstructorCallExpression call)Emits a super(outerInstance, thisObject) constructor call for a generated
closure class. |
|
protected void |
addSerialVersionUIDField(ClassNode classNode)Adds a synthetic serialVersionUID field to the closure class,
derived from a hash of the class name. |
|
protected BlockStatement |
createBlockStatementForConstructor(ClosureExpression expression, ClassNode outerClass, ClassNode thisClassNode)Creates the block statement for the closure's synthetic constructor, setting up the super(outerInstance, thisObject) call and captured variable references. |
|
protected ClassNode |
createClosureClass(ClosureExpression expression, int modifiers)Creates a new inner class node representing the compiled form of a closure expression. |
|
protected Parameter[] |
getClosureSharedVariables(ClosureExpression expression)Collects the closure-shared local variables referenced by a closure expression as an array of Parameters, using the type chooser to infer each variable's type. |
|
public ClassNode |
getOrAddClosureClass(ClosureExpression expression, int modifiers)Returns the existing generated class for a closure expression, or creates and registers a new one if none exists yet. |
|
public static void |
loadReference(String name, WriterController controller)Loads a closure-shared variable reference onto the operand stack, looking it up as a field, local variable, or outer closure field as appropriate. |
|
protected void |
loadThis()Loads the effective this reference onto the operand stack — either the
actual receiver for a regular method, or the result of getThisObject() for
a generated closure/lambda. |
|
protected static void |
removeInitialValues(Parameter[] params)Strips initial-value expressions from parameters that are closure-shared, ensuring the closure constructor is not duplicated. |
|
public void |
writeClosure(ClosureExpression expression)Generates bytecode for a closure expression. |
Field name for the outer instance reference.
Field name for the this object reference.
The controller coordinating all bytecode writers for the current class.
Creates a closure writer with the given controller.
controller - the writer controller Adds a synthetic public constructor to the closure inner class that accepts
the outer instance, this object, and all captured local variable references.
expression - the closure expressionlocalVariableParams - parameters for closure-shared local variablesanswer - the closure inner class nodeblock - the constructor body Adds synthetic private fields to the closure inner class for each captured
local variable parameter, promoting them to Reference holders.
closureClass - the closure inner class nodelocalVariableParams - the closure-shared local variable parameters Emits a super(outerInstance, thisObject) constructor call for a generated
closure class. Returns false if the current class is not a generated closure.
call - the constructor call expression representing super(...)true if the closure constructor call was emitted Adds a synthetic serialVersionUID field to the closure class,
derived from a hash of the class name.
classNode - the closure class node to add the field to Creates the block statement for the closure's synthetic constructor, setting up
the super(outerInstance, thisObject) call and captured variable references.
expression - the closure expressionouterClass - the class declaring the closurethisClassNode - the this type in scope at the closure declaration siteCreates a new inner class node representing the compiled form of a closure expression.
expression - the closure expression to compilemodifiers - the access modifiers for the generated classCollects the closure-shared local variables referenced by a closure expression as an array of Parameters, using the type chooser to infer each variable's type.
expression - the closure expressionReturns the existing generated class for a closure expression, or creates and registers a new one if none exists yet.
expression - the closure expression to compile as an inner classmodifiers - the access modifiers for the generated classLoads a closure-shared variable reference onto the operand stack, looking it up as a field, local variable, or outer closure field as appropriate.
name - the variable name to loadcontroller - the writer controller for the enclosing class Loads the effective this reference onto the operand stack — either the
actual receiver for a regular method, or the result of getThisObject() for
a generated closure/lambda.
Strips initial-value expressions from parameters that are closure-shared, ensuring the closure constructor is not duplicated.
params - the parameters to mutate in-placeGenerates bytecode for a closure expression.
expression - the closure expressionCopyright © 2003-2026 The Apache Software Foundation. All rights reserved.