# Interface BranchInstruction

All Superinterfaces:
  `ClassFileElement, CodeElement, Instruction`

public sealed interface BranchInstruction extends Instruction
Models a branching instruction (conditional or unconditional) in the `code` array of a `Code` attribute. Corresponding opcodes have a kind of `Opcode.Kind.BRANCH`. Delivered as a `CodeElement` when traversing the elements of a `CodeModel`.

A branch instruction is composite:

    BranchInstruction(
        Opcode opcode,
        Label target
    )

Due to physical restrictions, some types of instructions cannot encode labels too far away in the list of code elements. In such cases, the `ClassFile.ShortJumpsOption` controls how an invalid branch instruction model is written by a `CodeBuilder`.

Since:
  24
See Also:
  - `Opcode.Kind.BRANCH`
  - `CodeBuilder::branch`
  - `ClassFile.ShortJumpsOption`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static BranchInstruction`
  `of(Opcode op, Label target)`
  Returns a branch instruction.
  `Label`
  `target()`
  Returns the branch target of this instruction.

  ### Methods declared in interface Instruction

  `opcode, sizeInBytes`
  Modifier and Type
  Method
  Description
  `Opcode`
  `opcode()`
  Returns the operation of this instruction.
  `int`
  `sizeInBytes()`
  Returns the size in bytes of this instruction.

- ## Method Details

  - ### target

    Label target()
    Returns the branch target of this instruction.
    Returns:
      the branch target of this instruction

  - ### of

    static BranchInstruction of(Opcode op, Label target)
    Returns a branch instruction.
    Parameters:
      `op` - the opcode for the specific type of branch instruction, which must be of kind `Opcode.Kind.BRANCH`
      `target` - the target of the branch
    Returns:
      a branch instruction
    Throws:
      `IllegalArgumentException` - if the opcode kind is not `Opcode.Kind.BRANCH`