Package org.apache.bcel.generic
Class InstructionHandle
java.lang.Object
org.apache.bcel.generic.InstructionHandle
- Direct Known Subclasses:
BranchHandle
Instances of this class give users a handle to the instructions contained in an InstructionList. Instruction objects
may be used more than once within a list, this is useful because it saves memory and may be much faster.
Within an InstructionList an InstructionHandle object is wrapped around all instructions, i.e., it implements a cell
in a doubly-linked list. From the outside only the next and the previous instruction (handle) are accessible. One can
traverse the list via an Enumeration returned by InstructionList.elements().
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final InstructionHandle[]Empty array.(package private) static final InstructionTargeter[]Empty array.protected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprivate Instructionprivate InstructionHandleprivate InstructionHandleprivate Set<InstructionTargeter> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidConvenience method, simply calls accept() on the contained instruction.voidaddAttribute(Object key, Object attr) Add an attribute to an instruction handle.protected voidDeprecated.Does nothing as of 6.3.1.voidDenote this handle is being referenced by t.(package private) voiddispose()Delete contents, i.e., remove user access.getAttribute(Object key) Gets attribute of an instruction handle.final Instruction(package private) static InstructionHandleFactory method.final InstructionHandlegetNext()intfinal InstructionHandlegetPrev()booleanvoidRemove all targeters, if any.voidremoveAttribute(Object key) Delete an attribute of an instruction handle.voidDenote this handle isn't referenced anymore by t.voidReplace current instruction contained in this handle.(package private) final InstructionHandlesetNext(InstructionHandle next) (package private) voidsetPosition(int pos) Sets the position, i.e., the byte code offset of the contained instruction.(package private) final InstructionHandlesetPrev(InstructionHandle prev) Temporarily swap the current instruction, without disturbing anything.toString()toString(boolean verbose) protected intupdatePosition(int offset, int maxOffset) Called by InstructionList.setPositions when setting the position for every instruction.
-
Field Details
-
EMPTY_ARRAY
Empty array.- Since:
- 6.6.0
-
EMPTY_INSTRUCTION_TARGETER_ARRAY
Empty array. -
next
-
prev
-
instruction
-
i_position
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
targeters
-
attributes
-
-
Constructor Details
-
InstructionHandle
-
-
Method Details
-
getInstructionHandle
Factory method. -
accept
Convenience method, simply calls accept() on the contained instruction.- Parameters:
v- Visitor object
-
addAttribute
Add an attribute to an instruction handle.- Parameters:
key- the key object to store/retrieve the attributeattr- the attribute to associate with this handle
-
addHandle
Deprecated.Does nothing as of 6.3.1.Does nothing. -
addTargeter
Denote this handle is being referenced by t. -
dispose
void dispose()Delete contents, i.e., remove user access. -
getAttribute
Gets attribute of an instruction handle.- Parameters:
key- the key object to store/retrieve the attribute
-
getAttributes
- Returns:
- all attributes associated with this handle
-
getInstruction
-
getNext
-
getPosition
public int getPosition()- Returns:
- the position, i.e., the byte code offset of the contained instruction. This is accurate only after InstructionList.setPositions() has been called.
-
getPrev
-
getTargeters
- Returns:
- null, if there are no targeters
-
hasTargeters
public boolean hasTargeters() -
removeAllTargeters
public void removeAllTargeters()Remove all targeters, if any. -
removeAttribute
Delete an attribute of an instruction handle.- Parameters:
key- the key object to retrieve the attribute
-
removeTargeter
Denote this handle isn't referenced anymore by t. -
setInstruction
Replace current instruction contained in this handle. Old instruction is disposed using Instruction.dispose(). -
setNext
- Parameters:
next- the next to set- Since:
- 6.0
-
setPosition
void setPosition(int pos) Sets the position, i.e., the byte code offset of the contained instruction. -
setPrev
- Parameters:
prev- the prev to set- Since:
- 6.0
-
swapInstruction
Temporarily swap the current instruction, without disturbing anything. Meant to be used by a debugger, implementing breakpoints. Current instruction is returned.Warning: if this is used on a BranchHandle then some methods such as getPosition() will still refer to the original cached instruction, whereas other BH methods may affect the cache and the replacement instruction.
-
toString
-
toString
- Returns:
- a (verbose) string representation of the contained instruction.
-
updatePosition
protected int updatePosition(int offset, int maxOffset) Called by InstructionList.setPositions when setting the position for every instruction. In the presence of variable length instructions 'setPositions()' performs multiple passes over the instruction list to calculate the correct (byte) positions and offsets by calling this function.- Parameters:
offset- additional offset caused by preceding (variable length) instructionsmaxOffset- the maximum offset that may be caused by these instructions- Returns:
- additional offset caused by possible change of this instruction's length
-