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, org.objectweb.asm.Opcodes

      public class AsmClassGenerator
      extends ClassGenerator

  Generates Java class versions of Groovy classes using ASM.
  Version:
    $Revision$
  Author:
    James Strachan, Bing Ran, Jochen Theodorou, Alex Popescu, Alex Tkachman

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static boolean` | `ASM_DEBUG`
    `static boolean` | `CREATE_DEBUG_INFO`
    `static boolean` | `CREATE_LINE_NUMBER_INFO`
    `static MethodCallerMultiAdapter` | `getField`
    `static MethodCallerMultiAdapter` | `getGroovyObjectField`
    `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_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASM5, 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, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8`

  - ### Constructor Summary

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

  - ### Method Summary

    Methods
    Modifier and Type | Method and 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()`
    `SourceUnit` | `getSourceUnit()`
    `static boolean` | `isNullConstant(Expression expr)`
    `static boolean` | `isThisExpression(Expression expression)`
    `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)`
    `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)` return a primitive boolean value of the BooleanExpression.
    `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

    - #### getField

          public static final MethodCallerMultiAdapter getField

    - #### 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

  - ### 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)

      return a primitive boolean value of the BooleanExpression.
      Specified by:
        `visitBooleanExpression` in interface `GroovyCodeVisitor`
      Overrides:
        `visitBooleanExpression` in class `CodeVisitorSupport`
      Parameters:
        `expression` -

    - #### 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

          public static boolean isNullConstant(Expression expr)

    - #### visitConstructorCallExpression

          public void visitConstructorCallExpression(ConstructorCallExpression call)

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

    - #### 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

          public static boolean isThisExpression(Expression expression)

    - #### onLineNumber

          public void onLineNumber(ASTNode statement,
                          String message)

    - #### getCompileUnit

          protected CompileUnit getCompileUnit()

    - #### addInnerClass

          public boolean addInnerClass(ClassNode innerClass)