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 class
A stack map frame handler for an advice method.protected static enum
Represents the initialization state of a stack value that can either be initialized or uninitialized.protected static enum
A translation mode that determines how the fixed frames of the instrumented method are written.protected static class
A trivial stack map frame handler that applies a trivial translation for the instrumented method's stack map frames.protected static class
A 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 int
The current frame's size divergence from the original local variable array.protected static final Object[]
An empty array indicating an empty frame.protected final boolean
true
if 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 MethodDescription
The instrumented method.protected final TypeDescription
The 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
ConstructorsModifierConstructorDescriptionprotected
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. -
Method Summary
Modifier and TypeMethodDescriptionbindEnter
(MethodDescription.TypeToken typeToken) Binds this metadata handler for the enter advice.int
Returns a hint to supply to aClassReader
when parsing an advice method.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.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.protected void
translateFrame
(org.objectweb.asm.MethodVisitor methodVisitor, Advice.StackMapFrameHandler.Default.TranslationMode translationMode, boolean isStatic, MethodDescription.TypeToken typeToken, 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, wait
Methods inherited from interface net.bytebuddy.asm.Advice.StackMapFrameHandler
injectCompletionFrame, injectExceptionFrame, injectReturnFrame, translateFrame
Methods 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 expandFramestrue
if 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
-true
if 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
-true
if the current advice implies exit advice.copyArguments
-true
if 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
Binds this metadata handler for the enter advice.- Specified by:
bindEnter
in interfaceAdvice.StackMapFrameHandler.ForInstrumentedMethod
- Parameters:
typeToken
- The type token representing the advice method.- Returns:
- An appropriate metadata handler for the enter method.
-
getReaderHint
public int getReaderHint()Returns a hint to supply to aClassReader
when parsing an advice method.- Specified by:
getReaderHint
in 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, boolean isStatic, MethodDescription.TypeToken typeToken, 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.isStatic
-true
if the targeted type token represents a static method.typeToken
- A type token for 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.
-