public class BytecodeHelper
extends java.lang.Object
implements org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, 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, 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
Constructor and Description |
---|
BytecodeHelper() |
Modifier and Type | Method and Description |
---|---|
static boolean |
box(org.objectweb.asm.MethodVisitor mv,
java.lang.Class type)
Generates the bytecode to autobox the current value on the stack
|
static boolean |
box(org.objectweb.asm.MethodVisitor mv,
ClassNode type)
box top level operand
|
static void |
doCast(org.objectweb.asm.MethodVisitor mv,
java.lang.Class type) |
static void |
doCast(org.objectweb.asm.MethodVisitor mv,
ClassNode type) |
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.
|
static void |
doCastToWrappedType(org.objectweb.asm.MethodVisitor mv,
ClassNode sourceType,
ClassNode targetType)
Given a primitive number type (byte, integer, short, ...), generates bytecode
to convert it to a wrapped number (Integer, Long, Double) using calls to
[WrappedType].valueOf
|
static void |
doReturn(org.objectweb.asm.MethodVisitor mv,
ClassNode returnType) |
static java.lang.String |
formatNameForClassLoading(java.lang.String name)
returns a name that Class.forName() can take.
|
static java.lang.String |
getClassInternalName(java.lang.Class t) |
static java.lang.String |
getClassInternalName(ClassNode t) |
static java.lang.String |
getClassInternalName(java.lang.String name) |
static java.lang.String[] |
getClassInternalNames(ClassNode[] names) |
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 '/'.
|
static java.lang.String |
getGenericsBounds(ClassNode type) |
static java.lang.String |
getGenericsMethodSignature(MethodNode node) |
static java.lang.String |
getGenericsSignature(ClassNode node) |
static java.lang.String |
getMethodDescriptor(java.lang.Class returnType,
java.lang.Class[] paramTypes) |
static java.lang.String |
getMethodDescriptor(ClassNode returnType,
Parameter[] parameters) |
static java.lang.String |
getMethodDescriptor(MethodNode methodNode)
Returns a method descriptor for the given
MethodNode . |
static java.lang.String |
getTypeDescription(java.lang.Class c) |
static java.lang.String |
getTypeDescription(ClassNode c)
array types are special:
eg.: String[]: classname: [Ljava/lang/String;
int[]: [I
|
static boolean |
isClassLiteralPossible(ClassNode classNode)
Tells if a class node is candidate for class literal bytecode optimization.
|
static boolean |
isSameCompilationUnit(ClassNode a,
ClassNode b)
Returns true if the two classes share the same compilation unit.
|
static void |
load(org.objectweb.asm.MethodVisitor mv,
ClassNode type,
int idx) |
static void |
negateBoolean(org.objectweb.asm.MethodVisitor mv)
negate a boolean on stack. true->false, false->true
|
static void |
pushConstant(org.objectweb.asm.MethodVisitor mv,
int value) |
static void |
unbox(org.objectweb.asm.MethodVisitor mv,
java.lang.Class type)
Generates the bytecode to unbox the current value on the stack
|
static void |
unbox(org.objectweb.asm.MethodVisitor mv,
ClassNode type) |
static void |
visitClassLiteral(org.objectweb.asm.MethodVisitor mv,
ClassNode classNode)
Visits a class literal.
|
public static java.lang.String getClassInternalName(ClassNode t)
public static java.lang.String getClassInternalName(java.lang.Class t)
public static java.lang.String getClassInternalName(java.lang.String name)
public static java.lang.String getMethodDescriptor(ClassNode returnType, Parameter[] parameters)
public static java.lang.String getMethodDescriptor(MethodNode methodNode)
MethodNode
.methodNode
- the method node for which to create the descriptorpublic static java.lang.String getMethodDescriptor(java.lang.Class returnType, java.lang.Class[] paramTypes)
public static java.lang.String getTypeDescription(java.lang.Class c)
public static java.lang.String getClassLoadingTypeDescription(ClassNode c)
public static java.lang.String getTypeDescription(ClassNode c)
public static java.lang.String[] getClassInternalNames(ClassNode[] names)
public static void pushConstant(org.objectweb.asm.MethodVisitor mv, int value)
public static void negateBoolean(org.objectweb.asm.MethodVisitor mv)
public static java.lang.String formatNameForClassLoading(java.lang.String name)
name
- public static void doReturn(org.objectweb.asm.MethodVisitor mv, ClassNode returnType)
public static java.lang.String getGenericsMethodSignature(MethodNode node)
public static java.lang.String getGenericsSignature(ClassNode node)
public static java.lang.String getGenericsBounds(ClassNode type)
public static void load(org.objectweb.asm.MethodVisitor mv, ClassNode type, int idx)
public static void doCast(org.objectweb.asm.MethodVisitor mv, ClassNode type)
public static void doCastToPrimitive(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)
mv
- method visitorsourceType
- the wrapped number typetargetType
- the primitive target typepublic static void doCastToWrappedType(org.objectweb.asm.MethodVisitor mv, ClassNode sourceType, ClassNode targetType)
mv
- method visitorsourceType
- the primitive number typetargetType
- the wrapped target typepublic static void doCast(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)
public static void unbox(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)
public static void unbox(org.objectweb.asm.MethodVisitor mv, ClassNode type)
public static boolean box(org.objectweb.asm.MethodVisitor mv, ClassNode type)
public static boolean box(org.objectweb.asm.MethodVisitor mv, java.lang.Class type)
public static void visitClassLiteral(org.objectweb.asm.MethodVisitor mv, ClassNode classNode)
public static boolean isClassLiteralPossible(ClassNode classNode)
classNode
- the classnode for which we want to know if bytecode optimization is possible