Package jodd.proxetta.asm
Class InvokeReplacerMethodAdapter
- java.lang.Object
-
- jodd.asm9.MethodVisitor
-
- jodd.asm.MethodAdapter
-
- jodd.proxetta.asm.InvokeReplacerMethodAdapter
-
public class InvokeReplacerMethodAdapter extends MethodAdapter
Invocation replacer method adapter.
-
-
Field Summary
Fields Modifier and Type Field Description protected InvokeAspect[]aspectsprotected booleanfirstSuperCtorInitCalledDetects super ctor invocation.protected booleanisPreviousprotected MethodInfomethodInfoprotected InvokeReplacernewInvokeReplacerNew object creation matched.protected intopcodeprotected intoperandprotected booleanproxyInfoRequestedprotected java.lang.String[]strArgsprotected booleantraceNextprotected WorkDatawd-
Fields inherited from class jodd.asm9.MethodVisitor
api, mv
-
-
Constructor Summary
Constructors Constructor Description InvokeReplacerMethodAdapter(MethodVisitor mv, MethodInfo methodInfo, WorkData wd, InvokeAspect[] aspects)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected static java.lang.StringappendArgument(java.lang.String desc, java.lang.String type)Appends argument to the existing description.protected static java.lang.StringchangeReturnType(java.lang.String desc, java.lang.String type)Changes return type.protected intgetArgumentIndex()Returns argument index from the history.java.lang.String[]getLastTwoStringArguments()Returns last two string arguments.protected static java.lang.StringprependArgument(java.lang.String desc, java.lang.String type)Prepends argument to the existing description.voidvisitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)Visits a field instruction.voidvisitIincInsn(int var, int increment)Visits an IINC instruction.voidvisitInsn(int opcode)Visits a zero operand instruction.voidvisitIntInsn(int opcode, int operand)Visits an instruction with a single int operand.voidvisitJumpInsn(int opcode, Label label)Visits a jump instruction.voidvisitLdcInsn(java.lang.Object cst)Visits a LDC instruction.voidvisitLineNumber(int line, Label start)Visits a line number declaration.voidvisitLocalVariable(java.lang.String name, java.lang.String desc, java.lang.String signature, Label start, Label end, int index)Visits a local variable declaration.voidvisitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)Visits a LOOKUPSWITCH instruction.voidvisitMethodInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc, boolean isInterface)Invoked on INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE or INVOKEDYNAMIC.voidvisitMultiANewArrayInsn(java.lang.String desc, int dims)Visits a MULTIANEWARRAY instruction.voidvisitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)Visits a TABLESWITCH instruction.voidvisitTypeInsn(int opcode, java.lang.String type)Visits a type instruction.voidvisitVarInsn(int opcode, int var)Visits a local variable instruction.-
Methods inherited from class jodd.asm9.MethodVisitor
visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFrame, visitInsnAnnotation, visitInvokeDynamicInsn, visitLabel, visitLocalVariableAnnotation, visitMaxs, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation
-
-
-
-
Field Detail
-
wd
protected final WorkData wd
-
methodInfo
protected final MethodInfo methodInfo
-
aspects
protected final InvokeAspect[] aspects
-
firstSuperCtorInitCalled
protected boolean firstSuperCtorInitCalled
Detects super ctor invocation.
-
proxyInfoRequested
protected boolean proxyInfoRequested
-
newInvokeReplacer
protected InvokeReplacer newInvokeReplacer
New object creation matched.
-
opcode
protected int opcode
-
operand
protected int operand
-
isPrevious
protected boolean isPrevious
-
traceNext
protected boolean traceNext
-
strArgs
protected java.lang.String[] strArgs
-
-
Constructor Detail
-
InvokeReplacerMethodAdapter
public InvokeReplacerMethodAdapter(MethodVisitor mv, MethodInfo methodInfo, WorkData wd, InvokeAspect[] aspects)
-
-
Method Detail
-
visitMethodInsn
public void visitMethodInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc, boolean isInterface)Invoked on INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE or INVOKEDYNAMIC.- Parameters:
opcode- 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 (seeType.getInternalName()).name- the method's name.desc- the method's descriptor (seeType).isInterface- if the method's owner class is an interface.
-
visitFieldInsn
public void visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)Description copied from class:MethodVisitorVisits a field instruction. A field instruction is an instruction that loads or stores the value of a field of an object.- Parameters:
opcode- 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 (seeType.getInternalName()).name- the field's name.desc- the field's descriptor (seeType).
-
visitTypeInsn
public void visitTypeInsn(int opcode, java.lang.String type)Description copied from class:MethodVisitorVisits a type instruction. A type instruction is an instruction that takes the internal name of a class as parameter.- Parameters:
opcode- 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 (seeType.getInternalName()).
-
visitVarInsn
public void visitVarInsn(int opcode, int var)Description copied from class:MethodVisitorVisits a local variable instruction. A local variable instruction is an instruction that loads or stores the value of a local variable.- Parameters:
opcode- 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.
-
visitInsn
public void visitInsn(int opcode)
Description copied from class:MethodVisitorVisits a zero operand instruction.- Parameters:
opcode- 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.
-
visitLocalVariable
public void visitLocalVariable(java.lang.String name, java.lang.String desc, java.lang.String signature, Label start, Label end, int index)Description copied from class:MethodVisitorVisits a local variable declaration.- Parameters:
name- the name of a local variable.desc- the type descriptor of this local variable.signature- the type signature of this local variable. May be null if the local variable type does not use generic types.start- the first instruction corresponding to the scope of this local variable (inclusive).end- the last instruction corresponding to the scope of this local variable (exclusive).index- the local variable's index.
-
visitLineNumber
public void visitLineNumber(int line, Label start)Description copied from class:MethodVisitorVisits a line number declaration.- Parameters:
line- a line number. This number refers to the source file from which the class was compiled.start- the first instruction corresponding to this line number.
-
appendArgument
protected static java.lang.String appendArgument(java.lang.String desc, java.lang.String type)Appends argument to the existing description.
-
prependArgument
protected static java.lang.String prependArgument(java.lang.String desc, java.lang.String type)Prepends argument to the existing description.
-
changeReturnType
protected static java.lang.String changeReturnType(java.lang.String desc, java.lang.String type)Changes return type.
-
getArgumentIndex
protected int getArgumentIndex()
Returns argument index from the history. Must POP value from the stack after the execution.
-
getLastTwoStringArguments
public java.lang.String[] getLastTwoStringArguments()
Returns last two string arguments.
-
visitIntInsn
public void visitIntInsn(int opcode, int operand)Description copied from class:MethodVisitorVisits an instruction with a single int operand.- Overrides:
visitIntInsnin classMethodVisitor- Parameters:
opcode- 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.
When opcode is BIPUSH, operand value should be between Byte.MIN_VALUE and Byte.MAX_VALUE.
When opcode is SIPUSH, operand value should be between Short.MIN_VALUE and Short.MAX_VALUE.
When opcode is NEWARRAY, operand value should be one ofOpcodes.T_BOOLEAN,Opcodes.T_CHAR,Opcodes.T_FLOAT,Opcodes.T_DOUBLE,Opcodes.T_BYTE,Opcodes.T_SHORT,Opcodes.T_INTorOpcodes.T_LONG.
-
visitJumpInsn
public void visitJumpInsn(int opcode, Label label)Description copied from class:MethodVisitorVisits a jump instruction. A jump instruction is an instruction that may jump to another instruction.- Overrides:
visitJumpInsnin classMethodVisitor- Parameters:
opcode- 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.
-
visitLdcInsn
public void visitLdcInsn(java.lang.Object cst)
Description copied from class:MethodVisitorVisits a LDC instruction. Note that new constant types may be added in future versions of the Java Virtual Machine. To easily detect new constant types, implementations of this method should check for unexpected constant types, like this: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 ConstantDynamic) { // ... } else { // throw an exception }- Overrides:
visitLdcInsnin classMethodVisitor- Parameters:
cst- the constant to be loaded on the stack. This parameter must be a non nullInteger, aFloat, aLong, aDouble, aString, aTypeof OBJECT or ARRAY sort for.classconstants, for classes whose version is 49, aTypeof METHOD sort for MethodType, aHandlefor MethodHandle constants, for classes whose version is 51 or aConstantDynamicfor a constant dynamic for classes whose version is 55.
-
visitIincInsn
public void visitIincInsn(int var, int increment)Description copied from class:MethodVisitorVisits an IINC instruction.- Overrides:
visitIincInsnin classMethodVisitor- Parameters:
var- index of the local variable to be incremented.increment- amount to increment the local variable by.
-
visitTableSwitchInsn
public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels)Description copied from class:MethodVisitorVisits a TABLESWITCH instruction.- Overrides:
visitTableSwitchInsnin classMethodVisitor- Parameters:
min- 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 themin + ikey.
-
visitLookupSwitchInsn
public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels)
Description copied from class:MethodVisitorVisits a LOOKUPSWITCH instruction.- Overrides:
visitLookupSwitchInsnin classMethodVisitor- Parameters:
dflt- 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 thekeys[i]key.
-
visitMultiANewArrayInsn
public void visitMultiANewArrayInsn(java.lang.String desc, int dims)Description copied from class:MethodVisitorVisits a MULTIANEWARRAY instruction.- Overrides:
visitMultiANewArrayInsnin classMethodVisitor- Parameters:
desc- an array type descriptor (seeType).dims- the number of dimensions of the array to allocate.
-
-