Package net.bytebuddy.asm
Class Advice.StackMapFrameHandler.Default
java.lang.Object
net.bytebuddy.asm.Advice.StackMapFrameHandler.Default
- All Implemented Interfaces:
Advice.StackMapFrameHandler,Advice.StackMapFrameHandler.ForInstrumentedMethod
- Direct Known Subclasses:
Advice.StackMapFrameHandler.Default.Trivial,Advice.StackMapFrameHandler.Default.WithPreservedArguments
- Enclosing interface:
Advice.StackMapFrameHandler
public abstract static class Advice.StackMapFrameHandler.Default
extends Object
implements Advice.StackMapFrameHandler.ForInstrumentedMethod
A default implementation of a stack map frame handler for an instrumented method.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classA stack map frame handler for an advice method.protected static enumRepresents the initialization state of a stack value that can either be initialized or uninitialized.protected static enumA translation mode that determines how the fixed frames of the instrumented method are written.protected static classA trivial stack map frame handler that applies a trivial translation for the instrumented method's stack map frames.protected static classA stack map frame handler that requires the original arguments of the instrumented method to be preserved in their original form.Nested classes/interfaces inherited from interface net.bytebuddy.asm.Advice.StackMapFrameHandler
Advice.StackMapFrameHandler.Default, Advice.StackMapFrameHandler.ForInstrumentedMethod, Advice.StackMapFrameHandler.ForPostProcessor, Advice.StackMapFrameHandler.NoOp -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intThe current frame's size divergence from the original local variable array.protected static final Object[]An empty array indicating an empty frame.protected final booleantrueif the meta data handler is expected to expand its frames.protected final List<? extends TypeDescription> A list of virtual method arguments that are explicitly added before any code execution.protected final MethodDescriptionThe instrumented method.protected final TypeDescriptionThe instrumented type.protected final List<? extends TypeDescription> A list of virtual arguments that are available after the enter advice method is executed.protected final List<? extends TypeDescription> A list of virtual method arguments that are available after the instrumented method has completed.protected final List<? extends TypeDescription> A list of virtual method arguments that are available before the instrumented method is executed. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedDefault(TypeDescription instrumentedType, MethodDescription instrumentedMethod, List<? extends TypeDescription> initialTypes, List<? extends TypeDescription> latentTypes, List<? extends TypeDescription> preMethodTypes, List<? extends TypeDescription> postMethodTypes, boolean expandFrames) Creates a new default stack map frame handler. -
Method Summary
Modifier and TypeMethodDescriptionbindEnter(MethodDescription.InDefinedShape adviceMethod) Binds this meta data handler for the enter advice.intReturns a hint to supply to aClassReaderwhen parsing an advice method.protected voidinjectFullFrame(org.objectweb.asm.MethodVisitor methodVisitor, Advice.StackMapFrameHandler.Default.Initialization initialization, List<? extends TypeDescription> typesInArray, List<? extends TypeDescription> typesOnStack) Injects a full stack map frame after the instrumented method has completed.protected static Advice.StackMapFrameHandler.ForInstrumentedMethodof(TypeDescription instrumentedType, MethodDescription instrumentedMethod, List<? extends TypeDescription> initialTypes, List<? extends TypeDescription> latentTypes, List<? extends TypeDescription> preMethodTypes, List<? extends TypeDescription> postMethodTypes, boolean exitAdvice, boolean copyArguments, ClassFileVersion classFileVersion, int writerFlags, int readerFlags) Creates an appropriate stack map frame handler for an instrumented method.protected voidtranslateFrame(org.objectweb.asm.MethodVisitor methodVisitor, Advice.StackMapFrameHandler.Default.TranslationMode translationMode, MethodDescription methodDescription, List<? extends TypeDescription> additionalTypes, int type, int localVariableLength, Object[] localVariable, int stackSize, Object[] stack) Translates a frame.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.bytebuddy.asm.Advice.StackMapFrameHandler
injectCompletionFrame, injectExceptionFrame, injectReturnFrame, translateFrameMethods inherited from interface net.bytebuddy.asm.Advice.StackMapFrameHandler.ForInstrumentedMethod
bindExit, injectInitializationFrame, injectPostCompletionFrame, injectStartFrame
-
Field Details
-
EMPTY
An empty array indicating an empty frame. -
instrumentedType
The instrumented type. -
instrumentedMethod
The instrumented method. -
initialTypes
A list of virtual method arguments that are explicitly added before any code execution. -
latentTypes
A list of virtual arguments that are available after the enter advice method is executed. -
preMethodTypes
A list of virtual method arguments that are available before the instrumented method is executed. -
postMethodTypes
A list of virtual method arguments that are available after the instrumented method has completed. -
expandFrames
protected final boolean expandFramestrueif the meta data handler is expected to expand its frames. -
currentFrameDivergence
protected int currentFrameDivergenceThe current frame's size divergence from the original local variable array.
-
-
Constructor Details
-
Default
protected Default(TypeDescription instrumentedType, MethodDescription instrumentedMethod, List<? extends TypeDescription> initialTypes, List<? extends TypeDescription> latentTypes, List<? extends TypeDescription> preMethodTypes, List<? extends TypeDescription> postMethodTypes, boolean expandFrames) Creates a new default stack map frame handler.- Parameters:
instrumentedType- The instrumented type.instrumentedMethod- The instrumented method.initialTypes- A list of virtual method arguments that are explicitly added before any code execution.latentTypes- A list of virtual arguments that are available after the enter advice method is executed.preMethodTypes- A list of virtual method arguments that are available before the instrumented method is executed.postMethodTypes- A list of virtual method arguments that are available after the instrumented method has completed.expandFrames-trueif the meta data handler is expected to expand its frames.
-
-
Method Details
-
of
protected static Advice.StackMapFrameHandler.ForInstrumentedMethod of(TypeDescription instrumentedType, MethodDescription instrumentedMethod, List<? extends TypeDescription> initialTypes, List<? extends TypeDescription> latentTypes, List<? extends TypeDescription> preMethodTypes, List<? extends TypeDescription> postMethodTypes, boolean exitAdvice, boolean copyArguments, ClassFileVersion classFileVersion, int writerFlags, int readerFlags) Creates an appropriate stack map frame handler for an instrumented method.- Parameters:
instrumentedType- The instrumented type.instrumentedMethod- The instrumented method.initialTypes- A list of virtual method arguments that are explicitly added before any code execution.latentTypes- A list of virtual arguments that are available after the enter advice method is executed.preMethodTypes- A list of virtual method arguments that are available before the instrumented method is executed.postMethodTypes- A list of virtual method arguments that are available after the instrumented method has completed.exitAdvice-trueif the current advice implies exit advice.copyArguments-trueif the original arguments are copied before invoking the instrumented method.classFileVersion- The instrumented type's class file version.writerFlags- The flags supplied to the ASM writer.readerFlags- The reader flags supplied to the ASM reader.- Returns:
- An appropriate stack map frame handler for an instrumented method.
-
bindEnter
public Advice.StackMapFrameHandler.ForAdvice bindEnter(MethodDescription.InDefinedShape adviceMethod) Binds this meta data handler for the enter advice.- Specified by:
bindEnterin interfaceAdvice.StackMapFrameHandler.ForInstrumentedMethod- Parameters:
adviceMethod- The enter advice method.- Returns:
- An appropriate meta data handler for the enter method.
-
getReaderHint
public int getReaderHint()Returns a hint to supply to aClassReaderwhen parsing an advice method.- Specified by:
getReaderHintin interfaceAdvice.StackMapFrameHandler.ForInstrumentedMethod- Returns:
- The reader hint to supply to an ASM class reader.
-
translateFrame
protected void translateFrame(org.objectweb.asm.MethodVisitor methodVisitor, Advice.StackMapFrameHandler.Default.TranslationMode translationMode, MethodDescription methodDescription, List<? extends TypeDescription> additionalTypes, int type, int localVariableLength, @MaybeNull Object[] localVariable, int stackSize, @MaybeNull Object[] stack) Translates a frame.- Parameters:
methodVisitor- The method visitor to write the frame to.translationMode- The translation mode to apply.methodDescription- The method description for which the frame is written.additionalTypes- The additional types to consider part of the instrumented method's parameters.type- The frame's type.localVariableLength- The local variable length.localVariable- An array containing the types of the current local variables.stackSize- The size of the operand stack.stack- An array containing the types of the current operand stack.
-
injectFullFrame
protected void injectFullFrame(org.objectweb.asm.MethodVisitor methodVisitor, Advice.StackMapFrameHandler.Default.Initialization initialization, List<? extends TypeDescription> typesInArray, List<? extends TypeDescription> typesOnStack) Injects a full stack map frame after the instrumented method has completed.- Parameters:
methodVisitor- The method visitor onto which to write the stack map frame.initialization- The initialization to apply when resolving a reference to the instance on which a non-static method is invoked.typesInArray- The types that were added to the local variable array additionally to the values of the instrumented method.typesOnStack- The types currently on the operand stack.
-