Opcodespublic class CodeSizeEvaluator extends MethodVisitor implements Opcodes
MethodVisitor that approximates the size of the methods it visits.api, mvAALOAD, 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_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, ASM4, ASM5, ASM6, ASM7_EXPERIMENTAL, 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, V_PREVIEW_EXPERIMENTAL, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V9| Modifier | Constructor | Description |
|---|---|---|
protected |
CodeSizeEvaluator(int api,
MethodVisitor methodVisitor) |
|
|
CodeSizeEvaluator(MethodVisitor methodVisitor) |
| Modifier and Type | Method | Description |
|---|---|---|
int |
getMaxSize() |
|
int |
getMinSize() |
|
void |
visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor) |
Visits a field instruction.
|
void |
visitIincInsn(int var,
int increment) |
Visits an IINC instruction.
|
void |
visitInsn(int opcode) |
Visits a zero operand instruction.
|
void |
visitIntInsn(int opcode,
int operand) |
Visits an instruction with a single int operand.
|
void |
visitInvokeDynamicInsn(java.lang.String name,
java.lang.String descriptor,
Handle bootstrapMethodHandle,
java.lang.Object... bootstrapMethodArguments) |
Visits an invokedynamic instruction.
|
void |
visitJumpInsn(int opcode,
Label label) |
Visits a jump instruction.
|
void |
visitLdcInsn(java.lang.Object value) |
Visits a LDC instruction.
|
void |
visitLookupSwitchInsn(Label dflt,
int[] keys,
Label[] labels) |
Visits a LOOKUPSWITCH instruction.
|
void |
visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor) |
Deprecated.
|
void |
visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor,
boolean isInterface) |
Visits a method instruction.
|
void |
visitMultiANewArrayInsn(java.lang.String descriptor,
int numDimensions) |
Visits a MULTIANEWARRAY instruction.
|
void |
visitTableSwitchInsn(int min,
int max,
Label dflt,
Label... labels) |
Visits a TABLESWITCH instruction.
|
void |
visitTypeInsn(int opcode,
java.lang.String type) |
Visits a type instruction.
|
void |
visitVarInsn(int opcode,
int var) |
Visits a local variable instruction.
|
visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFrame, visitInsnAnnotation, visitLabel, visitLineNumber, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotationpublic CodeSizeEvaluator(MethodVisitor methodVisitor)
protected CodeSizeEvaluator(int api,
MethodVisitor methodVisitor)
public int getMinSize()
public int getMaxSize()
public void visitInsn(int opcode)
MethodVisitorvisitInsn in class MethodVisitoropcode - the opcode of the instruction to be visited. This opcode is either NOP,
ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5,
LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD,
FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE, FASTORE, DASTORE,
AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2,
SWAP, IADD, LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV,
FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL, LSHL, ISHR, LSHR, IUSHR,
LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I,
D2L, D2F, I2B, I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN, FRETURN,
DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW, MONITORENTER, or MONITOREXIT.public void visitIntInsn(int opcode,
int operand)
MethodVisitorvisitIntInsn in class MethodVisitoropcode - the opcode of the instruction to be visited. This opcode is either BIPUSH, SIPUSH
or NEWARRAY.operand - the operand of the instruction to be visited.Opcodes.T_BOOLEAN, Opcodes.T_CHAR, Opcodes.T_FLOAT, Opcodes.T_DOUBLE, Opcodes.T_BYTE,
Opcodes.T_SHORT, Opcodes.T_INT or Opcodes.T_LONG.public void visitVarInsn(int opcode,
int var)
MethodVisitorvisitVarInsn in class MethodVisitoropcode - the opcode of the local variable instruction to be visited. This opcode is either
ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET.var - the operand of the instruction to be visited. This operand is the index of a local
variable.public void visitTypeInsn(int opcode,
java.lang.String type)
MethodVisitorvisitTypeInsn in class MethodVisitoropcode - the opcode of the type instruction to be visited. This opcode is either NEW,
ANEWARRAY, CHECKCAST or INSTANCEOF.type - the operand of the instruction to be visited. This operand must be the internal
name of an object or array class (see Type.getInternalName()).public void visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor)
MethodVisitorvisitFieldInsn in class MethodVisitoropcode - the opcode of the type instruction to be visited. This opcode is either
GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.owner - the internal name of the field's owner class (see Type.getInternalName()).name - the field's name.descriptor - the field's descriptor (see Type).@Deprecated
public void visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor)
MethodVisitorvisitMethodInsn in class MethodVisitoropcode - the opcode of the type instruction to be visited. This opcode is either
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE.owner - the internal name of the method's owner class (see Type.getInternalName()).name - the method's name.descriptor - the method's descriptor (see Type).public void visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor,
boolean isInterface)
MethodVisitorvisitMethodInsn in class MethodVisitoropcode - the opcode of the type instruction to be visited. This opcode is either
INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE.owner - the internal name of the method's owner class (see Type.getInternalName()).name - the method's name.descriptor - the method's descriptor (see Type).isInterface - if the method's owner class is an interface.public void visitInvokeDynamicInsn(java.lang.String name,
java.lang.String descriptor,
Handle bootstrapMethodHandle,
java.lang.Object... bootstrapMethodArguments)
MethodVisitorvisitInvokeDynamicInsn in class MethodVisitorname - the method's name.descriptor - the method's descriptor (see Type).bootstrapMethodHandle - the bootstrap method.bootstrapMethodArguments - the bootstrap method constant arguments. Each argument must be
an Integer, Float, Long, Double, String, Type, Handle or ConstantDynamic value. This method is allowed to modify
the content of the array so a caller should expect that this array may change.public void visitJumpInsn(int opcode,
Label label)
MethodVisitorvisitJumpInsn in class MethodVisitoropcode - the opcode of the type instruction to be visited. This opcode is either IFEQ,
IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT,
IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.label - the operand of the instruction to be visited. This operand is a label that
designates the instruction to which the jump instruction may jump.public void visitLdcInsn(java.lang.Object value)
MethodVisitor
if (cst instanceof Integer) {
// ...
} else if (cst instanceof Float) {
// ...
} else if (cst instanceof Long) {
// ...
} else if (cst instanceof Double) {
// ...
} else if (cst instanceof String) {
// ...
} else if (cst instanceof Type) {
int sort = ((Type) cst).getSort();
if (sort == Type.OBJECT) {
// ...
} else if (sort == Type.ARRAY) {
// ...
} else if (sort == Type.METHOD) {
// ...
} else {
// throw an exception
}
} else if (cst instanceof Handle) {
// ...
} else if (cst instanceof Condy) {
// ...
} else {
// throw an exception
}
visitLdcInsn in class MethodVisitorvalue - the constant to be loaded on the stack. This parameter must be a non null Integer, a Float, a Long, a Double, a String, a Type of OBJECT or ARRAY sort for .class constants, for classes whose version is
49, a Type of METHOD sort for MethodType, a Handle for MethodHandle
constants, for classes whose version is 51 or a ConstantDynamic for a constant
dynamic for classes whose version is 55.public void visitIincInsn(int var,
int increment)
MethodVisitorvisitIincInsn in class MethodVisitorvar - index of the local variable to be incremented.increment - amount to increment the local variable by.public void visitTableSwitchInsn(int min,
int max,
Label dflt,
Label... labels)
MethodVisitorvisitTableSwitchInsn in class MethodVisitormin - the minimum key value.max - the maximum key value.dflt - beginning of the default handler block.labels - beginnings of the handler blocks. labels[i] is the beginning of the
handler block for the min + i key.public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
MethodVisitorvisitLookupSwitchInsn in class MethodVisitordflt - beginning of the default handler block.keys - the values of the keys.labels - beginnings of the handler blocks. labels[i] is the beginning of the
handler block for the keys[i] key.public void visitMultiANewArrayInsn(java.lang.String descriptor,
int numDimensions)
MethodVisitorvisitMultiANewArrayInsn in class MethodVisitordescriptor - an array type descriptor (see Type).numDimensions - the number of dimensions of the array to allocate.