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
-
- 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
-
-
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 private int[]
argLocalIndices
private org.objectweb.asm.Type[]
argumentTypes
private boolean
bindingIndicesSet
private boolean
bindInvokeParams
private boolean
bindReturnOrThrowableValue
private java.util.List<Binding>
callArrayBindings
private CFG
cfg
protected java.lang.String[]
exceptions
private org.objectweb.asm.Type
returnBindingType
private RuleScript
ruleScript
private org.objectweb.asm.Type
saveValueType
private java.lang.String
signature
-
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, localVarsByName, name, rule, transformContext
-
-
Constructor Summary
Constructors Constructor Description 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 Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private Binding
alias(Binding binding, Bindings bindings, int localIdx)
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.private void
doArgUpdate()
plant code to copy back any updated values from the argument array to the relevant local variable slotsprivate int
doInvokeBindingsSave()
private int
doReturnOrThrowSave()
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 java.lang.String
getMethodName()
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 invokedorg.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 exceptionprivate void
setBindingIndices()
void
visitCode()
void
visitEnd()
void
visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)
void
visitIincInsn(int var, int increment)
void
visitInsn(int opcode)
void
visitIntInsn(int opcode, int operand)
void
visitInvokeDynamicInsn(java.lang.String name, java.lang.String desc, org.objectweb.asm.Handle bsm, java.lang.Object... bsmArgs)
void
visitJumpInsn(int opcode, org.objectweb.asm.Label label)
void
visitLabel(org.objectweb.asm.Label label)
void
visitLdcInsn(java.lang.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, java.lang.String owner, java.lang.String name, java.lang.String desc, boolean itf)
void
visitMultiANewArrayInsn(java.lang.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, java.lang.String type)
void
visitTypeInsn(int opcode, java.lang.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
-
ruleScript
private RuleScript ruleScript
-
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 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(java.lang.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, java.lang.String desc)
- Overrides:
visitTypeInsn
in classorg.objectweb.asm.MethodVisitor
-
visitFieldInsn
public void visitFieldInsn(int opcode, java.lang.String owner, java.lang.String name, java.lang.String desc)
- Overrides:
visitFieldInsn
in classorg.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 classorg.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 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(java.lang.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, java.lang.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
-
-