Class RuleTriggerMethodAdapter

    • Field Detail

      • signature

        private java.lang.String signature
      • exceptions

        protected java.lang.String[] exceptions
      • argumentTypes

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

        private org.objectweb.asm.Type saveValueType
      • argLocalIndices

        private int[] argLocalIndices
      • callArrayBindings

        private java.util.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 Detail

      • RuleTriggerMethodAdapter

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

      • 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 java.lang.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()
      • 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 java.lang.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​(java.lang.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,
                                  java.lang.String desc)
        Overrides:
        visitTypeInsn in class org.objectweb.asm.MethodVisitor
      • visitFieldInsn

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

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

        public void visitInvokeDynamicInsn​(java.lang.String name,
                                           java.lang.String desc,
                                           org.objectweb.asm.Handle bsm,
                                           java.lang.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​(java.lang.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,
                                       java.lang.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