< 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 >