Groovy Documentation

## org.codehaus.groovy.classgen
[Java] 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

    public class AsmClassGenerator
    extends ClassGenerator

Generates Java class versions of Groovy classes using ASM.

Authors:
  James Strachan
  Bing Ran
  Jochen Theodorou
  Alex Popescu
  Alex Tkachman

Version:
  \$Revision\$

Field Summary
`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 ClassGenerator
innerClasses

Constructor Summary
`AsmClassGenerator(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, java.lang.String sourceFile)`

Method Summary
`boolean` | `addInnerClass(ClassNode innerClass)`
`static int` | `argumentSize(Expression arguments)`
`static boolean` | `containsSpreadExpression(Expression arguments)`
`protected void` | `createInterfaceSyntheticStaticFields()` load class object on stack
`protected void` | `createSyntheticStaticFields()`
`void` | `despreadList(java.util.List expressions, boolean wrap)`
`protected boolean` | `emptyArguments(Expression arguments)`
`protected CompileUnit` | `getCompileUnit()`
`WriterController` | `getController()`
`SourceUnit` | `getSourceUnit()`
`static boolean` | `isThisExpression(Expression expression)`
`void` | `loadInstanceField(FieldExpression fldExp)`
`void` | `loadStaticField(FieldExpression fldExp)`
`protected void` | `loadThisOrOwner()`
`void` | `loadWrapper(Expression argument)`
`void` | `onLineNumber(ASTNode statement, java.lang.String message)`
`void` | `throwException(java.lang.String s)`
`void` | `visitAnnotations(AnnotatedNode node)`
`void` | `visitArgumentlistExpression(ArgumentListExpression ale)`
`void` | `visitArrayExpression(ArrayExpression expression)`
`void` | `visitAssertStatement(AssertStatement statement)`
`void` | `visitAttributeExpression(AttributeExpression expression)` RHS instance field. should move most of the code in the BytecodeHelper
`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)` Note: ignore it.
`void` | `visitCaseStatement(CaseStatement statement)`
`void` | `visitCastExpression(CastExpression castExpression)`
`void` | `visitCatchStatement(CatchStatement statement)`
`void` | `visitClass(ClassNode classNode)`
`void` | `visitClassExpression(ClassExpression expression)`
`void` | `visitClosureExpression(ClosureExpression expression)`
`void` | `visitClosureListExpression(ClosureListExpression expression)`
`void` | `visitConstantExpression(ConstantExpression expression)`
`void` | `visitConstructor(ConstructorNode node)`
`void` | `visitConstructorCallExpression(ConstructorCallExpression call)`
`protected void` | `visitConstructorOrMethod(MethodNode node, boolean isConstructor)`
`void` | `visitContinueStatement(ContinueStatement statement)`
`void` | `visitDeclarationExpression(DeclarationExpression expression)` Loads either this object or if we're inside a closure then load the top level owner
`void` | `visitDoWhileLoop(DoWhileStatement loop)`
`void` | `visitExpressionStatement(ExpressionStatement statement)`
`void` | `visitField(FieldNode fieldNode)`
`void` | `visitFieldExpression(FieldExpression expression)`
`void` | `visitForLoop(ForStatement loop)`
`void` | `visitGStringExpression(GStringExpression expression)`
`void` | `visitGenericType(GenericsType genericsType)`
`void` | `visitIfElse(IfStatement ifElse)`
`void` | `visitListExpression(ListExpression expression)`
`void` | `visitMapEntryExpression(MapEntryExpression expression)`
`void` | `visitMapExpression(MapExpression expression)`
`void` | `visitMethod(MethodNode node)`
`void` | `visitMethodCallExpression(MethodCallExpression call)`
`void` | `visitMethodPointerExpression(MethodPointerExpression expression)`
`void` | `visitNotExpression(NotExpression expression)`
`void` | `visitPostfixExpression(PostfixExpression expression)`
`void` | `visitPrefixExpression(PrefixExpression expression)`
`void` | `visitProperty(PropertyNode statement)`
`void` | `visitPropertyExpression(PropertyExpression expression)` @param fldExp
`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)`
`void` | `visitWhileLoop(WhileStatement loop)`

Methods inherited from class ClassGenerator
getInnerClasses, getSourceUnit, visitBytecodeSequence

Methods inherited from class ClassCodeVisitorSupport

addError, getSourceUnit, visitAnnotations, visitAssertStatement, visitBlockStatement, visitBreakStatement, visitCaseStatement, visitCatchStatement, visitClass, visitClassCodeContainer, visitConstructor, visitConstructorOrMethod, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitExpressionStatement, visitField, visitForLoop, visitIfElse, visitImports, visitMethod, visitObjectInitializerStatements, visitPackage, visitProperty, visitReturnStatement, visitStatement, visitSwitch, visitSynchronizedStatement, visitThrowStatement, visitTryCatchFinally, visitWhileLoop

Methods inherited from class CodeVisitorSupport

visitArgumentlistExpression, visitArrayExpression, visitAssertStatement, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBlockStatement, visitBooleanExpression, visitBreakStatement, visitBytecodeExpression, visitCaseStatement, visitCastExpression, visitCatchStatement, visitClassExpression, visitClosureExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitEmptyStatement, visitExpressionStatement, visitFieldExpression, visitForLoop, visitGStringExpression, visitIfElse, visitListExpression, visitListOfExpressions, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitReturnStatement, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitSwitch, visitSynchronizedStatement, visitTernaryExpression, visitThrowStatement, visitTryCatchFinally, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression, visitWhileLoop

Methods inherited from class java.lang.Object
java.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()

Field Detail

### ASM_DEBUG

    public static final boolean ASM_DEBUG

### CREATE_DEBUG_INFO

    public static final boolean CREATE_DEBUG_INFO

### CREATE_LINE_NUMBER_INFO

    public static final boolean CREATE_LINE_NUMBER_INFO

### getField

    public static final MethodCallerMultiAdapter getField

### getGroovyObjectField

    public static final MethodCallerMultiAdapter getGroovyObjectField

### setProperty

    public static final MethodCallerMultiAdapter setProperty

Constructor Detail

### AsmClassGenerator

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

Method Detail

### addInnerClass

    public boolean addInnerClass(ClassNode innerClass)

### argumentSize

    public static int argumentSize(Expression arguments)

### containsSpreadExpression

    public static boolean containsSpreadExpression(Expression arguments)

### createInterfaceSyntheticStaticFields

    protected void createInterfaceSyntheticStaticFields()

  load class object on stack

### createSyntheticStaticFields

    protected void createSyntheticStaticFields()

### despreadList

    public void despreadList(java.util.List expressions, boolean wrap)

### emptyArguments

    protected boolean emptyArguments(Expression arguments)

### getCompileUnit

    protected CompileUnit getCompileUnit()

### getController

    public WriterController getController()

### getSourceUnit

    public SourceUnit getSourceUnit()

### isThisExpression

    public static boolean isThisExpression(Expression expression)

### loadInstanceField

    public void loadInstanceField(FieldExpression fldExp)

### loadStaticField

    public void loadStaticField(FieldExpression fldExp)

### loadThisOrOwner

    protected void loadThisOrOwner()

### loadWrapper

    public void loadWrapper(Expression argument)

### onLineNumber

    public void onLineNumber(ASTNode statement, java.lang.String message)

### throwException

    public void throwException(java.lang.String s)

### visitAnnotations

    public void visitAnnotations(AnnotatedNode node)

### visitArgumentlistExpression

    public void visitArgumentlistExpression(ArgumentListExpression ale)

### visitArrayExpression

    public void visitArrayExpression(ArrayExpression expression)

### visitAssertStatement

    public void visitAssertStatement(AssertStatement statement)

### visitAttributeExpression

    public void visitAttributeExpression(AttributeExpression expression)

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

### visitBinaryExpression

    public void visitBinaryExpression(BinaryExpression expression)

### visitBitwiseNegationExpression

    public void visitBitwiseNegationExpression(BitwiseNegationExpression expression)

### visitBlockStatement

    public void visitBlockStatement(BlockStatement block)

### visitBooleanExpression

    public void visitBooleanExpression(BooleanExpression expression)

### visitBreakStatement

    public void visitBreakStatement(BreakStatement statement)

### visitBytecodeExpression

    public void visitBytecodeExpression(BytecodeExpression cle)

### visitBytecodeSequence

    public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)

  Note: ignore it. Annotation generation needs the current visitor.

### visitCaseStatement

    public void visitCaseStatement(CaseStatement statement)

### visitCastExpression

    public void visitCastExpression(CastExpression castExpression)

### visitCatchStatement

    controller.getStatementWriter().writeTryCatchFinally(statement);
    public void visitCatchStatement(CatchStatement statement)

### visitClass

    public void visitClass(ClassNode classNode)

### visitClassExpression

    public void visitClassExpression(ClassExpression expression)

### visitClosureExpression

    public void visitClosureExpression(ClosureExpression expression)

### visitClosureListExpression

    public void visitClosureListExpression(ClosureListExpression expression)

### visitConstantExpression

    public void visitConstantExpression(ConstantExpression expression)

### visitConstructor

    public void visitConstructor(ConstructorNode node)

### visitConstructorCallExpression

    public void visitConstructorCallExpression(ConstructorCallExpression call)

### visitConstructorOrMethod

    protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor)

### visitContinueStatement

    public void visitContinueStatement(ContinueStatement statement)

### visitDeclarationExpression

    public void visitDeclarationExpression(DeclarationExpression expression)

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

### visitDoWhileLoop

    public void visitDoWhileLoop(DoWhileStatement loop)

### visitExpressionStatement

    public void visitExpressionStatement(ExpressionStatement statement)

### visitField

    public void visitField(FieldNode fieldNode)

### visitFieldExpression

    public void visitFieldExpression(FieldExpression expression)

### visitForLoop

    public void visitForLoop(ForStatement loop)

### visitGStringExpression

    public void visitGStringExpression(GStringExpression expression)

### visitGenericType

    public void visitGenericType(GenericsType genericsType)

### visitIfElse

    public void visitIfElse(IfStatement ifElse)

### visitListExpression

    public void visitListExpression(ListExpression expression)

### visitMapEntryExpression

    public void visitMapEntryExpression(MapEntryExpression expression)

### visitMapExpression

    public void visitMapExpression(MapExpression expression)

### visitMethod

    public void visitMethod(MethodNode node)

### visitMethodCallExpression

    public void visitMethodCallExpression(MethodCallExpression call)

### visitMethodPointerExpression

    public void visitMethodPointerExpression(MethodPointerExpression expression)

### visitNotExpression

    public void visitNotExpression(NotExpression expression)

### visitPostfixExpression

    public void visitPostfixExpression(PostfixExpression expression)

### visitPrefixExpression

    public void visitPrefixExpression(PrefixExpression expression)

### visitProperty

    public void visitProperty(PropertyNode statement)

### visitPropertyExpression

    public void visitPropertyExpression(PropertyExpression expression)

  Parameters:
    fldExp

### visitRangeExpression

    public void visitRangeExpression(RangeExpression expression)

### visitReturnStatement

    public void visitReturnStatement(ReturnStatement statement)

### visitSpreadExpression

    public void visitSpreadExpression(SpreadExpression expression)

### visitSpreadMapExpression

    public void visitSpreadMapExpression(SpreadMapExpression expression)

### visitStatement

    protected void visitStatement(Statement statement)

### visitStaticMethodCallExpression

    public void visitStaticMethodCallExpression(StaticMethodCallExpression call)

### visitSwitch

    public void visitSwitch(SwitchStatement statement)

### visitSynchronizedStatement

    public void visitSynchronizedStatement(SynchronizedStatement statement)

### visitTernaryExpression

    public void visitTernaryExpression(TernaryExpression expression)

### visitThrowStatement

    public void visitThrowStatement(ThrowStatement statement)

### visitTryCatchFinally

    public void visitTryCatchFinally(TryCatchStatement statement)

### visitTupleExpression

    public void visitTupleExpression(TupleExpression expression)

### visitUnaryMinusExpression

    public void visitUnaryMinusExpression(UnaryMinusExpression expression)

### visitUnaryPlusExpression

    public void visitUnaryPlusExpression(UnaryPlusExpression expression)

### visitVariableExpression

    public void visitVariableExpression(VariableExpression expression)

### visitWhileLoop

    public void visitWhileLoop(WhileStatement loop)

Groovy Documentation