# Interface LocalVariable

All Superinterfaces:
  `ClassFileElement`, `CodeElement`, `PseudoInstruction`

public sealed interface LocalVariable extends PseudoInstruction
A pseudo-instruction which models a single entry in the `LocalVariableTable` attribute. Delivered as a `CodeElement` during traversal of the elements of a `CodeModel`, according to the setting of the `ClassFile.DebugElementsOption` option.

A local variable entry is composite:

    LocalVariable(
        int slot,
        String name,
        ClassDesc type,
        Label startScope,
        Label endScope
    )

Where `slot` is within `[0, 65535]`.

Another model, `LocalVariableInfo`, also models a local variable entry; it has no dependency on a `CodeModel` and represents of bci values as `int`s instead of `Label`s, and is used as components of a `LocalVariableTableAttribute`.

API Note:
  `LocalVariable` is used for all local variables in Java source code. If a local variable has a parameterized type, a type argument, or an array type of one of the previous types, a `LocalVariableType` should be created for that local variable as well.
Since:
  24
See Also:
  - `LocalVariableInfo`
  - `CodeBuilder::localVariable`
  - `ClassFile.DebugElementsOption`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Label`
  `endScope()`
  Returns the end range of the local variable scope.
  `Utf8Entry`
  `name()`
  Returns the local variable name.
  `static LocalVariable`
  `of(int slot, Utf8Entry nameEntry, Utf8Entry descriptorEntry, Label startScope, Label endScope)`
  Returns a local variable pseudo-instruction.
  `static LocalVariable`
  `of(int slot, String name, ClassDesc descriptor, Label startScope, Label endScope)`
  Returns a local variable pseudo-instruction.
  `int`
  `slot()`
  Returns the local variable slot.
  `Label`
  `startScope()`
  Returns the start range of the local variable scope.
  `Utf8Entry`
  `type()`
  Returns the local variable field descriptor string.
  `default ClassDesc`
  `typeSymbol()`
  Returns the local variable type, as a symbolic descriptor.

- ## Method Details

  - ### slot

    int slot()
    Returns the local variable slot. The value is within `[0, 65535]`.
    Returns:
      the local variable slot

  - ### name

    Utf8Entry name()
    Returns the local variable name.
    Returns:
      the local variable name

  - ### type

    Utf8Entry type()
    Returns the local variable field descriptor string.
    API Note:
      A symbolic descriptor for the type of the local variable is available through `typeSymbol()`.
    Returns:
      the local variable field descriptor string

  - ### typeSymbol

    default ClassDesc typeSymbol()
    Returns the local variable type, as a symbolic descriptor.
    Returns:
      the local variable type, as a symbolic descriptor

  - ### startScope

    Label startScope()
    Returns the start range of the local variable scope.
    Returns:
      the start range of the local variable scope

  - ### endScope

    Label endScope()
    Returns the end range of the local variable scope.
    Returns:
      the end range of the local variable scope

  - ### of

    static LocalVariable of(int slot, Utf8Entry nameEntry, Utf8Entry descriptorEntry, Label startScope, Label endScope)
    Returns a local variable pseudo-instruction. `slot` must be within `[0, 65535]`.
    Parameters:
      `slot` - the local variable slot
      `nameEntry` - the local variable name
      `descriptorEntry` - the local variable descriptor
      `startScope` - the start range of the local variable scope
      `endScope` - the end range of the local variable scope
    Returns:
      a local variable pseudo-instruction
    Throws:
      `IllegalArgumentException` - if `slot` is out of range

  - ### of

    static LocalVariable of(int slot, String name, ClassDesc descriptor, Label startScope, Label endScope)
    Returns a local variable pseudo-instruction. `slot` must be within `[0, 65535]`.
    Parameters:
      `slot` - the local variable slot
      `name` - the local variable name
      `descriptor` - the local variable descriptor
      `startScope` - the start range of the local variable scope
      `endScope` - the end range of the local variable scope
    Returns:
      a local variable pseudo-instruction
    Throws:
      `IllegalArgumentException` - if `slot` is out of range