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 booleanASM_DEBUGstatic booleanCREATE_DEBUG_INFOstatic booleanCREATE_LINE_NUMBER_INFOstatic MethodCallerMultiAdaptergetFieldstatic MethodCallerMultiAdaptergetGroovyObjectFieldstatic java.lang.StringMINIMUM_BYTECODE_VERSIONstatic MethodCallerMultiAdaptersetFieldstatic MethodCallerMultiAdaptersetGroovyObjectFieldstatic MethodCallerMultiAdaptersetProperty-
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, V20, V21, V9
-
-
Constructor Summary
Constructors Constructor Description AsmClassGenerator(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, java.lang.String sourceFile)
-
Method Summary
-
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
-
-
-
-
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 java.lang.String MINIMUM_BYTECODE_VERSION
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AsmClassGenerator
public AsmClassGenerator(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, java.lang.String sourceFile)
-
-
Method Detail
-
getSourceUnit
public SourceUnit getSourceUnit()
- Overrides:
getSourceUnitin classClassGenerator
-
getController
public WriterController getController()
-
visitClass
public void visitClass(ClassNode classNode)
Description copied from interface:GroovyClassVisitorVisit a ClassNode.- Specified by:
visitClassin interfaceGroovyClassVisitor- Overrides:
visitClassin classClassCodeVisitorSupport
-
visitGenericType
public void visitGenericType(GenericsType genericsType)
-
visitConstructorOrMethod
protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor)
- Overrides:
visitConstructorOrMethodin classClassCodeVisitorSupport
-
visitConstructor
public void visitConstructor(ConstructorNode node)
Description copied from interface:GroovyClassVisitorVisit a ConstructorNode.- Specified by:
visitConstructorin interfaceGroovyClassVisitor- Overrides:
visitConstructorin classClassCodeVisitorSupport
-
visitMethod
public void visitMethod(MethodNode node)
Description copied from interface:GroovyClassVisitorVisit a MethodNode.- Specified by:
visitMethodin interfaceGroovyClassVisitor- Overrides:
visitMethodin classClassCodeVisitorSupport
-
visitField
public void visitField(FieldNode fieldNode)
Description copied from interface:GroovyClassVisitorVisit a FieldNode.- Specified by:
visitFieldin interfaceGroovyClassVisitor- Overrides:
visitFieldin classClassCodeVisitorSupport
-
visitProperty
public void visitProperty(PropertyNode statement)
Description copied from interface:GroovyClassVisitorVisit a PropertyNode.- Specified by:
visitPropertyin interfaceGroovyClassVisitor- Overrides:
visitPropertyin classClassCodeVisitorSupport
-
visitStatement
protected void visitStatement(Statement statement)
- Overrides:
visitStatementin classClassCodeVisitorSupport
-
visitCatchStatement
public void visitCatchStatement(CatchStatement statement)
- Specified by:
visitCatchStatementin interfaceGroovyCodeVisitor- Overrides:
visitCatchStatementin classClassCodeVisitorSupport
-
visitBlockStatement
public void visitBlockStatement(BlockStatement block)
- Specified by:
visitBlockStatementin interfaceGroovyCodeVisitor- Overrides:
visitBlockStatementin classClassCodeVisitorSupport
-
visitForLoop
public void visitForLoop(ForStatement loop)
- Specified by:
visitForLoopin interfaceGroovyCodeVisitor- Overrides:
visitForLoopin classClassCodeVisitorSupport
-
visitWhileLoop
public void visitWhileLoop(WhileStatement loop)
- Specified by:
visitWhileLoopin interfaceGroovyCodeVisitor- Overrides:
visitWhileLoopin classClassCodeVisitorSupport
-
visitDoWhileLoop
public void visitDoWhileLoop(DoWhileStatement loop)
- Specified by:
visitDoWhileLoopin interfaceGroovyCodeVisitor- Overrides:
visitDoWhileLoopin classClassCodeVisitorSupport
-
visitIfElse
public void visitIfElse(IfStatement ifElse)
- Specified by:
visitIfElsein interfaceGroovyCodeVisitor- Overrides:
visitIfElsein classClassCodeVisitorSupport
-
visitAssertStatement
public void visitAssertStatement(AssertStatement statement)
- Specified by:
visitAssertStatementin interfaceGroovyCodeVisitor- Overrides:
visitAssertStatementin classClassCodeVisitorSupport
-
visitTryCatchFinally
public void visitTryCatchFinally(TryCatchStatement statement)
- Specified by:
visitTryCatchFinallyin interfaceGroovyCodeVisitor- Overrides:
visitTryCatchFinallyin classClassCodeVisitorSupport
-
visitSwitch
public void visitSwitch(SwitchStatement statement)
- Specified by:
visitSwitchin interfaceGroovyCodeVisitor- Overrides:
visitSwitchin classClassCodeVisitorSupport
-
visitCaseStatement
public void visitCaseStatement(CaseStatement statement)
- Specified by:
visitCaseStatementin interfaceGroovyCodeVisitor- Overrides:
visitCaseStatementin classClassCodeVisitorSupport
-
visitBreakStatement
public void visitBreakStatement(BreakStatement statement)
- Specified by:
visitBreakStatementin interfaceGroovyCodeVisitor- Overrides:
visitBreakStatementin classClassCodeVisitorSupport
-
visitContinueStatement
public void visitContinueStatement(ContinueStatement statement)
- Specified by:
visitContinueStatementin interfaceGroovyCodeVisitor- Overrides:
visitContinueStatementin classClassCodeVisitorSupport
-
visitSynchronizedStatement
public void visitSynchronizedStatement(SynchronizedStatement statement)
- Specified by:
visitSynchronizedStatementin interfaceGroovyCodeVisitor- Overrides:
visitSynchronizedStatementin classClassCodeVisitorSupport
-
visitThrowStatement
public void visitThrowStatement(ThrowStatement statement)
- Specified by:
visitThrowStatementin interfaceGroovyCodeVisitor- Overrides:
visitThrowStatementin classClassCodeVisitorSupport
-
visitReturnStatement
public void visitReturnStatement(ReturnStatement statement)
- Specified by:
visitReturnStatementin interfaceGroovyCodeVisitor- Overrides:
visitReturnStatementin classClassCodeVisitorSupport
-
visitExpressionStatement
public void visitExpressionStatement(ExpressionStatement statement)
- Specified by:
visitExpressionStatementin interfaceGroovyCodeVisitor- Overrides:
visitExpressionStatementin classClassCodeVisitorSupport
-
visitTernaryExpression
public void visitTernaryExpression(TernaryExpression expression)
- Specified by:
visitTernaryExpressionin interfaceGroovyCodeVisitor- Overrides:
visitTernaryExpressionin classCodeVisitorSupport
-
visitDeclarationExpression
public void visitDeclarationExpression(DeclarationExpression expression)
- Specified by:
visitDeclarationExpressionin interfaceGroovyCodeVisitor- Overrides:
visitDeclarationExpressionin classClassCodeVisitorSupport
-
visitBinaryExpression
public void visitBinaryExpression(BinaryExpression expression)
- Specified by:
visitBinaryExpressionin interfaceGroovyCodeVisitor- Overrides:
visitBinaryExpressionin classCodeVisitorSupport
-
visitPostfixExpression
public void visitPostfixExpression(PostfixExpression expression)
- Specified by:
visitPostfixExpressionin interfaceGroovyCodeVisitor- Overrides:
visitPostfixExpressionin classCodeVisitorSupport
-
throwException
public void throwException(java.lang.String s)
-
visitPrefixExpression
public void visitPrefixExpression(PrefixExpression expression)
- Specified by:
visitPrefixExpressionin interfaceGroovyCodeVisitor- Overrides:
visitPrefixExpressionin classCodeVisitorSupport
-
visitClosureExpression
public void visitClosureExpression(ClosureExpression expression)
- Specified by:
visitClosureExpressionin interfaceGroovyCodeVisitor- Overrides:
visitClosureExpressionin classCodeVisitorSupport
-
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:
visitConstantExpressionin interfaceGroovyCodeVisitor- Overrides:
visitConstantExpressionin classCodeVisitorSupport- See Also:
- Class field types
-
visitSpreadExpression
public void visitSpreadExpression(SpreadExpression expression)
- Specified by:
visitSpreadExpressionin interfaceGroovyCodeVisitor- Overrides:
visitSpreadExpressionin classCodeVisitorSupport
-
visitSpreadMapExpression
public void visitSpreadMapExpression(SpreadMapExpression expression)
- Specified by:
visitSpreadMapExpressionin interfaceGroovyCodeVisitor- Overrides:
visitSpreadMapExpressionin classCodeVisitorSupport
-
visitMethodPointerExpression
public void visitMethodPointerExpression(MethodPointerExpression expression)
- Specified by:
visitMethodPointerExpressionin interfaceGroovyCodeVisitor- Overrides:
visitMethodPointerExpressionin classCodeVisitorSupport
-
visitUnaryMinusExpression
public void visitUnaryMinusExpression(UnaryMinusExpression expression)
- Specified by:
visitUnaryMinusExpressionin interfaceGroovyCodeVisitor- Overrides:
visitUnaryMinusExpressionin classCodeVisitorSupport
-
visitUnaryPlusExpression
public void visitUnaryPlusExpression(UnaryPlusExpression expression)
- Specified by:
visitUnaryPlusExpressionin interfaceGroovyCodeVisitor- Overrides:
visitUnaryPlusExpressionin classCodeVisitorSupport
-
visitBitwiseNegationExpression
public void visitBitwiseNegationExpression(BitwiseNegationExpression expression)
- Specified by:
visitBitwiseNegationExpressionin interfaceGroovyCodeVisitor- Overrides:
visitBitwiseNegationExpressionin classCodeVisitorSupport
-
visitCastExpression
public void visitCastExpression(CastExpression castExpression)
- Specified by:
visitCastExpressionin interfaceGroovyCodeVisitor- Overrides:
visitCastExpressionin classCodeVisitorSupport
-
visitNotExpression
public void visitNotExpression(NotExpression expression)
- Specified by:
visitNotExpressionin interfaceGroovyCodeVisitor- Overrides:
visitNotExpressionin classCodeVisitorSupport
-
visitBooleanExpression
public void visitBooleanExpression(BooleanExpression expression)
- Specified by:
visitBooleanExpressionin interfaceGroovyCodeVisitor- Overrides:
visitBooleanExpressionin classCodeVisitorSupport
-
visitMethodCallExpression
public void visitMethodCallExpression(MethodCallExpression call)
- Specified by:
visitMethodCallExpressionin interfaceGroovyCodeVisitor- Overrides:
visitMethodCallExpressionin classCodeVisitorSupport
-
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:
visitStaticMethodCallExpressionin interfaceGroovyCodeVisitor- Overrides:
visitStaticMethodCallExpressionin classCodeVisitorSupport
-
isNullConstant
@Deprecated public static boolean isNullConstant(Expression expr)
Deprecated.
-
visitConstructorCallExpression
public void visitConstructorCallExpression(ConstructorCallExpression call)
- Specified by:
visitConstructorCallExpressionin interfaceGroovyCodeVisitor- Overrides:
visitConstructorCallExpressionin classCodeVisitorSupport
-
samePackages
public static boolean samePackages(java.lang.String pkg1, java.lang.String pkg2)
-
isFieldDirectlyAccessible
public static boolean isFieldDirectlyAccessible(FieldNode field, ClassNode clazz)
Determines if the given class can directly access the given field (viaGETFIELD,GETSTATIC, etc. bytecode instructions).
-
getDeclaredFieldOfCurrentClassOrAccessibleFieldOfSuper
public static FieldNode getDeclaredFieldOfCurrentClassOrAccessibleFieldOfSuper(ClassNode accessingNode, ClassNode current, java.lang.String fieldName, boolean skipCurrent)
-
visitPropertyExpression
public void visitPropertyExpression(PropertyExpression expression)
- Specified by:
visitPropertyExpressionin interfaceGroovyCodeVisitor- Overrides:
visitPropertyExpressionin classCodeVisitorSupport
-
visitAttributeExpression
public void visitAttributeExpression(AttributeExpression expression)
- Specified by:
visitAttributeExpressionin interfaceGroovyCodeVisitor- Overrides:
visitAttributeExpressionin classCodeVisitorSupport
-
visitFieldExpression
public void visitFieldExpression(FieldExpression expression)
- Specified by:
visitFieldExpressionin interfaceGroovyCodeVisitor- Overrides:
visitFieldExpressionin classCodeVisitorSupport
-
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:
visitVariableExpressionin interfaceGroovyCodeVisitor- Overrides:
visitVariableExpressionin classCodeVisitorSupport
-
createInterfaceSyntheticStaticFields
protected void createInterfaceSyntheticStaticFields()
-
createSyntheticStaticFields
protected void createSyntheticStaticFields()
-
visitClassExpression
public void visitClassExpression(ClassExpression expression)
load class object on stack- Specified by:
visitClassExpressionin interfaceGroovyCodeVisitor- Overrides:
visitClassExpressionin classCodeVisitorSupport
-
visitRangeExpression
public void visitRangeExpression(RangeExpression expression)
- Specified by:
visitRangeExpressionin interfaceGroovyCodeVisitor- Overrides:
visitRangeExpressionin classCodeVisitorSupport
-
visitMapEntryExpression
public void visitMapEntryExpression(MapEntryExpression expression)
- Specified by:
visitMapEntryExpressionin interfaceGroovyCodeVisitor- Overrides:
visitMapEntryExpressionin classCodeVisitorSupport
-
visitMapExpression
public void visitMapExpression(MapExpression expression)
- Specified by:
visitMapExpressionin interfaceGroovyCodeVisitor- Overrides:
visitMapExpressionin classCodeVisitorSupport
-
visitArgumentlistExpression
public void visitArgumentlistExpression(ArgumentListExpression ale)
- Specified by:
visitArgumentlistExpressionin interfaceGroovyCodeVisitor- Overrides:
visitArgumentlistExpressionin classCodeVisitorSupport
-
despreadList
public void despreadList(java.util.List expressions, boolean wrap)
-
visitTupleExpression
public void visitTupleExpression(TupleExpression expression)
- Specified by:
visitTupleExpressionin interfaceGroovyCodeVisitor- Overrides:
visitTupleExpressionin classCodeVisitorSupport
-
loadWrapper
public void loadWrapper(Expression argument)
-
visitArrayExpression
public void visitArrayExpression(ArrayExpression expression)
- Specified by:
visitArrayExpressionin interfaceGroovyCodeVisitor- Overrides:
visitArrayExpressionin classCodeVisitorSupport
-
visitClosureListExpression
public void visitClosureListExpression(ClosureListExpression expression)
- Specified by:
visitClosureListExpressionin interfaceGroovyCodeVisitor- Overrides:
visitClosureListExpressionin classCodeVisitorSupport
-
visitBytecodeSequence
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)
- Overrides:
visitBytecodeSequencein classClassGenerator
-
visitListExpression
public void visitListExpression(ListExpression expression)
- Specified by:
visitListExpressionin interfaceGroovyCodeVisitor- Overrides:
visitListExpressionin classCodeVisitorSupport
-
visitGStringExpression
public void visitGStringExpression(GStringExpression expression)
- Specified by:
visitGStringExpressionin interfaceGroovyCodeVisitor- Overrides:
visitGStringExpressionin classCodeVisitorSupport
-
visitAnnotations
public void visitAnnotations(AnnotatedNode node)
Note: ignore it. Annotation generation needs the current visitor.- Overrides:
visitAnnotationsin classClassCodeVisitorSupport
-
visitBytecodeExpression
public void visitBytecodeExpression(BytecodeExpression cle)
- Specified by:
visitBytecodeExpressionin interfaceGroovyCodeVisitor- Overrides:
visitBytecodeExpressionin classCodeVisitorSupport
-
isThisExpression
@Deprecated public static boolean isThisExpression(Expression expression)
Deprecated.
-
onLineNumber
public void onLineNumber(ASTNode statement, java.lang.String message)
-
getCompileUnit
protected CompileUnit getCompileUnit()
-
addInnerClass
public boolean addInnerClass(ClassNode innerClass)
-
-