# Interface DiscontinuedInstruction.JsrInstruction

All Superinterfaces:
  `ClassFileElement, CodeElement, DiscontinuedInstruction, Instruction`

Enclosing interface:
  `DiscontinuedInstruction`

public static sealed interface DiscontinuedInstruction.JsrInstruction extends DiscontinuedInstruction
Models jump subroutine instructions discontinued from the `code` array of a `Code` attribute since class file major version 51 (JVMS 4.9.1). Corresponding opcodes have a kind of `Opcode.Kind.DISCONTINUED_JSR`. Delivered as a `CodeElement` when traversing the elements of a `CodeModel`.

A jump subroutine instruction is composite:

    JsrInstruction(Label target)

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

Jump subroutine instructions push a `returnAddress` value to the operand stack, and `astore` series of instructions can then store this value to a local variable slot.

API Note:
  Jump subroutine instructions are discontinued to enforce verification by type checking (JVMS 4.10.1) using the `StackMapTable` attribute.
Since:
  24
See Also:
  - `Opcode.Kind.DISCONTINUED_JSR`
  - `StackMapTableAttribute`

## Nested Class Summary

### Nested classes/interfaces declared in interface DiscontinuedInstruction

`DiscontinuedInstruction.JsrInstruction, DiscontinuedInstruction.RetInstruction`

## Method Summary

Modifier and Type
Method
Description
`static DiscontinuedInstruction.JsrInstruction`
`of(Label target)`
Returns a jump subroutine instruction.
`static DiscontinuedInstruction.JsrInstruction`
`of(Opcode op, Label target)`
Returns a jump subroutine instruction.
`Label`
`target()`
Returns the target of the jump subroutine instruction.

### Methods declared in interface Instruction

`opcode, sizeInBytes`

## Method Details

### target

Label target()
Returns the target of the jump subroutine instruction.

Returns:
  the target of the jump subroutine instruction

### of

static DiscontinuedInstruction.JsrInstruction of(Opcode op, Label target)
Returns a jump subroutine instruction.

API Note:
  The explicit `op` argument allows creating `jsr_w` instructions to avoid short jumps.
Parameters:
  `op` - the opcode for the specific type of jump subroutine instruction, which must be of kind `Opcode.Kind.DISCONTINUED_JSR`
  `target` - target label of the subroutine
Returns:
  a jump subroutine instruction
Throws:
  `IllegalArgumentException` - if the opcode kind is not `Opcode.Kind.DISCONTINUED_JSR`.

### of

static DiscontinuedInstruction.JsrInstruction of(Label target)
Returns a jump subroutine instruction.

Parameters:
  `target` - target label of the subroutine
Returns:
  a jump subroutine instruction