Package org.jboss.byteman.agent.adapter
Class RuleTriggerMethodAdapter
- java.lang.Object
-
- org.objectweb.asm.MethodVisitor
-
- org.jboss.byteman.agent.adapter.RuleMethodAdapter
-
- org.jboss.byteman.agent.adapter.RuleGeneratorAdapter
-
- org.jboss.byteman.agent.adapter.RuleTriggerMethodAdapter
-
public class RuleTriggerMethodAdapter extends RuleGeneratorAdapter
class which provides base functionality extended by all the location-specific method trigger adapters
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.jboss.byteman.agent.adapter.RuleMethodAdapter
RuleMethodAdapter.LocalVar
-
-
Field Summary
Fields Modifier and Type Field Description protected String[]
exceptions
-
Fields inherited from class org.jboss.byteman.agent.adapter.RuleGeneratorAdapter
ADD, AND, DIV, EQ, GE, GT, LE, LT, MUL, NE, NEG, OR, REM, SHL, SHR, SUB, USHR, XOR
-
Fields inherited from class org.jboss.byteman.agent.adapter.RuleMethodAdapter
access, descriptor, name, rule, transformContext
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.protected String
getMethodName()
org.objectweb.asm.Type
getReturnBindingType()
method overridden by AT INVOKE method adapter allowing the type of the $! binding to be identified.protected boolean
inBytemanHandler()
return true if the current block is a handler which catches a byteman exception thrown by the byteman runtimeprotected boolean
inBytemanTrigger()
return true if the current block is in a trigger block injected by Bytemanprotected void
injectTriggerPoint()
inject the rule trigger codeprotected 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 exceptionvoid
visitCode()
void
visitEnd()
void
visitFieldInsn(int opcode, String owner, String name, String desc)
void
visitIincInsn(int var, int increment)
void
visitInsn(int opcode)
void
visitIntInsn(int opcode, int operand)
void
visitInvokeDynamicInsn(String name, String desc, org.objectweb.asm.Handle bsm, Object... bsmArgs)
void
visitJumpInsn(int opcode, org.objectweb.asm.Label label)
void
visitLabel(org.objectweb.asm.Label label)
void
visitLdcInsn(Object cst)
void
visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
void
visitMaxs(int maxStack, int maxLocals)
ensure we allow enough room for any extra locals on the stackvoid
visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
void
visitMultiANewArrayInsn(String desc, int dims)
void
visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label dflt, org.objectweb.asm.Label[] labels)
void
visitTriggerEnd(org.objectweb.asm.Label label)
void
visitTriggerStart(org.objectweb.asm.Label label)
void
visitTryCatchBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label handler, String type)
void
visitTypeInsn(int opcode, String desc)
void
visitVarInsn(int opcode, int var)
override this so we can see track which local var slots are in use and avoid overwriting them-
Methods inherited from class org.jboss.byteman.agent.adapter.RuleGeneratorAdapter
arrayLength, arrayLoad, arrayStore, box, cast, catchException, checkCast, dup, dup2, dup2X1, dup2X2, dupX1, dupX2, endMethod, getField, getLocalType, getStatic, goTo, ifCmp, ifICmp, ifNonNull, ifNull, ifZCmp, iinc, instanceOf, invokeConstructor, invokeDynamic, invokeInterface, invokeStatic, invokeVirtual, loadArg, loadArgArray, loadArgs, loadArgs, loadLocal, loadThis, mark, mark, math, monitorEnter, monitorExit, newArray, newInstance, newLabel, newLocal, not, pop, pop2, popLocal, push, push, push, push, push, push, push, push, putField, putStatic, ret, returnValue, storeArg, storeLocal, swap, swap, tableSwitch, tableSwitch, throwException, throwException, unbox, visitFrame
-
Methods inherited from class org.jboss.byteman.agent.adapter.RuleMethodAdapter
getTriggerClassName, lookup, visitLocalVariable
-
Methods inherited from class org.objectweb.asm.MethodVisitor
visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitInsnAnnotation, visitLineNumber, visitLocalVariableAnnotation, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTypeAnnotation
-
-
-
-
Field Detail
-
exceptions
protected 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
-
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
-
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 classorg.objectweb.asm.MethodVisitor
-
visitInsn
public void visitInsn(int opcode)
- Overrides:
visitInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIincInsn
public void visitIincInsn(int var, int increment)
- Overrides:
visitIincInsn
in classorg.objectweb.asm.MethodVisitor
-
visitIntInsn
public void visitIntInsn(int opcode, int operand)
- Overrides:
visitIntInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLdcInsn
public void visitLdcInsn(Object cst)
- Overrides:
visitLdcInsn
in classorg.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 classRuleGeneratorAdapter
- Parameters:
opcode
- the bytecode operationvar
- local variable index
-
visitTypeInsn
public void visitTypeInsn(int opcode, String desc)
- Overrides:
visitTypeInsn
in classorg.objectweb.asm.MethodVisitor
-
visitFieldInsn
public void visitFieldInsn(int opcode, String owner, String name, String desc)
- Overrides:
visitFieldInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMethodInsn
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
- Overrides:
visitMethodInsn
in classorg.objectweb.asm.MethodVisitor
-
visitInvokeDynamicInsn
public void visitInvokeDynamicInsn(String name, String desc, org.objectweb.asm.Handle bsm, Object... bsmArgs)
- Overrides:
visitInvokeDynamicInsn
in classorg.objectweb.asm.MethodVisitor
-
visitJumpInsn
public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
- Overrides:
visitJumpInsn
in classorg.objectweb.asm.MethodVisitor
-
visitLabel
public void visitLabel(org.objectweb.asm.Label label)
- Overrides:
visitLabel
in classorg.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 classorg.objectweb.asm.MethodVisitor
-
visitLookupSwitchInsn
public void visitLookupSwitchInsn(org.objectweb.asm.Label dflt, int[] keys, org.objectweb.asm.Label[] labels)
- Overrides:
visitLookupSwitchInsn
in classorg.objectweb.asm.MethodVisitor
-
visitMultiANewArrayInsn
public void visitMultiANewArrayInsn(String desc, int dims)
- Overrides:
visitMultiANewArrayInsn
in classorg.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 classorg.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 classRuleGeneratorAdapter
- Parameters:
maxStack
- the maximum stack depthmaxLocals
- the maximum local count
-
visitEnd
public void visitEnd()
- Overrides:
visitEnd
in classorg.objectweb.asm.MethodVisitor
-
injectTriggerPoint
protected void injectTriggerPoint()
inject the rule trigger code
-
-