Package org.codehaus.groovy.classgen

## Class AsmClassGenerator

- java.lang.Object
- - org.codehaus.groovy.ast.CodeVisitorSupport
  - - org.codehaus.groovy.ast.ClassCodeVisitorSupport
    - - org.codehaus.groovy.classgen.ClassGenerator
      - - org.codehaus.groovy.classgen.AsmClassGenerator

- All Implemented Interfaces:
    `GroovyClassVisitor`, `GroovyCodeVisitor`, `ErrorCollecting`, `org.objectweb.asm.Opcodes`

      public class AsmClassGenerator
      extends ClassGenerator

  Generates Java class versions of Groovy classes using ASM.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static boolean` | `ASM_DEBUG` |
    `static boolean` | `CREATE_DEBUG_INFO` |
    `static boolean` | `CREATE_LINE_NUMBER_INFO` |
    `static MethodCallerMultiAdapter` | `getField` |
    `static MethodCallerMultiAdapter` | `getGroovyObjectField` |
    `static String` | `MINIMUM_BYTECODE_VERSION` |
    `static MethodCallerMultiAdapter` | `setField` |
    `static MethodCallerMultiAdapter` | `setGroovyObjectField` |
    `static MethodCallerMultiAdapter` | `setProperty` |

    - ### Fields inherited from class org.codehaus.groovy.classgen.ClassGenerator

      `innerClasses`

    - ### Fields inherited from interface org.objectweb.asm.Opcodes

      `AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V9`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `AsmClassGenerator​(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, String sourceFile)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `addInnerClass​(ClassNode innerClass)` |
    `static int` | `argumentSize​(Expression arguments)` |
    `static boolean` | `containsSpreadExpression​(Expression arguments)` |
    `protected void` | `createInterfaceSyntheticStaticFields()` |
    `protected void` | `createSyntheticStaticFields()` |
    `void` | `despreadList​(List expressions, boolean wrap)` |
    `protected boolean` | `emptyArguments​(Expression arguments)` |
    `protected CompileUnit` | `getCompileUnit()` |
    `WriterController` | `getController()` |
    `static FieldNode` | `getDeclaredFieldOfCurrentClassOrAccessibleFieldOfSuper​(ClassNode accessingNode, ClassNode current, String fieldName, boolean skipCurrent)` |
    `SourceUnit` | `getSourceUnit()` |
    `static boolean` | `isFieldDirectlyAccessible​(FieldNode field, ClassNode clazz)` | Determines if the given class can directly access the given field (via `GETFIELD`, `GETSTATIC`, etc.
    `static boolean` | `isNullConstant​(Expression expr)` | Deprecated.
    `static boolean` | `isThisExpression​(Expression expression)` | Deprecated.
    `void` | `loadInstanceField​(FieldExpression fldExp)` | RHS instance field.
    `void` | `loadStaticField​(FieldExpression fldExp)` |
    `protected void` | `loadThisOrOwner()` | Loads either this object or if we're inside a closure then load the top level owner
    `void` | `loadWrapper​(Expression argument)` |
    `void` | `onLineNumber​(ASTNode statement, String message)` |
    `static boolean` | `samePackages​(String pkg1, String pkg2)` |
    `void` | `throwException​(String s)` |
    `void` | `visitAnnotations​(AnnotatedNode node)` | Note: ignore it.
    `void` | `visitArgumentlistExpression​(ArgumentListExpression ale)` |
    `void` | `visitArrayExpression​(ArrayExpression expression)` |
    `void` | `visitAssertStatement​(AssertStatement statement)` |
    `void` | `visitAttributeExpression​(AttributeExpression expression)` |
    `void` | `visitBinaryExpression​(BinaryExpression expression)` |
    `void` | `visitBitwiseNegationExpression​(BitwiseNegationExpression expression)` |
    `void` | `visitBlockStatement​(BlockStatement block)` |
    `void` | `visitBooleanExpression​(BooleanExpression expression)` |
    `void` | `visitBreakStatement​(BreakStatement statement)` |
    `void` | `visitBytecodeExpression​(BytecodeExpression cle)` |
    `void` | `visitBytecodeSequence​(BytecodeSequence bytecodeSequence)` |
    `void` | `visitCaseStatement​(CaseStatement statement)` |
    `void` | `visitCastExpression​(CastExpression castExpression)` |
    `void` | `visitCatchStatement​(CatchStatement statement)` |
    `void` | `visitClass​(ClassNode classNode)` | Visit a ClassNode.
    `void` | `visitClassExpression​(ClassExpression expression)` | load class object on stack
    `void` | `visitClosureExpression​(ClosureExpression expression)` |
    `void` | `visitClosureListExpression​(ClosureListExpression expression)` |
    `void` | `visitConstantExpression​(ConstantExpression expression)` | Generate byte code for constants
    `void` | `visitConstructor​(ConstructorNode node)` | Visit a ConstructorNode.
    `void` | `visitConstructorCallExpression​(ConstructorCallExpression call)` |
    `protected void` | `visitConstructorOrMethod​(MethodNode node, boolean isConstructor)` |
    `void` | `visitContinueStatement​(ContinueStatement statement)` |
    `void` | `visitDeclarationExpression​(DeclarationExpression expression)` |
    `void` | `visitDoWhileLoop​(DoWhileStatement loop)` |
    `void` | `visitExpressionStatement​(ExpressionStatement statement)` |
    `void` | `visitField​(FieldNode fieldNode)` | Visit a FieldNode.
    `void` | `visitFieldExpression​(FieldExpression expression)` |
    `void` | `visitForLoop​(ForStatement loop)` |
    `void` | `visitGenericType​(GenericsType genericsType)` |
    `void` | `visitGStringExpression​(GStringExpression expression)` |
    `void` | `visitIfElse​(IfStatement ifElse)` |
    `void` | `visitListExpression​(ListExpression expression)` |
    `void` | `visitMapEntryExpression​(MapEntryExpression expression)` |
    `void` | `visitMapExpression​(MapExpression expression)` |
    `void` | `visitMethod​(MethodNode node)` | Visit a MethodNode.
    `void` | `visitMethodCallExpression​(MethodCallExpression call)` |
    `void` | `visitMethodPointerExpression​(MethodPointerExpression expression)` |
    `void` | `visitNotExpression​(NotExpression expression)` |
    `void` | `visitPostfixExpression​(PostfixExpression expression)` |
    `void` | `visitPrefixExpression​(PrefixExpression expression)` |
    `void` | `visitProperty​(PropertyNode statement)` | Visit a PropertyNode.
    `void` | `visitPropertyExpression​(PropertyExpression expression)` |
    `void` | `visitRangeExpression​(RangeExpression expression)` |
    `void` | `visitReturnStatement​(ReturnStatement statement)` |
    `void` | `visitSpreadExpression​(SpreadExpression expression)` |
    `void` | `visitSpreadMapExpression​(SpreadMapExpression expression)` |
    `protected void` | `visitStatement​(Statement statement)` |
    `void` | `visitStaticMethodCallExpression​(StaticMethodCallExpression call)` |
    `void` | `visitSwitch​(SwitchStatement statement)` |
    `void` | `visitSynchronizedStatement​(SynchronizedStatement statement)` |
    `void` | `visitTernaryExpression​(TernaryExpression expression)` |
    `void` | `visitThrowStatement​(ThrowStatement statement)` |
    `void` | `visitTryCatchFinally​(TryCatchStatement statement)` |
    `void` | `visitTupleExpression​(TupleExpression expression)` |
    `void` | `visitUnaryMinusExpression​(UnaryMinusExpression expression)` |
    `void` | `visitUnaryPlusExpression​(UnaryPlusExpression expression)` |
    `void` | `visitVariableExpression​(VariableExpression expression)` | Visits a bare (unqualified) variable expression.
    `void` | `visitWhileLoop​(WhileStatement loop)` |

    - ### Methods inherited from class org.codehaus.groovy.classgen.ClassGenerator

      `getInnerClasses`

    - ### Methods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport

      `addError, visitClassCodeContainer, visitImports, visitObjectInitializerStatements, visitPackage`

    - ### Methods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport

      `visitEmptyStatement, visitListOfExpressions, visitShortTernaryExpression`

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

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

- - ### Field Detail

    - #### setField

          public static final MethodCallerMultiAdapter setField

    - #### getField

          public static final MethodCallerMultiAdapter getField

    - #### setGroovyObjectField

          public static final MethodCallerMultiAdapter setGroovyObjectField

    - #### getGroovyObjectField

          public static final MethodCallerMultiAdapter getGroovyObjectField

    - #### setProperty

          public static final MethodCallerMultiAdapter setProperty

    - #### CREATE_DEBUG_INFO

          public static final boolean CREATE_DEBUG_INFO

      See Also:
        Constant Field Values

    - #### CREATE_LINE_NUMBER_INFO

          public static final boolean CREATE_LINE_NUMBER_INFO

      See Also:
        Constant Field Values

    - #### ASM_DEBUG

          public static final boolean ASM_DEBUG

      See Also:
        Constant Field Values

    - #### MINIMUM_BYTECODE_VERSION

          public static final String MINIMUM_BYTECODE_VERSION

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AsmClassGenerator

          public AsmClassGenerator​(SourceUnit source,
                                   GeneratorContext context,
                                   org.objectweb.asm.ClassVisitor classVisitor,
                                   String sourceFile)

  - ### Method Detail

    - #### getSourceUnit

          public SourceUnit getSourceUnit()

      Overrides:
        `getSourceUnit` in class `ClassGenerator`

    - #### getController

          public WriterController getController()

    - #### visitClass

          public void visitClass​(ClassNode classNode)

      Description copied from interface: `GroovyClassVisitor`
      Visit a ClassNode.
      Specified by:
        `visitClass` in interface `GroovyClassVisitor`
      Overrides:
        `visitClass` in class `ClassCodeVisitorSupport`

    - #### visitGenericType

          public void visitGenericType​(GenericsType genericsType)

    - #### visitConstructorOrMethod

          protected void visitConstructorOrMethod​(MethodNode node,
                                                  boolean isConstructor)

      Overrides:
        `visitConstructorOrMethod` in class `ClassCodeVisitorSupport`

    - #### visitConstructor

          public void visitConstructor​(ConstructorNode node)

      Description copied from interface: `GroovyClassVisitor`
      Visit a ConstructorNode.
      Specified by:
        `visitConstructor` in interface `GroovyClassVisitor`
      Overrides:
        `visitConstructor` in class `ClassCodeVisitorSupport`

    - #### visitMethod

          public void visitMethod​(MethodNode node)

      Description copied from interface: `GroovyClassVisitor`
      Visit a MethodNode.
      Specified by:
        `visitMethod` in interface `GroovyClassVisitor`
      Overrides:
        `visitMethod` in class `ClassCodeVisitorSupport`

    - #### visitField

          public void visitField​(FieldNode fieldNode)

      Description copied from interface: `GroovyClassVisitor`
      Visit a FieldNode.
      Specified by:
        `visitField` in interface `GroovyClassVisitor`
      Overrides:
        `visitField` in class `ClassCodeVisitorSupport`

    - #### visitProperty

          public void visitProperty​(PropertyNode statement)

      Description copied from interface: `GroovyClassVisitor`
      Visit a PropertyNode.
      Specified by:
        `visitProperty` in interface `GroovyClassVisitor`
      Overrides:
        `visitProperty` in class `ClassCodeVisitorSupport`

    - #### visitStatement

          protected void visitStatement​(Statement statement)

      Overrides:
        `visitStatement` in class `ClassCodeVisitorSupport`

    - #### visitCatchStatement

          public void visitCatchStatement​(CatchStatement statement)

      Specified by:
        `visitCatchStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitCatchStatement` in class `ClassCodeVisitorSupport`

    - #### visitBlockStatement

          public void visitBlockStatement​(BlockStatement block)

      Specified by:
        `visitBlockStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBlockStatement` in class `ClassCodeVisitorSupport`

    - #### visitForLoop

          public void visitForLoop​(ForStatement loop)

      Specified by:
        `visitForLoop` in interface `GroovyCodeVisitor`
      Overrides:
        `visitForLoop` in class `ClassCodeVisitorSupport`

    - #### visitWhileLoop

          public void visitWhileLoop​(WhileStatement loop)

      Specified by:
        `visitWhileLoop` in interface `GroovyCodeVisitor`
      Overrides:
        `visitWhileLoop` in class `ClassCodeVisitorSupport`

    - #### visitDoWhileLoop

          public void visitDoWhileLoop​(DoWhileStatement loop)

      Specified by:
        `visitDoWhileLoop` in interface `GroovyCodeVisitor`
      Overrides:
        `visitDoWhileLoop` in class `ClassCodeVisitorSupport`

    - #### visitIfElse

          public void visitIfElse​(IfStatement ifElse)

      Specified by:
        `visitIfElse` in interface `GroovyCodeVisitor`
      Overrides:
        `visitIfElse` in class `ClassCodeVisitorSupport`

    - #### visitAssertStatement

          public void visitAssertStatement​(AssertStatement statement)

      Specified by:
        `visitAssertStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitAssertStatement` in class `ClassCodeVisitorSupport`

    - #### visitTryCatchFinally

          public void visitTryCatchFinally​(TryCatchStatement statement)

      Specified by:
        `visitTryCatchFinally` in interface `GroovyCodeVisitor`
      Overrides:
        `visitTryCatchFinally` in class `ClassCodeVisitorSupport`

    - #### visitSwitch

          public void visitSwitch​(SwitchStatement statement)

      Specified by:
        `visitSwitch` in interface `GroovyCodeVisitor`
      Overrides:
        `visitSwitch` in class `ClassCodeVisitorSupport`

    - #### visitCaseStatement

          public void visitCaseStatement​(CaseStatement statement)

      Specified by:
        `visitCaseStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitCaseStatement` in class `ClassCodeVisitorSupport`

    - #### visitBreakStatement

          public void visitBreakStatement​(BreakStatement statement)

      Specified by:
        `visitBreakStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBreakStatement` in class `ClassCodeVisitorSupport`

    - #### visitContinueStatement

          public void visitContinueStatement​(ContinueStatement statement)

      Specified by:
        `visitContinueStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitContinueStatement` in class `ClassCodeVisitorSupport`

    - #### visitSynchronizedStatement

          public void visitSynchronizedStatement​(SynchronizedStatement statement)

      Specified by:
        `visitSynchronizedStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitSynchronizedStatement` in class `ClassCodeVisitorSupport`

    - #### visitThrowStatement

          public void visitThrowStatement​(ThrowStatement statement)

      Specified by:
        `visitThrowStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitThrowStatement` in class `ClassCodeVisitorSupport`

    - #### visitReturnStatement

          public void visitReturnStatement​(ReturnStatement statement)

      Specified by:
        `visitReturnStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitReturnStatement` in class `ClassCodeVisitorSupport`

    - #### visitExpressionStatement

          public void visitExpressionStatement​(ExpressionStatement statement)

      Specified by:
        `visitExpressionStatement` in interface `GroovyCodeVisitor`
      Overrides:
        `visitExpressionStatement` in class `ClassCodeVisitorSupport`

    - #### visitTernaryExpression

          public void visitTernaryExpression​(TernaryExpression expression)

      Specified by:
        `visitTernaryExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitTernaryExpression` in class `CodeVisitorSupport`

    - #### visitDeclarationExpression

          public void visitDeclarationExpression​(DeclarationExpression expression)

      Specified by:
        `visitDeclarationExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitDeclarationExpression` in class `ClassCodeVisitorSupport`

    - #### visitBinaryExpression

          public void visitBinaryExpression​(BinaryExpression expression)

      Specified by:
        `visitBinaryExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBinaryExpression` in class `CodeVisitorSupport`

    - #### visitPostfixExpression

          public void visitPostfixExpression​(PostfixExpression expression)

      Specified by:
        `visitPostfixExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitPostfixExpression` in class `CodeVisitorSupport`

    - #### throwException

          public void throwException​(String s)

    - #### visitPrefixExpression

          public void visitPrefixExpression​(PrefixExpression expression)

      Specified by:
        `visitPrefixExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitPrefixExpression` in class `CodeVisitorSupport`

    - #### visitClosureExpression

          public void visitClosureExpression​(ClosureExpression expression)

      Specified by:
        `visitClosureExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitClosureExpression` in class `CodeVisitorSupport`

    - #### loadThisOrOwner

          protected void loadThisOrOwner()

      Loads either this object or if we're inside a closure then load the top level owner

    - #### visitConstantExpression

          public void visitConstantExpression​(ConstantExpression expression)

      Generate byte code for constants
      Specified by:
        `visitConstantExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitConstantExpression` in class `CodeVisitorSupport`
      See Also:
        Class field types

    - #### visitSpreadExpression

          public void visitSpreadExpression​(SpreadExpression expression)

      Specified by:
        `visitSpreadExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitSpreadExpression` in class `CodeVisitorSupport`

    - #### visitSpreadMapExpression

          public void visitSpreadMapExpression​(SpreadMapExpression expression)

      Specified by:
        `visitSpreadMapExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitSpreadMapExpression` in class `CodeVisitorSupport`

    - #### visitMethodPointerExpression

          public void visitMethodPointerExpression​(MethodPointerExpression expression)

      Specified by:
        `visitMethodPointerExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitMethodPointerExpression` in class `CodeVisitorSupport`

    - #### visitUnaryMinusExpression

          public void visitUnaryMinusExpression​(UnaryMinusExpression expression)

      Specified by:
        `visitUnaryMinusExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitUnaryMinusExpression` in class `CodeVisitorSupport`

    - #### visitUnaryPlusExpression

          public void visitUnaryPlusExpression​(UnaryPlusExpression expression)

      Specified by:
        `visitUnaryPlusExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitUnaryPlusExpression` in class `CodeVisitorSupport`

    - #### visitBitwiseNegationExpression

          public void visitBitwiseNegationExpression​(BitwiseNegationExpression expression)

      Specified by:
        `visitBitwiseNegationExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBitwiseNegationExpression` in class `CodeVisitorSupport`

    - #### visitCastExpression

          public void visitCastExpression​(CastExpression castExpression)

      Specified by:
        `visitCastExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitCastExpression` in class `CodeVisitorSupport`

    - #### visitNotExpression

          public void visitNotExpression​(NotExpression expression)

      Specified by:
        `visitNotExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitNotExpression` in class `CodeVisitorSupport`

    - #### visitBooleanExpression

          public void visitBooleanExpression​(BooleanExpression expression)

      Specified by:
        `visitBooleanExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBooleanExpression` in class `CodeVisitorSupport`

    - #### visitMethodCallExpression

          public void visitMethodCallExpression​(MethodCallExpression call)

      Specified by:
        `visitMethodCallExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitMethodCallExpression` in class `CodeVisitorSupport`

    - #### emptyArguments

          protected boolean emptyArguments​(Expression arguments)

    - #### containsSpreadExpression

          public static boolean containsSpreadExpression​(Expression arguments)

    - #### argumentSize

          public static int argumentSize​(Expression arguments)

    - #### visitStaticMethodCallExpression

          public void visitStaticMethodCallExpression​(StaticMethodCallExpression call)

      Specified by:
        `visitStaticMethodCallExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitStaticMethodCallExpression` in class `CodeVisitorSupport`

    - #### isNullConstant

          @Deprecated
          public static boolean isNullConstant​(Expression expr)

      Deprecated.

    - #### visitConstructorCallExpression

          public void visitConstructorCallExpression​(ConstructorCallExpression call)

      Specified by:
        `visitConstructorCallExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitConstructorCallExpression` in class `CodeVisitorSupport`

    - #### samePackages

          public static boolean samePackages​(String pkg1,
                                             String pkg2)

    - #### isFieldDirectlyAccessible

          public static boolean isFieldDirectlyAccessible​(FieldNode field,
                                                          ClassNode clazz)

      Determines if the given class can directly access the given field (via `GETFIELD`, `GETSTATIC`, etc. bytecode instructions).

    - #### getDeclaredFieldOfCurrentClassOrAccessibleFieldOfSuper

          public static FieldNode getDeclaredFieldOfCurrentClassOrAccessibleFieldOfSuper​(ClassNode accessingNode,
                                                                                         ClassNode current,
                                                                                         String fieldName,
                                                                                         boolean skipCurrent)

    - #### visitPropertyExpression

          public void visitPropertyExpression​(PropertyExpression expression)

      Specified by:
        `visitPropertyExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitPropertyExpression` in class `CodeVisitorSupport`

    - #### visitAttributeExpression

          public void visitAttributeExpression​(AttributeExpression expression)

      Specified by:
        `visitAttributeExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitAttributeExpression` in class `CodeVisitorSupport`

    - #### visitFieldExpression

          public void visitFieldExpression​(FieldExpression expression)

      Specified by:
        `visitFieldExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitFieldExpression` in class `CodeVisitorSupport`

    - #### loadStaticField

          public void loadStaticField​(FieldExpression fldExp)

      Parameters:
        `fldExp` -

    - #### loadInstanceField

          public void loadInstanceField​(FieldExpression fldExp)

      RHS instance field. should move most of the code in the BytecodeHelper
      Parameters:
        `fldExp` -

    - #### visitVariableExpression

          public void visitVariableExpression​(VariableExpression expression)

      Visits a bare (unqualified) variable expression.
      Specified by:
        `visitVariableExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitVariableExpression` in class `CodeVisitorSupport`

    - #### createInterfaceSyntheticStaticFields

          protected void createInterfaceSyntheticStaticFields()

    - #### createSyntheticStaticFields

          protected void createSyntheticStaticFields()

    - #### visitClassExpression

          public void visitClassExpression​(ClassExpression expression)

      load class object on stack
      Specified by:
        `visitClassExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitClassExpression` in class `CodeVisitorSupport`

    - #### visitRangeExpression

          public void visitRangeExpression​(RangeExpression expression)

      Specified by:
        `visitRangeExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitRangeExpression` in class `CodeVisitorSupport`

    - #### visitMapEntryExpression

          public void visitMapEntryExpression​(MapEntryExpression expression)

      Specified by:
        `visitMapEntryExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitMapEntryExpression` in class `CodeVisitorSupport`

    - #### visitMapExpression

          public void visitMapExpression​(MapExpression expression)

      Specified by:
        `visitMapExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitMapExpression` in class `CodeVisitorSupport`

    - #### visitArgumentlistExpression

          public void visitArgumentlistExpression​(ArgumentListExpression ale)

      Specified by:
        `visitArgumentlistExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitArgumentlistExpression` in class `CodeVisitorSupport`

    - #### despreadList

          public void despreadList​(List expressions,
                                   boolean wrap)

    - #### visitTupleExpression

          public void visitTupleExpression​(TupleExpression expression)

      Specified by:
        `visitTupleExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitTupleExpression` in class `CodeVisitorSupport`

    - #### loadWrapper

          public void loadWrapper​(Expression argument)

    - #### visitArrayExpression

          public void visitArrayExpression​(ArrayExpression expression)

      Specified by:
        `visitArrayExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitArrayExpression` in class `CodeVisitorSupport`

    - #### visitClosureListExpression

          public void visitClosureListExpression​(ClosureListExpression expression)

      Specified by:
        `visitClosureListExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitClosureListExpression` in class `CodeVisitorSupport`

    - #### visitBytecodeSequence

          public void visitBytecodeSequence​(BytecodeSequence bytecodeSequence)

      Overrides:
        `visitBytecodeSequence` in class `ClassGenerator`

    - #### visitListExpression

          public void visitListExpression​(ListExpression expression)

      Specified by:
        `visitListExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitListExpression` in class `CodeVisitorSupport`

    - #### visitGStringExpression

          public void visitGStringExpression​(GStringExpression expression)

      Specified by:
        `visitGStringExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitGStringExpression` in class `CodeVisitorSupport`

    - #### visitAnnotations

          public void visitAnnotations​(AnnotatedNode node)

      Note: ignore it. Annotation generation needs the current visitor.
      Overrides:
        `visitAnnotations` in class `ClassCodeVisitorSupport`

    - #### visitBytecodeExpression

          public void visitBytecodeExpression​(BytecodeExpression cle)

      Specified by:
        `visitBytecodeExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBytecodeExpression` in class `CodeVisitorSupport`

    - #### isThisExpression

          @Deprecated
          public static boolean isThisExpression​(Expression expression)

      Deprecated.

    - #### onLineNumber

          public void onLineNumber​(ASTNode statement,
                                   String message)

    - #### getCompileUnit

          protected CompileUnit getCompileUnit()

    - #### addInnerClass

          public boolean addInnerClass​(ClassNode innerClass)