Package org.codehaus.groovy.classgen.asm
Class BytecodeHelper
- java.lang.Object
-
- org.codehaus.groovy.classgen.asm.BytecodeHelper
-
- All Implemented Interfaces:
org.objectweb.asm.Opcodes
public class BytecodeHelper extends java.lang.Object implements org.objectweb.asm.OpcodesA helper class for bytecode generation with AsmClassGenerator.- Version:
- $Revision$
- Author:
- James Strachan, Bing Ran, Jochen Theodorou
-
-
Field Summary
-
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, V22, V23, V24, V25, V26, V9
-
-
Constructor Summary
Constructors Constructor Description BytecodeHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static booleanbox(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)Generates the bytecode to autobox the current value on the stackstatic booleanbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)box top level operandstatic voiddoCast(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)static voiddoCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)static voiddoCastToPrimitive(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)Given a wrapped number type (Byte, Integer, Short, ...), generates bytecode to convert it to a primitive number (int, long, double) using calls to wrapped.[targetType]Value()static voiddoReturn(org.objectweb.asm.MethodVisitor mv, ClassNode returnType)static java.lang.StringformatNameForClassLoading(java.lang.String name)returns a name that Class.forName() can take.static java.lang.StringgetClassInternalName(java.lang.Class t)static java.lang.StringgetClassInternalName(java.lang.String name)static java.lang.StringgetClassInternalName(ClassNode t)static java.lang.String[]getClassInternalNames(ClassNode[] names)static java.lang.StringgetClassLoadingTypeDescription(ClassNode c)array types are special: eg.: String[]: classname: [Ljava.lang.String; Object: classname: java.lang.Object int[] : classname: [I unlike getTypeDescription '.' is not replaced by '/'.static java.lang.StringgetGenericsBounds(ClassNode type)static java.lang.StringgetGenericsMethodSignature(MethodNode node)static java.lang.StringgetGenericsSignature(ClassNode node)static java.lang.StringgetMethodDescriptor(java.lang.Class returnType, java.lang.Class[] paramTypes)static java.lang.StringgetMethodDescriptor(ClassNode returnType, Parameter[] parameters)static java.lang.StringgetTypeDescription(java.lang.Class c)static java.lang.StringgetTypeDescription(ClassNode c)array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [Istatic voidload(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)static voidnegateBoolean(org.objectweb.asm.MethodVisitor mv)negate a boolean on stack.static voidpushConstant(org.objectweb.asm.MethodVisitor mv, int value)static voidunbox(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)Generates the bytecode to unbox the current value on the stackstatic voidunbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)
-
-
-
Method Detail
-
getClassInternalName
public static java.lang.String getClassInternalName(ClassNode t)
-
getClassInternalName
public static java.lang.String getClassInternalName(java.lang.Class t)
-
getClassInternalName
public static java.lang.String getClassInternalName(java.lang.String name)
- Returns:
- the ASM internal name of the type
-
getMethodDescriptor
public static java.lang.String getMethodDescriptor(ClassNode returnType, Parameter[] parameters)
-
getMethodDescriptor
public static java.lang.String getMethodDescriptor(java.lang.Class returnType, java.lang.Class[] paramTypes)- Returns:
- the ASM method type descriptor
-
getTypeDescription
public static java.lang.String getTypeDescription(java.lang.Class c)
-
getClassLoadingTypeDescription
public static java.lang.String getClassLoadingTypeDescription(ClassNode c)
array types are special: eg.: String[]: classname: [Ljava.lang.String; Object: classname: java.lang.Object int[] : classname: [I unlike getTypeDescription '.' is not replaced by '/'. it seems that makes problems for the class loading if '.' is replaced by '/'- Returns:
- the ASM type description for class loading
-
getTypeDescription
public static java.lang.String getTypeDescription(ClassNode c)
array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I- Returns:
- the ASM type description
-
getClassInternalNames
public static java.lang.String[] getClassInternalNames(ClassNode[] names)
- Returns:
- an array of ASM internal names of the type
-
pushConstant
public static void pushConstant(org.objectweb.asm.MethodVisitor mv, int value)
-
negateBoolean
public static void negateBoolean(org.objectweb.asm.MethodVisitor mv)
negate a boolean on stack. true->false, false->true
-
formatNameForClassLoading
public static java.lang.String formatNameForClassLoading(java.lang.String name)
returns a name that Class.forName() can take. Notably for arrays: [I, [Ljava.lang.String; etc Regular object type: java.lang.String- Parameters:
name-
-
doReturn
public static void doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode returnType)
-
getGenericsMethodSignature
public static java.lang.String getGenericsMethodSignature(MethodNode node)
-
getGenericsSignature
public static java.lang.String getGenericsSignature(ClassNode node)
-
getGenericsBounds
public static java.lang.String getGenericsBounds(ClassNode type)
-
load
public static void load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)
-
doCast
public static void doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)
-
doCastToPrimitive
public static void doCastToPrimitive(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)Given a wrapped number type (Byte, Integer, Short, ...), generates bytecode to convert it to a primitive number (int, long, double) using calls to wrapped.[targetType]Value()- Parameters:
mv- method visitorsourceType- the wrapped number typetargetType- the primitive target type
-
doCast
public static void doCast(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)
-
unbox
public static void unbox(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)Generates the bytecode to unbox the current value on the stack
-
unbox
public static void unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)
-
box
public static boolean box(org.objectweb.asm.MethodVisitor mv, ClassNode type)box top level operand
-
box
public static boolean box(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)Generates the bytecode to autobox the current value on the stack
-
-