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.
  • Field Details

    • EMPTY

      protected static final Object[] EMPTY
      An empty array indicating an empty frame.
    • instrumentedType

      protected final TypeDescription instrumentedType
      The instrumented type.
    • instrumentedMethod

      protected final MethodDescription instrumentedMethod
      The instrumented method.
    • initialTypes

      protected final List<? extends TypeDescription> initialTypes
      A list of virtual method arguments that are explicitly added before any code execution.
    • latentTypes

      protected final List<? extends TypeDescription> latentTypes
      A list of virtual arguments that are available after the enter advice method is executed.
    • preMethodTypes

      protected final List<? extends TypeDescription> preMethodTypes
      A list of virtual method arguments that are available before the instrumented method is executed.
    • postMethodTypes

      protected final List<? extends TypeDescription> postMethodTypes
      A list of virtual method arguments that are available after the instrumented method has completed.
    • expandFrames

      protected final boolean expandFrames
      true if the meta data handler is expected to expand its frames.
    • currentFrameDivergence

      protected int currentFrameDivergence
      The 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 interface Advice.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 a ClassReader when parsing an advice method.
      Specified by:
      getReaderHint in interface Advice.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.