# Class LocalVariable

java.lang.Object
org.apache.bcel.classfile.LocalVariable

All Implemented Interfaces:
  `Cloneable, Node, Constants`

public final class LocalVariable extends Object implements Cloneable, Node, Constants
This class represents a local variable within a method. It contains its scope, name, signature and index on the method's frame. It is used both to represent an element of the LocalVariableTable as well as an element of the LocalVariableTypeTable. The nomenclature used here may be a bit confusing; while the two items have the same layout in a class file, a LocalVariableTable attribute contains a descriptor_index, not a signatureIndex. The LocalVariableTypeTable attribute does have a signatureIndex.

See Also:
  - for more details on the difference.
  - `LocalVariableTable`
  - `LocalVariableTypeTable`

- ## Field Summary

  ### Fields inherited from interface Constants

  `AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_RUNTIMEINVISIBLE_ANNOTATIONS, ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_Long, CONSTANT_Methodref, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAJOR_1_4, MAJOR_1_5, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LocalVariable(int startPc, int length, int nameIndex, int signatureIndex, int index, ConstantPool constantPool)`
  `LocalVariable(int startPc, int length, int nameIndex, int signatureIndex, int index, ConstantPool constantPool, int origIndex)`
  `LocalVariable(LocalVariable localVariable)`
  Initializes from another LocalVariable.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `accept(Visitor v)`
  Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class.
  `LocalVariable`
  `copy()`
  `void`
  `dump(DataOutputStream dataOutputStream)`
  Dumps local variable to file stream in binary format.
  `ConstantPool`
  `getConstantPool()`
  `int`
  `getIndex()`
  `int`
  `getLength()`
  `String`
  `getName()`
  `int`
  `getNameIndex()`
  `int`
  `getOrigIndex()`
  `String`
  `getSignature()`
  `int`
  `getSignatureIndex()`
  `int`
  `getStartPC()`
  `void`
  `setConstantPool(ConstantPool constantPool)`
  `void`
  `setIndex(int index)`
  `void`
  `setLength(int length)`
  `void`
  `setNameIndex(int nameIndex)`
  `void`
  `setSignatureIndex(int signatureIndex)`
  `void`
  `setStartPC(int startPc)`
  `String`
  `toString()`

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### LocalVariable

    public LocalVariable(int startPc, int length, int nameIndex, int signatureIndex, int index, ConstantPool constantPool)
    Parameters:
      `startPc` - Range in which the variable
      `length` - ... is valid
      `nameIndex` - Index in constant pool of variable name
      `signatureIndex` - Index of variable's signature
      `index` - Variable is 'index'th local variable on the method's frame
      `constantPool` - Array of constants

  - ### LocalVariable

    public LocalVariable(int startPc, int length, int nameIndex, int signatureIndex, int index, ConstantPool constantPool, int origIndex)
    Parameters:
      `startPc` - Range in which the variable
      `length` - ... is valid
      `nameIndex` - Index in constant pool of variable name
      `signatureIndex` - Index of variable's signature
      `index` - Variable is 'index'th local variable on the method's frame
      `constantPool` - Array of constants
      `origIndex` - Variable is 'index'th local variable on the method's frame prior to any changes

  - ### LocalVariable

    public LocalVariable(LocalVariable localVariable)
    Initializes from another LocalVariable. Note that both objects use the same references (shallow copy). Use copy() for a physical copy.
    Parameters:
      `localVariable` - Another LocalVariable.

- ## Method Details

  - ### accept

    public void accept(Visitor v)
    Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects.
    Specified by:
      `accept` in interface `Node`
    Parameters:
      `v` - Visitor object

  - ### copy

    public LocalVariable copy()
    Returns:
      deep copy of this object

  - ### dump

    public void dump(DataOutputStream dataOutputStream) throws IOException
    Dumps local variable to file stream in binary format.
    Parameters:
      `dataOutputStream` - Output file stream
    Throws:
      `IOException` - if an I/O error occurs.
    See Also:
      - `FilterOutputStream.out`

  - ### getConstantPool

    public ConstantPool getConstantPool()
    Returns:
      Constant pool used by this object.

  - ### getIndex

    public int getIndex()
    Returns:
      index of register where variable is stored

  - ### getLength

    public int getLength()
    Returns:
      Variable is valid within getStartPC() .. getStartPC()+getLength()

  - ### getName

    public String getName()
    Returns:
      Variable name.

  - ### getNameIndex

    public int getNameIndex()
    Returns:
      Index in constant pool of variable name.

  - ### getOrigIndex

    public int getOrigIndex()
    Returns:
      index of register where variable was originally stored

  - ### getSignature

    public String getSignature()
    Returns:
      Signature.

  - ### getSignatureIndex

    public int getSignatureIndex()
    Returns:
      Index in constant pool of variable signature.

  - ### getStartPC

    public int getStartPC()
    Returns:
      Start of range where the variable is valid

  - ### setConstantPool

    public void setConstantPool(ConstantPool constantPool)
    Parameters:
      `constantPool` - Constant pool to be used for this object.

  - ### setIndex

    public void setIndex(int index)
    Parameters:
      `index` - the index in the local variable table of this variable

  - ### setLength

    public void setLength(int length)
    Parameters:
      `length` - the length of this local variable

  - ### setNameIndex

    public void setNameIndex(int nameIndex)
    Parameters:
      `nameIndex` - the index into the constant pool for the name of this variable

  - ### setSignatureIndex

    public void setSignatureIndex(int signatureIndex)
    Parameters:
      `signatureIndex` - the index into the constant pool for the signature of this variable

  - ### setStartPC

    public void setStartPC(int startPc)
    Parameters:
      `startPc` - Specify range where the local variable is valid.

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`
    Returns:
      string representation.