Class RuleTriggerMethodAdapter

java.lang.Object
org.objectweb.asm.MethodVisitor
Direct Known Subclasses:
EntryTriggerAdapter.EntryTriggerMethodAdapter, ExceptionExitTriggerAdapter.ExceptionExitTriggerMethodAdapter, ExitTriggerAdapter.ExitTriggerMethodAdapter, FieldAccessTriggerAdapter.FieldAccessTriggerMethodAdapter, IndexParamAccessTriggerAdapter.IndexParamAccessTriggerMethodAdapter, InvokeTriggerAdapter.InvokeTriggerMethodAdapter, LineTriggerAdapter.LineTriggerMethodAdapter, NewArrayTriggerAdapter.NewArrayTriggerMethodAdapter, NewTriggerAdapter.NewTriggerMethodAdapter, SynchronizeTriggerAdapter.SynchronizeTriggerMethodAdapter, ThrowTriggerAdapter.ThrowTriggerMethodAdapter, VariableAccessTriggerAdapter.VariableAccessTriggerMethodAdapter

public class RuleTriggerMethodAdapter extends RuleGeneratorAdapter
class which provides base functionality extended by all the location-specific method trigger adapters
  • Field Details

    • ruleScript

      private RuleScript ruleScript
    • signature

      private String signature
    • exceptions

      protected String[] exceptions
    • argumentTypes

      private org.objectweb.asm.Type[] argumentTypes
    • saveValueType

      private org.objectweb.asm.Type saveValueType
    • argLocalIndices

      private int[] argLocalIndices
    • callArrayBindings

      private List<Binding> callArrayBindings
    • bindReturnOrThrowableValue

      private boolean bindReturnOrThrowableValue
    • bindInvokeParams

      private boolean bindInvokeParams
    • bindingIndicesSet

      private boolean bindingIndicesSet
    • returnBindingType

      private org.objectweb.asm.Type returnBindingType
    • cfg

      private CFG cfg
  • Constructor Details

    • RuleTriggerMethodAdapter

      RuleTriggerMethodAdapter(org.objectweb.asm.MethodVisitor mv, TransformContext transformContext, int access, String name, String descriptor, String signature, String[] exceptions)
  • Method Details

    • getInvokedTypes

      public org.objectweb.asm.Type[] getInvokedTypes()
      method overridden by AT INVOKE method adapter allowing types for the invoked method owner, parameters and return value to be identified. this default version should never get invoked
      Returns:
      an array containing the types of the invoked method owner, parameters and return value
    • getNewClassName

      public String getNewClassName()
      method overridden by AT NEW method trigger adapter allowing String value for NEWCLASS binding to be retrieved., this default version should never get invoked
      Returns:
      String value for NEWCLASS binding
    • getReturnBindingType

      public org.objectweb.asm.Type getReturnBindingType()
      method overridden by AT INVOKE method adapter allowing the type of the $! binding to be identified. this default version should only get invoked for an AT EXIT rule where it returns the trigger method return type. the overridden version should only get invoked for an AFTER INVOKE rule where it returns the invoked method return type
      Returns:
      the appropriate return type
    • setBindingIndices

      private void setBindingIndices()
    • alias

      private Binding alias(Binding binding, Bindings bindings, int localIdx)
    • doReturnOrThrowSave

      private int doReturnOrThrowSave()
    • doInvokeBindingsSave

      private int doInvokeBindingsSave()
    • doArgLoad

      private boolean doArgLoad(int saveSlot)
      stack an argument array containing all the values which need to be bound to parameters or local variables in the rule or a null pointer if no bindings are required. this method also inserts a copy of the array below the initial two top entries if any of the bindings can potentially be updated by the rule, allowing the updated values to be written back on return from the call to the rule engine.
      Parameters:
      saveSlot - a local variable slot containing either the return value which the trigger method is about to return or the Throwable the method is about to throw. this is only valid if, respectively, the rule location is AT EXIT/AFTER INVOKE or AT THROW and the rule body contains a reference to the return value ($!) or throwable value ($@).
      Returns:
      true if the rule may update the argument array and hence if a copy of the array has been inserted below the initial two top entries otherwise false.
    • doArgUpdate

      private void doArgUpdate()
      plant code to copy back any updated values from the argument array to the relevant local variable slots
    • inBytemanHandler

      protected boolean inBytemanHandler()
      return true if the current block is a handler which catches a byteman exception thrown by the byteman runtime
      Returns:
      true if the current block is a handler false if not
    • inBytemanTrigger

      protected boolean inBytemanTrigger()
      return true if the current block is in a trigger block injected by Byteman
      Returns:
      true if the current block is in a trigger block false if not
    • inRethrowHandler

      protected boolean inRethrowHandler()
      return true if the current block is handler which catches a thrown exception within the scope of a monitor enter in order to be able exit the monitor and rethrow the exception
      Returns:
      true if the current block is in a rethrow handler false if not
    • getMethodName

      protected String getMethodName()
    • visitCode

      public void visitCode()
      Overrides:
      visitCode in class org.objectweb.asm.MethodVisitor
    • visitInsn

      public void visitInsn(int opcode)
      Overrides:
      visitInsn in class org.objectweb.asm.MethodVisitor
    • visitIincInsn

      public void visitIincInsn(int var, int increment)
      Overrides:
      visitIincInsn in class org.objectweb.asm.MethodVisitor
    • visitIntInsn

      public void visitIntInsn(int opcode, int operand)
      Overrides:
      visitIntInsn in class org.objectweb.asm.MethodVisitor
    • visitLdcInsn

      public void visitLdcInsn(Object cst)
      Overrides:
      visitLdcInsn in class org.objectweb.asm.MethodVisitor
    • visitVarInsn

      public void visitVarInsn(int opcode, int var)
      Description copied from class: RuleGeneratorAdapter
      override this so we can see track which local var slots are in use and avoid overwriting them
      Overrides:
      visitVarInsn in class RuleGeneratorAdapter
      Parameters:
      opcode - the bytecode operation
      var - local variable index
    • visitTypeInsn

      public void visitTypeInsn(int opcode, String desc)
      Overrides:
      visitTypeInsn in class org.objectweb.asm.MethodVisitor
    • visitFieldInsn

      public void visitFieldInsn(int opcode, String owner, String name, String desc)
      Overrides:
      visitFieldInsn in class org.objectweb.asm.MethodVisitor
    • visitMethodInsn

      public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
      Overrides:
      visitMethodInsn in class org.objectweb.asm.MethodVisitor
    • visitInvokeDynamicInsn

      public void visitInvokeDynamicInsn(String name, String desc, org.objectweb.asm.Handle bsm, Object... bsmArgs)
      Overrides:
      visitInvokeDynamicInsn in class org.objectweb.asm.MethodVisitor
    • visitJumpInsn

      public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
      Overrides:
      visitJumpInsn in class org.objectweb.asm.MethodVisitor
    • visitLabel

      public void visitLabel(org.objectweb.asm.Label label)
      Overrides:
      visitLabel in class org.objectweb.asm.MethodVisitor
    • visitTriggerStart

      public void visitTriggerStart(org.objectweb.asm.Label label)
    • visitTriggerEnd

      public void visitTriggerEnd(org.objectweb.asm.Label label)
    • visitTableSwitchInsn

      public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
      Overrides:
      visitTableSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitLookupSwitchInsn

      public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
      Overrides:
      visitLookupSwitchInsn in class org.objectweb.asm.MethodVisitor
    • visitMultiANewArrayInsn

      public void visitMultiANewArrayInsn(String desc, int dims)
      Overrides:
      visitMultiANewArrayInsn in class org.objectweb.asm.MethodVisitor
    • visitTryCatchBlock

      public void visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, String type)
      Overrides:
      visitTryCatchBlock in class org.objectweb.asm.MethodVisitor
    • visitMaxs

      public void visitMaxs(int maxStack, int maxLocals)
      Description copied from class: RuleGeneratorAdapter
      ensure we allow enough room for any extra locals on the stack
      Overrides:
      visitMaxs in class RuleGeneratorAdapter
      Parameters:
      maxStack - the maximum stack depth
      maxLocals - the maximum local count
    • visitEnd

      public void visitEnd()
      Overrides:
      visitEnd in class org.objectweb.asm.MethodVisitor
    • injectTriggerPoint

      protected void injectTriggerPoint()
      inject the rule trigger code