org.apache.bcel.generic

## 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 super class for LOOKUPSWITCH and TABLESWITCH instructions.

  We use our super's `target` property as the default target.

  See Also:
    `LOOKUPSWITCH`, `TABLESWITCH`, `InstructionList`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `fixed_length` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter
    `protected int[]` | `indices` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter
    `protected int[]` | `match` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter
    `protected int` | `match_length` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter
    `protected int` | `padding` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter
    `protected InstructionHandle[]` | `targets` Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - ### Fields inherited from class org.apache.bcel.generic.BranchInstruction

      `index, position, target`

    - ### Fields inherited from class org.apache.bcel.generic.Instruction

      `length, opcode`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Object` | `clone()`
    `boolean` | `containsTarget(InstructionHandle ih)` Checks whether this targeter targets the specified instruction handle.
    `void` | `dump(DataOutputStream out)` Dump instruction as byte code to stream out.
    `int[]` | `getIndices()`
    `int[]` | `getMatchs()`
    `InstructionHandle[]` | `getTargets()`
    `protected void` | `initFromFile(ByteSequence bytes, boolean wide)` Read needed data (e.g.
    `void` | `setTarget(int i, InstructionHandle target)` Set branch target for `i'th case
    `String` | `toString(boolean verbose)` Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>
    `protected int` | `updatePosition(int offset, int maxOffset)` Since this is a variable length instruction, it may shift the following instructions which then need to update their position.
    `void` | `updateTarget(InstructionHandle oldIh, InstructionHandle newIh)` Replaces the target of this targeter from this old handle to the new handle.

    - ### Methods inherited from class org.apache.bcel.generic.BranchInstruction

      `getIndex, getPosition, getTarget, getTargetOffset, getTargetOffset, setIndex, setPosition, setTarget`

    - ### Methods inherited from class org.apache.bcel.generic.Instruction

      `accept, consumeStack, copy, equals, getComparator, getLength, getName, getOpcode, hashCode, isValidByte, isValidShort, produceStack, readInstruction, setComparator, toString, toString`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.apache.bcel.generic.StackConsumer

      `consumeStack`

    - ### Methods inherited from interface org.apache.bcel.generic.StackProducer

      `produceStack`

- - ### Field Detail

    - #### match

          @Deprecated
          protected int[] match

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - #### indices

          @Deprecated
          protected int[] indices

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - #### targets

          @Deprecated
          protected InstructionHandle[] targets

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - #### fixed_length

          @Deprecated
          protected int fixed_length

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - #### match_length

          @Deprecated
          protected int match_length

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

    - #### padding

          @Deprecated
          protected int padding

      Deprecated. (since 6.0) will be made private; do not access directly, use getter/setter

  - ### Method Detail

    - #### clone

          protected Object clone()
                          throws CloneNotSupportedException

      Overrides:
        `clone` in class `Object`
      Throws:
        `CloneNotSupportedException`

    - #### containsTarget

          public boolean containsTarget(InstructionHandle ih)

      Description copied from interface: `InstructionTargeter`
      Checks whether this targeter targets the specified instruction handle.
      Specified by:
        `containsTarget` in interface `InstructionTargeter`
      Overrides:
        `containsTarget` in class `BranchInstruction`
      Returns:
        true, if ih is target of this instruction

    - #### dump

          public void dump(DataOutputStream out)
                    throws IOException

      Dump instruction as byte code to stream out.
      Overrides:
        `dump` in class `BranchInstruction`
      Parameters:
        `out` - Output stream
      Throws:
        `IOException`

    - #### getIndices

          public int[] getIndices()

      Returns:
        array of match target offsets

    - #### getMatchs

          public int[] getMatchs()

      Returns:
        array of match indices

    - #### getTargets

          public InstructionHandle[] getTargets()

      Returns:
        array of match targets

    - #### initFromFile

          protected void initFromFile(ByteSequence bytes,
                                      boolean wide)
                               throws IOException

      Read needed data (e.g. index) from file.
      Overrides:
        `initFromFile` in class `BranchInstruction`
      Parameters:
        `bytes` - input stream
        `wide` - wide prefix?
      Throws:
        `IOException` - may be thrown if the implementation needs to read data from the file
      See Also:
        `InstructionList`

    - #### setTarget

          public void setTarget(int i,
                                InstructionHandle target)

      Set branch target for `i'th case

    - #### toString

          public String toString(boolean verbose)

      Description copied from class: `BranchInstruction`
      Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>
      Overrides:
        `toString` in class `BranchInstruction`
      Parameters:
        `verbose` - long/short format switch
      Returns:
        mnemonic for instruction

    - #### updatePosition

          protected int updatePosition(int offset,
                                       int maxOffset)

      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:
        `updatePosition` in class `BranchInstruction`
      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

          public void updateTarget(InstructionHandle oldIh,
                                   InstructionHandle newIh)

      Description copied from interface: `InstructionTargeter`
      Replaces the target of this targeter from this old handle to the new handle.
      Specified by:
        `updateTarget` in interface `InstructionTargeter`
      Overrides:
        `updateTarget` in class `BranchInstruction`
      Parameters:
        `oldIh` - old target
        `newIh` - new target

Copyright © 2004–2022 The Apache Software Foundation. All rights reserved.