Class Select
java.lang.Object
org.apache.bcel.generic.Instruction
org.apache.bcel.generic.BranchInstruction
org.apache.bcel.generic.Select
- All Implemented Interfaces:
Cloneable, InstructionTargeter, StackConsumer, StackProducer, VariableLengthInstruction
- Direct Known Subclasses:
LOOKUPSWITCH, TABLESWITCH
public abstract class Select
extends BranchInstruction
implements VariableLengthInstruction, StackConsumer, StackProducer
Select - Abstract superclass for LOOKUPSWITCH and TABLESWITCH instructions.
We use our super's target property as the default target.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected int[]Deprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected int[]Deprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected InstructionHandle[]Deprecated.(since 6.0) will be made private; do not access directly, use getter/setterFields inherited from class BranchInstruction
index, position, targetModifier and TypeFieldDescriptionprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected intDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterprotected InstructionHandleDeprecated.(since 6.0) will be made private; do not access directly, use getter/setterFields inherited from class Instruction
length, opcode -
Method Summary
Modifier and TypeMethodDescriptionprotected Objectclone()booleanTests whether this targeter targets the specified instruction handle.voiddump(DataOutputStream out) Dumps instruction as byte code to stream out.int[]Gets the match target offsets.int[]Gets the match indices.Gets the match targets.protected voidinitFromFile(ByteSequence bytes, boolean wide) Reads needed data (for example index) from file.voidsetTarget(int i, InstructionHandle target) Sets branch target for 'i'th case.toString(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 maxOffset) Since this is a variable length instruction, it may shift the following instructions which then need to update their position.voidupdateTarget(InstructionHandle oldIh, InstructionHandle newIh) Replaces the target of this targeter from this old handle to the new handle.Methods inherited from class BranchInstruction
getIndex, getPosition, getTarget, getTargetOffset, getTargetOffset, setIndex, setPosition, setTargetModifier and TypeMethodDescriptionfinal intgetIndex()Gets the target offset in byte code.protected intGets the position.Gets the target of branch instruction.protected intGets the offset to this instruction's target.protected intgetTargetOffset(InstructionHandle target) Gets the offset to target relative to this instruction.protected voidsetIndex(int index) Sets the index.protected voidsetPosition(int position) Sets the position.voidsetTarget(InstructionHandle target) Sets branch target.Methods inherited from class Instruction
accept, consumeStack, copy, equals, getComparator, getLength, getName, getOpcode, hashCode, isValidByte, isValidShort, produceStack, readInstruction, setComparator, toString, toStringModifier and TypeMethodDescriptionabstract voidCall corresponding visitor method(s).intThis method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.copy()Use with caution, since 'BranchInstruction's have a 'target' reference which is not copied correctly (only basic types are).booleanTests for equality, delegated to comparatorstatic InstructionComparatorDeprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodsintGets the length (in bytes) of instruction.getName()Gets the name of instruction, that is, opcode name.shortGets this instruction's opcode.inthashCode()Gets the hashCode of this object.static booleanisValidByte(int value) Tests if the value can fit in a byte (signed).static booleanisValidShort(int value) Tests if the value can fit in a short (signed).intThis method also gives right results for instructions whose effect on the stack depends on the constant pool entry they reference.static InstructionreadInstruction(ByteSequence bytes) Reads an instruction from (byte code) input stream and return the appropriate object.static voidDeprecated.(6.0) use the built in comparator, or wrap this class in another object that implements these methodstoString()toString(ConstantPool cp) Gets the mnemonic for instruction with symbolic references resolved.Methods inherited from interface StackConsumer
consumeStackModifier and TypeMethodDescriptionintGets how many words are consumed from stack.Methods inherited from interface StackProducer
produceStackModifier and TypeMethodDescriptionintGets how many words are produced on stack.
-
Field Details
-
match
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
indices
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
targets
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
fixed_length
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
match_length
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter -
padding
Deprecated.(since 6.0) will be made private; do not access directly, use getter/setter
-
-
Method Details
-
clone
- Overrides:
clonein classObject- Throws:
CloneNotSupportedException
-
containsTarget
Description copied from interface:InstructionTargeterTests whether this targeter targets the specified instruction handle.- Specified by:
containsTargetin interfaceInstructionTargeter- Overrides:
containsTargetin classBranchInstruction- Parameters:
ih- The instruction handle to test.- Returns:
- true, if ih is target of this instruction.
-
dump
Dumps instruction as byte code to stream out.- Overrides:
dumpin classBranchInstruction- Parameters:
out- Output stream.- Throws:
IOException- Thrown when an I/O exception of some sort has occurred.
-
getIndices
-
getMatchs
-
getTargets
-
initFromFile
Reads needed data (for example index) from file.- Overrides:
initFromFilein classBranchInstruction- Parameters:
bytes- input stream.wide- wide prefix?- Throws:
IOException- Thrown if the implementation needs to read data from the file- See Also:
-
setTarget
Sets branch target for 'i'th case.- Parameters:
i- The case index.target- The branch target.
-
toString
Description copied from class:BranchInstructionLong output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>- Overrides:
toStringin classBranchInstruction- Parameters:
verbose- long/short format switch.- Returns:
- mnemonic for instruction.
-
updatePosition
Since this is a variable length instruction, it may shift the following instructions which then need to update their position. 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.- Overrides:
updatePositionin classBranchInstruction- Parameters:
offset- additional offset caused by preceding (variable length) instructions.maxOffset- The maximum offset that may be caused by these instructions.- Returns:
- additional offset caused by possible change of this instruction's length.
-
updateTarget
Description copied from interface:InstructionTargeterReplaces the target of this targeter from this old handle to the new handle.- Specified by:
updateTargetin interfaceInstructionTargeter- Overrides:
updateTargetin classBranchInstruction- Parameters:
oldIh- old target.newIh- new target.
-