# Interface Subroutine

public interface Subroutine
This interface defines properties of JVM bytecode subroutines. Note that it is 'abused' to maintain the top-level code in a consistent fashion, too.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `contains(InstructionHandle inst)`
  Returns if the given InstructionHandle refers to an instruction that is part of this subroutine.
  `int[]`
  `getAccessedLocalsIndices()`
  Returns an int[] containing the indices of the local variable slots accessed by this Subroutine (read-accessed, write-accessed or both); local variables referenced by subroutines of this subroutine are not included.
  `InstructionHandle[]`
  `getEnteringJsrInstructions()`
  Returns all the JsrInstructions that have the first instruction of this subroutine as their target.
  `InstructionHandle[]`
  `getInstructions()`
  Returns all instructions that together form this subroutine.
  `InstructionHandle`
  `getLeavingRET()`
  Returns the one and only RET that leaves the subroutine.
  `int[]`
  `getRecursivelyAccessedLocalsIndices()`
  Returns an int[] containing the indices of the local variable slots accessed by this Subroutine (read-accessed, write-accessed or both); local variables referenced by subroutines of this subroutine are included.
  `Subroutine[]`
  `subSubs()`
  Returns the subroutines that are directly called from this subroutine.

- ## Method Details

  - ### contains

    boolean contains(InstructionHandle inst)
    Returns if the given InstructionHandle refers to an instruction that is part of this subroutine. This is a convenience method that saves iteration over the InstructionHandle objects returned by getInstructions().
    Parameters:
      `inst` - The InstructionHandle to test.
    Returns:
      Whether the given InstructionHandle refers to an instruction that is part of this subroutine.
    See Also:
      - `getInstructions()`

  - ### getAccessedLocalsIndices

    int[] getAccessedLocalsIndices()
    Returns an int[] containing the indices of the local variable slots accessed by this Subroutine (read-accessed, write-accessed or both); local variables referenced by subroutines of this subroutine are not included.
    Returns:
      An int[] containing the indices of the local variable slots.
    See Also:
      - `getRecursivelyAccessedLocalsIndices()`

  - ### getEnteringJsrInstructions

    InstructionHandle[] getEnteringJsrInstructions()
    Returns all the JsrInstructions that have the first instruction of this subroutine as their target. Must not be invoked on the 'top-level subroutine'.
    Returns:
      The JsrInstructions that have the first instruction of this subroutine as their target.

  - ### getInstructions

    InstructionHandle[] getInstructions()
    Returns all instructions that together form this subroutine. Note that an instruction is part of exactly one subroutine (the top-level code is considered to be a special subroutine) - else it is not reachable at all (dead code).
    Returns:
      All instructions that together form this subroutine.

  - ### getLeavingRET

    InstructionHandle getLeavingRET()
    Returns the one and only RET that leaves the subroutine. Note that JustIce has a pretty rigid notion of a subroutine. Must not be invoked on the 'top-level subroutine'.
    Returns:
      The one and only RET that leaves the subroutine.
    See Also:
      - `Subroutines`

  - ### getRecursivelyAccessedLocalsIndices

    int[] getRecursivelyAccessedLocalsIndices()
    Returns an int[] containing the indices of the local variable slots accessed by this Subroutine (read-accessed, write-accessed or both); local variables referenced by subroutines of this subroutine are included.
    Returns:
      An int[] containing the indices of the local variable slots.
    See Also:
      - `getAccessedLocalsIndices()`

  - ### subSubs

    Subroutine[] subSubs()
    Returns the subroutines that are directly called from this subroutine.
    Returns:
      The subroutines that are directly called from this subroutine.