public class DelegatingController
extends WriterController
This class will delegate all calls to a WriterController given in the constructor.
| Fields inherited from class | Fields |
|---|---|
class WriterController |
optimizeForInt |
| Constructor and description |
|---|
DelegatingController(WriterController normalController)Creates a delegating controller that forwards all calls to the given controller. |
| Type Params | Return Type | Name and description |
|---|---|---|
|
public AsmClassGenerator |
getAcg()* Returns the AsmClassGenerator managing overall compilation for this class. * Provides access to source units, compiler configuration, and other * compilation-wide state. |
|
public AssertionWriter |
getAssertionWriter()* Returns the AssertionWriter for compiling Groovy assert statements * into bytecode that evaluates conditions and raises AssertionError. |
|
public BinaryExpressionHelper |
getBinaryExpressionHelper()* Returns the appropriate BinaryExpressionHelper for the current code path. * Selects fast-path specialized handling when isFastPath() is true, * otherwise delegates to the general-purpose binary expression handler. * Fast-path optimization is controlled by optimizeForInt. * *
|
|
public int |
getBytecodeVersion()* Returns the bytecode version (target JVM version) for classes being compiled. * Examples: V1_8 (Java 8), V11 (Java 11), V17 (Java 17), etc. * Determined from compiler configuration and affects class file format * and available bytecode features in generated code. * *
|
|
public CallSiteWriter |
getCallSiteWriter()* Returns the CallSiteWriter responsible for generating dynamic call site * infrastructure. Behavior depends on bytecode strategy: either invokedynamic * for modern JVMs or traditional call-site caching for broader compatibility. |
|
public CallSiteWriter |
getCallSiteWriterFor(Expression expression)* Returns the CallSiteWriter for a specific expression. * Currently delegates to the default CallSiteWriter; reserved for * future expression-specific optimization strategies. * *
|
|
public String |
getClassName()* Returns the internal (JVM) name of the class being compiled. * For interface types with a helper loading class, returns the helper class name; * otherwise returns the standard internal class name. * Format: package segments separated by '/', e.g., "java/lang/String" * *
|
|
public ClassNode |
getClassNode()* Returns the ClassNode representing the class currently being compiled. * Contains the complete AST structure including fields, methods, and metadata. * This is immutable for the duration of the compilation process. * *
|
|
public org.objectweb.asm.ClassVisitor |
getClassVisitor()* Returns the ASM ClassVisitor for emitting class-level bytecode directives. * This is the primary interface for writing class metadata, fields, methods, * and attributes to the compiled bytecode. |
|
public ClosureWriter |
getClosureWriter()* Returns the ClosureWriter for compiling Groovy closure literals into * inner classes implementing GroovyObject and supporting variable capture. |
|
public CompileStack |
getCompileStack()* Returns the CompileStack managing local variable slots, scope boundaries, * and control flow labels during method compilation. |
|
public ConstructorNode |
getConstructorNode()* Returns the ConstructorNode for the constructor currently being compiled, or null * if no constructor is active or a method is being compiled instead. * *
|
|
public GeneratorContext |
getContext()* Returns the GeneratorContext tracking compilation state across * the entire compilation unit, including helper classes and shared resources. |
|
public org.objectweb.asm.ClassVisitor |
getCv()* Returns the ASM ClassVisitor for emitting class-level bytecode directives. * *
|
|
public InterfaceHelperClassNode |
getInterfaceClassLoadingClass()* Returns the InterfaceHelperClassNode used for interface static method loading, * or null if the compiled class is not an interface or needs no helper class. * Interface helper classes bridge the gap between interface static methods * and their actual implementation in Java 8+ runtime environments. * *
|
|
public String |
getInternalBaseClassName()* Returns the internal (JVM) name of the immediate superclass. * The internal name format uses '/' as package separator, e.g., "java/lang/Object". * Typically "java/lang/Object" for classes without explicit superclass, * or the superclass name for classes with explicit inheritance. * *
|
|
public String |
getInternalClassName()* Returns the internal (JVM) name of the class being compiled. * The internal name format uses '/' as package separator, e.g., "org/groovy/MyClass". * This corresponds to the formal name used in bytecode class descriptors. * *
|
|
public InvocationWriter |
getInvocationWriter()* Returns the InvocationWriter for compiling method calls and dynamic * function invocations into appropriate bytecode patterns. |
|
public LambdaWriter |
getLambdaWriter()* Returns the LambdaWriter for compiling Java-style lambda expressions * (using the -> operator) into functional interfaces.
|
|
public int |
getLineNumber()* Returns the source line number currently being compiled. * Line numbers are tracked for debug attribute generation in the bytecode, * allowing debuggers and profilers to map bytecode instructions to source lines. * Returns -1 when no valid line number is active. * *
|
|
public MethodNode |
getMethodNode()* Returns the MethodNode for the method currently being compiled, or null * if no method is active or a constructor is being compiled instead. * *
|
|
public MethodPointerExpressionWriter |
getMethodPointerExpressionWriter()* Returns the MethodPointerExpressionWriter for compiling method pointer * expressions (e.g., String.&length) into method reference objects.
|
|
public MethodReferenceExpressionWriter |
getMethodReferenceExpressionWriter()* Returns the MethodReferenceExpressionWriter for compiling method reference * expressions compatible with Java functional interface targets. |
|
public org.objectweb.asm.MethodVisitor |
getMethodVisitor()* Returns the ASM MethodVisitor for emitting bytecode instructions within * the currently-active method or constructor. Null if no method is active. |
|
public OperandStack |
getOperandStack()* Returns the OperandStack managing the JVM operand stack, tracking stack * depth and type information for bytecode verification and optimization. |
|
public ClassNode |
getOutermostClass()* Returns the outermost enclosing class in the nesting hierarchy. * For top-level classes, returns the class itself. For nested classes, * traverses outward to find the top-level class. * *
|
|
public ClassNode |
getReturnType()* Returns the declared return type of the current method or constructor. * The return type reflects the method signature from the source code. * *
|
|
public SourceUnit |
getSourceUnit()* Returns the SourceUnit containing the source code being compiled. * Provides access to source URLs, encoding, and error reporting infrastructure. |
|
public StatementWriter |
getStatementWriter()* Returns the StatementWriter for compiling Groovy statements into bytecode. * Selection depends on optimization mode: OptimizingStatementWriter for * optimizeForInt, otherwise generic StatementWriter. |
|
public TypeChooser |
getTypeChooser()* Returns the TypeChooser used to select appropriate type representations * for expressions during compilation, supporting both dynamic and typed paths. |
|
public UnaryExpressionHelper |
getUnaryExpressionHelper()* Returns the appropriate UnaryExpressionHelper for the current code path. * Selects fast-path specialized handling when isFastPath() is true, * otherwise delegates to the general-purpose unary expression handler. * Fast-path optimization is controlled by optimizeForInt. * *
|
|
public void |
init(AsmClassGenerator asmClassGenerator, GeneratorContext gcon, org.objectweb.asm.ClassVisitor cv, ClassNode cn)* Initializes this controller with compilation context and ASM infrastructure. * Must be called exactly once before any bytecode generation operations. * Sets up all supporting writers (call site, closure, lambda, etc.) and * configures optimization strategies based on compiler configuration. * *
|
|
public boolean |
isConstructor()* Returns true if a constructor is currently being compiled. * False if a regular instance or static method is active, or if no method is active. * *
|
|
public boolean |
isFastPath()* Returns true if the compiler is currently in fast-path mode, * emitting specialized bytecode for primitive type operations. * Use this to determine whether expression helpers should apply optimizations. * *
|
|
public boolean |
isInGeneratedFunction()* Returns true if the class being compiled is a generated function wrapper * (e.g., an inner class synthesized for a closure or lambda expression). * Generated functions have an outer class and are marked as generated. * *
|
|
public boolean |
isInGeneratedFunctionConstructor()* Returns true if compiling a constructor within a generated function class. * Combines two checks: that we're in constructor context AND in a generated function. * This condition indicates we're initializing a closure or lambda wrapper. * *
|
|
public boolean |
isInScriptBody()*
|
|
public boolean |
isNotClinit()* Returns true if the current method is NOT a static class initializer (<clinit>). * Equivalent to: no method is active OR the method is not a static constructor. * Used to guard code that should not execute in class initialization. * *
|
|
public boolean |
isStaticConstructor()* Returns true if the current method is a static class initializer (<clinit>). * The static initializer runs once when the class is loaded by the JVM. * Returns false if no method is active or the method is not static. * *
|
|
public boolean |
isStaticContext()* Determines whether the current execution context is statically scoped. * Returns true when compiling inside a static method or static class initializer. * For instance constructors, checks whether we're in a special constructor call * (e.g., super or this call) which requires static semantics. * *
|
|
public boolean |
isStaticMethod()* Returns true if the current method is explicitly declared as static. * Returns false if no method is active or the method is instance-scoped. * *
|
|
public void |
resetLineNumber()* Resets the tracked line number to -1 (invalid). * Called when switching compilation modes or after line number emission * to avoid stale line number information in subsequent bytecode. |
|
public void |
setConstructorNode(ConstructorNode cn)* Sets the ConstructorNode for the constructor currently being compiled. * Automatically clears any active method node, since only one can be active. * Used during compilation to track which constructor's bytecode is being generated. * *
|
|
public void |
setInterfaceClassLoadingClass(InterfaceHelperClassNode ihc)* Sets the InterfaceHelperClassNode for interface static method loading. * Called during interface compilation to register the synthesized helper class * that provides access to static interface methods in compatible runtimes. * The helper class allows proper method lookup and invocation for interface statics. * *
|
|
public void |
setLineNumber(int n)* Updates the current source line number being compiled. * The line number is used for debug information (LineNumberTable attribute) * and must be set before emitting bytecode for the corresponding source line. * *
|
|
public void |
setMethodNode(MethodNode mn)* Sets the MethodNode for the method currently being compiled. * Automatically clears any active constructor node, since only one can be active. * Used during compilation to track which method's bytecode is being generated. * *
|
|
public void |
setMethodVisitor(org.objectweb.asm.MethodVisitor methodVisitor)* Sets the ASM MethodVisitor for the currently-active method or constructor. * Called before each method body compilation to direct bytecode emission. * *
|
|
public boolean |
shouldOptimizeForInt()* Returns true if the bytecode generator should emit optimized fast-path code * for integer operations. Corresponds to the optimizeForInt configuration * which is disabled when invokedynamic is enabled. * *
|
|
public void |
switchToFastPath()* Switches compilation to fast-path mode for specialized numeric handling. * In fast-path mode, the compiler emits optimized bytecode for common operations * on primitive integer types, bypassing dynamic method invocation overhead. * Also resets line number tracking to allow proper debug attribute synchronization. |
|
public void |
switchToSlowPath()* Switches compilation to slow-path mode, reverting to general-purpose bytecode generation. * Slow-path mode uses dynamic method dispatch for all operations, suitable when * type information is insufficient for safe optimization or type specialization * is not beneficial. Also resets line number tracking. |
Creates a delegating controller that forwards all calls to the given controller.
normalController - the controller to delegate to* Returns the AsmClassGenerator managing overall compilation for this class. * Provides access to source units, compiler configuration, and other * compilation-wide state.
* Returns the AssertionWriter for compiling Groovy assert statements * into bytecode that evaluates conditions and raises AssertionError.
* Returns the appropriate BinaryExpressionHelper for the current code path. * Selects fast-path specialized handling when isFastPath() is true, * otherwise delegates to the general-purpose binary expression handler. * Fast-path optimization is controlled by optimizeForInt. * *
* Returns the bytecode version (target JVM version) for classes being compiled. * Examples: V1_8 (Java 8), V11 (Java 11), V17 (Java 17), etc. * Determined from compiler configuration and affects class file format * and available bytecode features in generated code. * *
* Returns the CallSiteWriter responsible for generating dynamic call site * infrastructure. Behavior depends on bytecode strategy: either invokedynamic * for modern JVMs or traditional call-site caching for broader compatibility.
* Returns the CallSiteWriter for a specific expression. * Currently delegates to the default CallSiteWriter; reserved for * future expression-specific optimization strategies. * *
expression - the expression being processed
** Returns the internal (JVM) name of the class being compiled. * For interface types with a helper loading class, returns the helper class name; * otherwise returns the standard internal class name. * Format: package segments separated by '/', e.g., "java/lang/String" * *
* Returns the ClassNode representing the class currently being compiled. * Contains the complete AST structure including fields, methods, and metadata. * This is immutable for the duration of the compilation process. * *
* Returns the ASM ClassVisitor for emitting class-level bytecode directives. * This is the primary interface for writing class metadata, fields, methods, * and attributes to the compiled bytecode.
* Returns the ClosureWriter for compiling Groovy closure literals into * inner classes implementing GroovyObject and supporting variable capture.
* Returns the CompileStack managing local variable slots, scope boundaries, * and control flow labels during method compilation.
* Returns the ConstructorNode for the constructor currently being compiled, or null * if no constructor is active or a method is being compiled instead. * *
* Returns the GeneratorContext tracking compilation state across * the entire compilation unit, including helper classes and shared resources.
* Returns the ASM ClassVisitor for emitting class-level bytecode directives. * *
* Returns the InterfaceHelperClassNode used for interface static method loading, * or null if the compiled class is not an interface or needs no helper class. * Interface helper classes bridge the gap between interface static methods * and their actual implementation in Java 8+ runtime environments. * *
* Returns the internal (JVM) name of the immediate superclass. * The internal name format uses '/' as package separator, e.g., "java/lang/Object". * Typically "java/lang/Object" for classes without explicit superclass, * or the superclass name for classes with explicit inheritance. * *
* Returns the internal (JVM) name of the class being compiled. * The internal name format uses '/' as package separator, e.g., "org/groovy/MyClass". * This corresponds to the formal name used in bytecode class descriptors. * *
* Returns the InvocationWriter for compiling method calls and dynamic * function invocations into appropriate bytecode patterns.
* Returns the LambdaWriter for compiling Java-style lambda expressions
* (using the -> operator) into functional interfaces.
* Returns the source line number currently being compiled. * Line numbers are tracked for debug attribute generation in the bytecode, * allowing debuggers and profilers to map bytecode instructions to source lines. * Returns -1 when no valid line number is active. * *
* Returns the MethodNode for the method currently being compiled, or null * if no method is active or a constructor is being compiled instead. * *
* Returns the MethodPointerExpressionWriter for compiling method pointer
* expressions (e.g., String.&length) into method reference objects.
* Returns the MethodReferenceExpressionWriter for compiling method reference * expressions compatible with Java functional interface targets.
* Returns the ASM MethodVisitor for emitting bytecode instructions within * the currently-active method or constructor. Null if no method is active.
* Returns the OperandStack managing the JVM operand stack, tracking stack * depth and type information for bytecode verification and optimization.
* Returns the outermost enclosing class in the nesting hierarchy. * For top-level classes, returns the class itself. For nested classes, * traverses outward to find the top-level class. * *
* Returns the declared return type of the current method or constructor. * The return type reflects the method signature from the source code. * *
* Returns the SourceUnit containing the source code being compiled. * Provides access to source URLs, encoding, and error reporting infrastructure.
* Returns the StatementWriter for compiling Groovy statements into bytecode. * Selection depends on optimization mode: OptimizingStatementWriter for * optimizeForInt, otherwise generic StatementWriter.
* Returns the TypeChooser used to select appropriate type representations * for expressions during compilation, supporting both dynamic and typed paths.
* Returns the appropriate UnaryExpressionHelper for the current code path. * Selects fast-path specialized handling when isFastPath() is true, * otherwise delegates to the general-purpose unary expression handler. * Fast-path optimization is controlled by optimizeForInt. * *
* Initializes this controller with compilation context and ASM infrastructure. * Must be called exactly once before any bytecode generation operations. * Sets up all supporting writers (call site, closure, lambda, etc.) and * configures optimization strategies based on compiler configuration. * *
asmClassGenerator - the class generator managing the overall compilation
*gcon - the compilation context tracking state across the compilation unit
*cv - the ASM ClassVisitor for emitting bytecode directives
*cn - the ClassNode being compiled* Returns true if a constructor is currently being compiled. * False if a regular instance or static method is active, or if no method is active. * *
* Returns true if the compiler is currently in fast-path mode, * emitting specialized bytecode for primitive type operations. * Use this to determine whether expression helpers should apply optimizations. * *
* Returns true if the class being compiled is a generated function wrapper * (e.g., an inner class synthesized for a closure or lambda expression). * Generated functions have an outer class and are marked as generated. * *
* Returns true if compiling a constructor within a generated function class. * Combines two checks: that we're in constructor context AND in a generated function. * This condition indicates we're initializing a closure or lambda wrapper. * *
*
* Returns true if the current method is NOT a static class initializer (<clinit>). * Equivalent to: no method is active OR the method is not a static constructor. * Used to guard code that should not execute in class initialization. * *
* Returns true if the current method is a static class initializer (<clinit>). * The static initializer runs once when the class is loaded by the JVM. * Returns false if no method is active or the method is not static. * *
* Determines whether the current execution context is statically scoped. * Returns true when compiling inside a static method or static class initializer. * For instance constructors, checks whether we're in a special constructor call * (e.g., super or this call) which requires static semantics. * *
* Returns true if the current method is explicitly declared as static. * Returns false if no method is active or the method is instance-scoped. * *
* Resets the tracked line number to -1 (invalid). * Called when switching compilation modes or after line number emission * to avoid stale line number information in subsequent bytecode.
* Sets the ConstructorNode for the constructor currently being compiled. * Automatically clears any active method node, since only one can be active. * Used during compilation to track which constructor's bytecode is being generated. * *
constructorNode - the ConstructorNode to compile, or null to deactivate* Sets the InterfaceHelperClassNode for interface static method loading. * Called during interface compilation to register the synthesized helper class * that provides access to static interface methods in compatible runtimes. * The helper class allows proper method lookup and invocation for interface statics. * *
ihc - the helper class node, or null to deactivate* Updates the current source line number being compiled. * The line number is used for debug information (LineNumberTable attribute) * and must be set before emitting bytecode for the corresponding source line. * *
lineNumber - the new source line number, or -1 to reset* Sets the MethodNode for the method currently being compiled. * Automatically clears any active constructor node, since only one can be active. * Used during compilation to track which method's bytecode is being generated. * *
methodNode - the MethodNode to compile, or null to deactivate* Sets the ASM MethodVisitor for the currently-active method or constructor. * Called before each method body compilation to direct bytecode emission. * *
methodVisitor - the visitor for the current method, or null to deactivate* Returns true if the bytecode generator should emit optimized fast-path code * for integer operations. Corresponds to the optimizeForInt configuration * which is disabled when invokedynamic is enabled. * *
* Switches compilation to fast-path mode for specialized numeric handling. * In fast-path mode, the compiler emits optimized bytecode for common operations * on primitive integer types, bypassing dynamic method invocation overhead. * Also resets line number tracking to allow proper debug attribute synchronization.
* Switches compilation to slow-path mode, reverting to general-purpose bytecode generation. * Slow-path mode uses dynamic method dispatch for all operations, suitable when * type information is insufficient for safe optimization or type specialization * is not beneficial. Also resets line number tracking.
Copyright © 2003-2026 The Apache Software Foundation. All rights reserved.