< prev index next >
src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java
Print this page
@@ -26,42 +26,51 @@
import com.sun.org.apache.bcel.internal.Const;
/**
* This class represents a local variable within a method. It contains its
- * scope, name, signature and index on the method's frame.
+ * 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 signature_index. The
+ * LocalVariableTypeTable attribute does have a signature_index.
+ * @see com.sun.org.apache.bcel.internal.classfile.Utility for more details on the difference.
*
- * @version $Id$
* @see LocalVariableTable
- * @LastModified: Jun 2019
+ * @see LocalVariableTypeTable
+ * @LastModified: Jan 2020
*/
public final class LocalVariable implements Cloneable, Node {
private int start_pc; // Range in which the variable is valid
private int length;
private int name_index; // Index in constant pool of variable name
+ // Technically, a decscriptor_index for a local variable table entry
+ // and a signature_index for a local variable type table entry.
private int signature_index; // Index of variable signature
- private int index; /* Variable is `index'th local variable on
+ private int index; /* Variable is index'th local variable on
* this method's frame.
*/
private ConstantPool constant_pool;
private int orig_index; // never changes; used to match up with LocalVariableTypeTable entries
/**
- * Initialize from another object. Note that both objects use the same
+ * Initializes from another LocalVariable. Note that both objects use the same
* references (shallow copy). Use copy() for a physical copy.
+ *
+ * @param localVariable Another LocalVariable.
*/
- public LocalVariable(final LocalVariable c) {
- this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(),
- c.getConstantPool());
- this.orig_index = c.getOrigIndex();
+ public LocalVariable(final LocalVariable localVariable) {
+ this(localVariable.getStartPC(), localVariable.getLength(), localVariable.getNameIndex(),
+ localVariable.getSignatureIndex(), localVariable.getIndex(), localVariable.getConstantPool());
+ this.orig_index = localVariable.getOrigIndex();
}
-
/**
- * Construct object from file stream.
+ * Constructs object from file stream.
* @param file Input stream
* @throws IOException
*/
LocalVariable(final DataInput file, final ConstantPool constant_pool) throws IOException {
this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), file
@@ -122,104 +131,104 @@
v.visitLocalVariable(this);
}
/**
- * Dump local variable to file stream in binary format.
+ * Dumps local variable to file stream in binary format.
*
- * @param file Output file stream
- * @throws IOException
- */
- public final void dump( final DataOutputStream file ) throws IOException {
- file.writeShort(start_pc);
- file.writeShort(length);
- file.writeShort(name_index);
- file.writeShort(signature_index);
- file.writeShort(index);
+ * @param dataOutputStream Output file stream
+ * @exception IOException if an I/O error occurs.
+ * @see java.io.FilterOutputStream#out
+ */
+ public void dump(final DataOutputStream dataOutputStream) throws IOException {
+ dataOutputStream.writeShort(start_pc);
+ dataOutputStream.writeShort(length);
+ dataOutputStream.writeShort(name_index);
+ dataOutputStream.writeShort(signature_index);
+ dataOutputStream.writeShort(index);
}
-
/**
* @return Constant pool used by this object.
*/
- public final ConstantPool getConstantPool() {
+ public ConstantPool getConstantPool() {
return constant_pool;
}
/**
* @return Variable is valid within getStartPC() .. getStartPC()+getLength()
*/
- public final int getLength() {
+ public int getLength() {
return length;
}
/**
* @return Variable name.
*/
- public final String getName() {
+ public String getName() {
ConstantUtf8 c;
c = (ConstantUtf8) constant_pool.getConstant(name_index, Const.CONSTANT_Utf8);
return c.getBytes();
}
/**
* @return Index in constant pool of variable name.
*/
- public final int getNameIndex() {
+ public int getNameIndex() {
return name_index;
}
/**
* @return Signature.
*/
- public final String getSignature() {
+ public String getSignature() {
ConstantUtf8 c;
c = (ConstantUtf8) constant_pool.getConstant(signature_index, Const.CONSTANT_Utf8);
return c.getBytes();
}
/**
* @return Index in constant pool of variable signature.
*/
- public final int getSignatureIndex() {
+ public int getSignatureIndex() {
return signature_index;
}
/**
* @return index of register where variable is stored
*/
- public final int getIndex() {
+ public int getIndex() {
return index;
}
/**
* @return index of register where variable was originally stored
*/
- public final int getOrigIndex() {
+ public int getOrigIndex() {
return orig_index;
}
/**
- * @return Start of range where he variable is valid
+ * @return Start of range where the variable is valid
*/
- public final int getStartPC() {
+ public int getStartPC() {
return start_pc;
}
/*
* Helper method shared with LocalVariableTypeTable
*/
- final String toStringShared( final boolean typeTable ) {
+ String toStringShared( final boolean typeTable ) {
final String name = getName();
final String signature = Utility.signatureToString(getSignature(), false);
final String label = "LocalVariable" + (typeTable ? "Types" : "" );
return label + "(start_pc = " + start_pc + ", length = " + length + ", index = "
+ index + ":" + signature + " " + name + ")";
@@ -227,60 +236,60 @@
/**
* @param constant_pool Constant pool to be used for this object.
*/
- public final void setConstantPool( final ConstantPool constant_pool ) {
+ public void setConstantPool( final ConstantPool constant_pool ) {
this.constant_pool = constant_pool;
}
/**
* @param length the length of this local variable
*/
- public final void setLength( final int length ) {
+ public void setLength( final int length ) {
this.length = length;
}
/**
* @param name_index the index into the constant pool for the name of this variable
*/
- public final void setNameIndex( final int name_index ) { // TODO unused
+ public void setNameIndex( final int name_index ) { // TODO unused
this.name_index = name_index;
}
/**
* @param signature_index the index into the constant pool for the signature of this variable
*/
- public final void setSignatureIndex( final int signature_index ) { // TODO unused
+ public void setSignatureIndex( final int signature_index ) { // TODO unused
this.signature_index = signature_index;
}
/**
* @param index the index in the local variable table of this variable
*/
- public final void setIndex( final int index ) { // TODO unused
+ public void setIndex( final int index ) { // TODO unused
this.index = index;
}
/**
* @param start_pc Specify range where the local variable is valid.
*/
- public final void setStartPC( final int start_pc ) { // TODO unused
+ public void setStartPC( final int start_pc ) { // TODO unused
this.start_pc = start_pc;
}
/**
* @return string representation.
*/
@Override
- public final String toString() {
+ public String toString() {
return toStringShared(false);
}
/**
< prev index next >