Package org.apache.bcel.generic
Class BranchInstruction
- java.lang.Object
-
- org.apache.bcel.generic.Instruction
-
- org.apache.bcel.generic.BranchInstruction
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable,InstructionTargeter
- Direct Known Subclasses:
GotoInstruction,IfInstruction,JsrInstruction,Select
public abstract class BranchInstruction extends Instruction implements InstructionTargeter
Abstract super class for branching instructions like GOTO, IFEQ, etc.. Branch instructions may have a variable length, namely GOTO, JSR, LOOKUPSWITCH and TABLESWITCH.- See Also:
InstructionList, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected intindexprotected intpositionprotected InstructionHandletarget-
Fields inherited from class org.apache.bcel.generic.Instruction
length, opcode
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedBranchInstruction(short opcode, InstructionHandle target)Common super constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancontainsTarget(InstructionHandle ih)voiddump(java.io.DataOutputStream out)Dump instruction as byte code to stream out.intgetIndex()InstructionHandlegetTarget()protected intgetTargetOffset()protected intgetTargetOffset(InstructionHandle _target)protected voidinitFromFile(ByteSequence bytes, boolean wide)Read needed data (e.g.voidsetTarget(InstructionHandle target)Set branch targetjava.lang.StringtoString(boolean verbose)Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>protected intupdatePosition(int offset, int max_offset)Called by InstructionList.setPositions when setting the position for every instruction.voidupdateTarget(InstructionHandle old_ih, InstructionHandle new_ih)-
Methods inherited from class org.apache.bcel.generic.Instruction
accept, consumeStack, copy, equals, getComparator, getLength, getName, getOpcode, hashCode, produceStack, readInstruction, setComparator, toString, toString
-
-
-
-
Field Detail
-
index
protected int index
-
target
protected InstructionHandle target
-
position
protected int position
-
-
Constructor Detail
-
BranchInstruction
protected BranchInstruction(short opcode, InstructionHandle target)Common super constructor- Parameters:
opcode- Instruction opcodetarget- instruction to branch to
-
-
Method Detail
-
dump
public void dump(java.io.DataOutputStream out) throws java.io.IOExceptionDump instruction as byte code to stream out.- Overrides:
dumpin classInstruction- Parameters:
out- Output stream- Throws:
java.io.IOException
-
getTargetOffset
protected int getTargetOffset(InstructionHandle _target)
- Parameters:
_target- branch target- Returns:
- the offset to `target' relative to this instruction
-
getTargetOffset
protected int getTargetOffset()
- Returns:
- the offset to this instruction's target
-
updatePosition
protected int updatePosition(int offset, int max_offset)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) instructionsmax_offset- the maximum offset that may be caused by these instructions- Returns:
- additional offset caused by possible change of this instruction's length
-
toString
public java.lang.String toString(boolean verbose)
Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>- Overrides:
toStringin classInstruction- Parameters:
verbose- long/short format switch- Returns:
- mnemonic for instruction
-
initFromFile
protected void initFromFile(ByteSequence bytes, boolean wide) throws java.io.IOException
Read needed data (e.g. index) from file. Conversion to a InstructionHandle is done in InstructionList(byte[]).- Overrides:
initFromFilein classInstruction- Parameters:
bytes- input streamwide- wide prefix?- Throws:
java.io.IOException- may be thrown if the implementation needs to read data from the file- See Also:
InstructionList
-
getIndex
public final int getIndex()
- Returns:
- target offset in byte code
-
getTarget
public InstructionHandle getTarget()
- Returns:
- target of branch instruction
-
setTarget
public void setTarget(InstructionHandle target)
Set branch target- Parameters:
target- branch target
-
updateTarget
public void updateTarget(InstructionHandle old_ih, InstructionHandle new_ih)
- Specified by:
updateTargetin interfaceInstructionTargeter- Parameters:
old_ih- old targetnew_ih- new target
-
containsTarget
public boolean containsTarget(InstructionHandle ih)
- Specified by:
containsTargetin interfaceInstructionTargeter- Returns:
- true, if ih is target of this instruction
-
-