Package net.bytebuddy.asm
Class Advice.AdviceVisitor
- java.lang.Object
-
- org.objectweb.asm.MethodVisitor
-
- net.bytebuddy.utility.visitor.ExceptionTableSensitiveMethodVisitor
-
- net.bytebuddy.asm.Advice.AdviceVisitor
-
- All Implemented Interfaces:
Advice.Dispatcher.RelocationHandler.Relocation
- Direct Known Subclasses:
Advice.AdviceVisitor.WithExitAdvice
,Advice.AdviceVisitor.WithoutExitAdvice
- Enclosing class:
- Advice
protected abstract static class Advice.AdviceVisitor extends ExceptionTableSensitiveMethodVisitor implements Advice.Dispatcher.RelocationHandler.Relocation
A method visitor that weaves the advice methods' byte codes.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
Advice.AdviceVisitor.WithExitAdvice
An advice visitor that applies exit advice.protected static class
Advice.AdviceVisitor.WithoutExitAdvice
An advice visitor that does not apply exit advice.-
Nested classes/interfaces inherited from interface net.bytebuddy.asm.Advice.Dispatcher.RelocationHandler.Relocation
Advice.Dispatcher.RelocationHandler.Relocation.ForLabel
-
-
Field Summary
Fields Modifier and Type Field Description protected Advice.ArgumentHandler.ForInstrumentedMethod
argumentHandler
The handler for accessing arguments of the method's local variable array.protected MethodDescription
instrumentedMethod
A description of the instrumented method.private Advice.Dispatcher.Bound
methodEnter
The dispatcher to be used for method enter.protected Advice.Dispatcher.Bound
methodExit
The dispatcher to be used for method exit.protected Advice.MethodSizeHandler.ForInstrumentedMethod
methodSizeHandler
A handler for computing the method size requirements.private org.objectweb.asm.Label
preparationStart
A label that indicates the start of the preparation of a user method execution.protected Advice.StackMapFrameHandler.ForInstrumentedMethod
stackMapFrameHandler
A handler for translating and injecting stack map frames.
-
Constructor Summary
Constructors Modifier Constructor Description protected
AdviceVisitor(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, Assigner assigner, StackManipulation exceptionHandler, TypeDescription instrumentedType, MethodDescription instrumentedMethod, Advice.Dispatcher.Resolved.ForMethodEnter methodEnter, Advice.Dispatcher.Resolved.ForMethodExit methodExit, java.util.List<? extends TypeDescription> postMethodTypes, int writerFlags, int readerFlags)
Creates a new advice visitor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
onAfterExceptionTable()
Invoked after the exception table was visited.protected abstract void
onUserEnd()
Writes the advice for completing the instrumented method.protected abstract void
onUserPrepare()
Invoked when the user method's exception handler (if any) is supposed to be prepared.protected abstract void
onUserStart()
Writes the advice for entering the instrumented method.void
onVisitFrame(int type, int localVariableLength, java.lang.Object[] localVariable, int stackSize, java.lang.Object[] stack)
Visits a stack map frame.protected void
onVisitIincInsn(int offset, int increment)
Visits an increment instruction.protected void
onVisitVarInsn(int opcode, int offset)
Visits an variable instruction.void
visitLocalVariable(java.lang.String name, java.lang.String descriptor, java.lang.String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index)
org.objectweb.asm.AnnotationVisitor
visitLocalVariableAnnotation(int typeReference, org.objectweb.asm.TypePath typePath, org.objectweb.asm.Label[] start, org.objectweb.asm.Label[] end, int[] index, java.lang.String descriptor, boolean visible)
void
visitMaxs(int stackSize, int localVariableLength)
-
Methods inherited from class net.bytebuddy.utility.visitor.ExceptionTableSensitiveMethodVisitor
onVisitFieldInsn, onVisitInsn, onVisitIntInsn, onVisitInvokeDynamicInsn, onVisitJumpInsn, onVisitLabel, onVisitLdcInsn, onVisitLookupSwitchInsn, onVisitMethodInsn, onVisitMethodInsn, onVisitMultiANewArrayInsn, onVisitTableSwitchInsn, onVisitTypeInsn, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitIntInsn, visitInvokeDynamicInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLookupSwitchInsn, visitMethodInsn, visitMethodInsn, visitMultiANewArrayInsn, visitTableSwitchInsn, visitTypeInsn, visitVarInsn
-
Methods inherited from class org.objectweb.asm.MethodVisitor
visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitInsnAnnotation, visitLineNumber, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.bytebuddy.asm.Advice.Dispatcher.RelocationHandler.Relocation
apply
-
-
-
-
Field Detail
-
instrumentedMethod
protected final MethodDescription instrumentedMethod
A description of the instrumented method.
-
preparationStart
private final org.objectweb.asm.Label preparationStart
A label that indicates the start of the preparation of a user method execution.
-
methodEnter
private final Advice.Dispatcher.Bound methodEnter
The dispatcher to be used for method enter.
-
methodExit
protected final Advice.Dispatcher.Bound methodExit
The dispatcher to be used for method exit.
-
argumentHandler
protected final Advice.ArgumentHandler.ForInstrumentedMethod argumentHandler
The handler for accessing arguments of the method's local variable array.
-
methodSizeHandler
protected final Advice.MethodSizeHandler.ForInstrumentedMethod methodSizeHandler
A handler for computing the method size requirements.
-
stackMapFrameHandler
protected final Advice.StackMapFrameHandler.ForInstrumentedMethod stackMapFrameHandler
A handler for translating and injecting stack map frames.
-
-
Constructor Detail
-
AdviceVisitor
protected AdviceVisitor(org.objectweb.asm.MethodVisitor methodVisitor, Implementation.Context implementationContext, Assigner assigner, StackManipulation exceptionHandler, TypeDescription instrumentedType, MethodDescription instrumentedMethod, Advice.Dispatcher.Resolved.ForMethodEnter methodEnter, Advice.Dispatcher.Resolved.ForMethodExit methodExit, java.util.List<? extends TypeDescription> postMethodTypes, int writerFlags, int readerFlags)
Creates a new advice visitor.- Parameters:
methodVisitor
- The actual method visitor that is underlying this method visitor to which all instructions are written.implementationContext
- The implementation context to use.assigner
- The assigner to use.exceptionHandler
- The stack manipulation to apply within a suppression handler.instrumentedType
- A description of the instrumented type.instrumentedMethod
- The instrumented method.methodEnter
- The method enter advice.methodExit
- The method exit advice.postMethodTypes
- A list of virtual method arguments that are available after the instrumented method has completed.writerFlags
- The ASM writer flags that were set.readerFlags
- The ASM reader flags that were set.
-
-
Method Detail
-
onAfterExceptionTable
protected void onAfterExceptionTable()
Description copied from class:ExceptionTableSensitiveMethodVisitor
Invoked after the exception table was visited. Typically, the exception table is visited by ASM at the beginning of a method. It is however possible that a user adds exception table entries at a later point. Normally, this is however not meaningful use of ASM.- Specified by:
onAfterExceptionTable
in classExceptionTableSensitiveMethodVisitor
-
onUserPrepare
protected abstract void onUserPrepare()
Invoked when the user method's exception handler (if any) is supposed to be prepared.
-
onUserStart
protected abstract void onUserStart()
Writes the advice for entering the instrumented method.
-
onVisitVarInsn
protected void onVisitVarInsn(int opcode, int offset)
Description copied from class:ExceptionTableSensitiveMethodVisitor
Visits an variable instruction.- Overrides:
onVisitVarInsn
in classExceptionTableSensitiveMethodVisitor
- Parameters:
opcode
- The visited opcode.offset
- The visited offset.
-
onVisitIincInsn
protected void onVisitIincInsn(int offset, int increment)
Description copied from class:ExceptionTableSensitiveMethodVisitor
Visits an increment instruction.- Overrides:
onVisitIincInsn
in classExceptionTableSensitiveMethodVisitor
- Parameters:
offset
- The offset of the accessed variable.increment
- The value with which to increment.
-
onVisitFrame
public void onVisitFrame(int type, int localVariableLength, java.lang.Object[] localVariable, int stackSize, java.lang.Object[] stack)
Description copied from class:ExceptionTableSensitiveMethodVisitor
Visits a stack map frame.- Overrides:
onVisitFrame
in classExceptionTableSensitiveMethodVisitor
- Parameters:
type
- The type of stack map frame.localVariableLength
- The length of the local variable array.localVariable
- An array containing type symbols for all values in the local variable array.stackSize
- The size of the operand stack.stack
- An array containing type symbols for all values on the operand stack.
-
visitMaxs
public void visitMaxs(int stackSize, int localVariableLength)
- Overrides:
visitMaxs
in classorg.objectweb.asm.MethodVisitor
-
visitLocalVariable
public void visitLocalVariable(java.lang.String name, java.lang.String descriptor, java.lang.String signature, org.objectweb.asm.Label start, org.objectweb.asm.Label end, int index)
- Overrides:
visitLocalVariable
in classorg.objectweb.asm.MethodVisitor
-
visitLocalVariableAnnotation
public org.objectweb.asm.AnnotationVisitor visitLocalVariableAnnotation(int typeReference, org.objectweb.asm.TypePath typePath, org.objectweb.asm.Label[] start, org.objectweb.asm.Label[] end, int[] index, java.lang.String descriptor, boolean visible)
- Overrides:
visitLocalVariableAnnotation
in classorg.objectweb.asm.MethodVisitor
-
onUserEnd
protected abstract void onUserEnd()
Writes the advice for completing the instrumented method.
-
-