Package org.codehaus.groovy.classgen.asm

# Class BytecodeVariable

java.lang.Object
org.codehaus.groovy.classgen.asm.BytecodeVariable

public class BytecodeVariable extends Object
Represents compile time variable metadata while compiling a method.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final BytecodeVariable`
  `SUPER_VARIABLE`
  Sentinel metadata for the implicit `super` receiver.
  `static final BytecodeVariable`
  `THIS_VARIABLE`
  Sentinel metadata for the implicit `this` receiver.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BytecodeVariable(int index, ClassNode type, String name, int prevCurrent)`
  Creates bytecode metadata for a local variable slot.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `closeRange(org.objectweb.asm.Label end)`
  Ends the currently open local-variable-table range at the given label, recording it for later emission.
  `List<org.objectweb.asm.Label[]>`
  `getClosedRanges()`
  `org.objectweb.asm.Label`
  `getEndLabel()`
  `int`
  `getIndex()`
  `String`
  `getName()`
  `int`
  `getPrevIndex()`
  `org.objectweb.asm.Label`
  `getStartLabel()`
  `ClassNode`
  `getType()`
  `boolean`
  `isDynamicTyped()`
  `boolean`
  `isHolder()`
  `boolean`
  `isRangeClosed()`
  `void`
  `reopenRange(org.objectweb.asm.Label start)`
  Starts a new local-variable-table range at the given label after a `closeRange(org.objectweb.asm.Label)`.
  `void`
  `setDynamicTyped(boolean dynamicTyped)`
  Marks whether the variable should be treated as dynamically typed.
  `void`
  `setEndLabel(org.objectweb.asm.Label endLabel)`
  Sets the end label used for local-variable table metadata.
  `void`
  `setHolder(boolean holder)`
  Marks whether this variable must be stored through a holder object.
  `void`
  `setStartLabel(org.objectweb.asm.Label startLabel)`
  Sets the start label used for local-variable table metadata.
  `void`
  `setType(ClassNode type)`
  Updates the tracked variable type.
  `String`
  `toString()`

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

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### THIS_VARIABLE

    public static final BytecodeVariable THIS_VARIABLE
    Sentinel metadata for the implicit `this` receiver.

  - ### SUPER_VARIABLE

    public static final BytecodeVariable SUPER_VARIABLE
    Sentinel metadata for the implicit `super` receiver.

- ## Constructor Details

  - ### BytecodeVariable

    public BytecodeVariable(int index, ClassNode type, String name, int prevCurrent)
    Creates bytecode metadata for a local variable slot.
    Parameters:
      `index` - the JVM local-variable index
      `type` - the variable type
      `name` - the variable name
      `prevCurrent` - the previous current-variable index

- ## Method Details

  - ### getIndex

    public int getIndex()
    Returns:
      the stack index for this variable

  - ### getName

    public String getName()
    Returns:
      the source-level variable name

  - ### getType

    public ClassNode getType()
    Returns:
      the variable type

  - ### setType

    public void setType(ClassNode type)
    Updates the tracked variable type.
    Parameters:
      `type` - the new variable type

  - ### getPrevIndex

    public int getPrevIndex()
    Returns:
      the previous current-variable index

  - ### isDynamicTyped

    public boolean isDynamicTyped()
    Returns:
      whether the variable uses dynamic typing

  - ### setDynamicTyped

    public void setDynamicTyped(boolean dynamicTyped)
    Marks whether the variable should be treated as dynamically typed.
    Parameters:
      `dynamicTyped` - `true` if the variable is dynamically typed

  - ### isHolder

    public boolean isHolder()
    Returns:
      is this local variable shared in other scopes (and so must use a ValueHolder)

  - ### setHolder

    public void setHolder(boolean holder)
    Marks whether this variable must be stored through a holder object.
    Parameters:
      `holder` - `true` if the variable is closure-shared

  - ### getStartLabel

    public org.objectweb.asm.Label getStartLabel()
    Returns:
      the start label used for local-variable table metadata

  - ### setStartLabel

    public void setStartLabel(org.objectweb.asm.Label startLabel)
    Sets the start label used for local-variable table metadata.
    Parameters:
      `startLabel` - the starting label

  - ### getEndLabel

    public org.objectweb.asm.Label getEndLabel()
    Returns:
      the end label used for local-variable table metadata

  - ### setEndLabel

    public void setEndLabel(org.objectweb.asm.Label endLabel)
    Sets the end label used for local-variable table metadata.
    Parameters:
      `endLabel` - the ending label

  - ### closeRange

    public void closeRange(org.objectweb.asm.Label end)
    Ends the currently open local-variable-table range at the given label, recording it for later emission. Used when flow scoping hides this variable (GROOVY-12242); a later `reopenRange(org.objectweb.asm.Label)` starts a new range if the variable becomes visible again.
    Parameters:
      `end` - the label at which visibility ends; ignored if `null` or if no range is open

  - ### reopenRange

    public void reopenRange(org.objectweb.asm.Label start)
    Starts a new local-variable-table range at the given label after a `closeRange(org.objectweb.asm.Label)`. The end label is reset to the start and extended by subsequent scope pops; a range that is never extended has zero width and is not emitted.
    Parameters:
      `start` - the label at which visibility resumes; ignored if `null` or if no range was closed

  - ### isRangeClosed

    public boolean isRangeClosed()
    Returns:
      whether the current local-variable-table range has been closed without being reopened (the variable is hidden by flow scoping)

  - ### getClosedRanges

    public List<org.objectweb.asm.Label[]> getClosedRanges()
    Returns:
      the completed local-variable-table ranges as {start, end} label pairs, oldest first; empty for variables never hidden

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`