< prev index next >
src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java
Print this page
*** 26,67 ****
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.
*
- * @version $Id$
* @see LocalVariableTable
! * @LastModified: Jun 2019
*/
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
private int signature_index; // Index of variable signature
! 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
* references (shallow copy). Use copy() for a physical copy.
*/
! public LocalVariable(final LocalVariable c) {
! this(c.getStartPC(), c.getLength(), c.getNameIndex(), c.getSignatureIndex(), c.getIndex(),
! c.getConstantPool());
! this.orig_index = c.getOrigIndex();
}
-
/**
! * Construct 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
--- 26,76 ----
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. 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.
*
* @see LocalVariableTable
! * @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
* this method's frame.
*/
private ConstantPool constant_pool;
private int orig_index; // never changes; used to match up with LocalVariableTypeTable entries
/**
! * 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 localVariable) {
! this(localVariable.getStartPC(), localVariable.getLength(), localVariable.getNameIndex(),
! localVariable.getSignatureIndex(), localVariable.getIndex(), localVariable.getConstantPool());
! this.orig_index = localVariable.getOrigIndex();
}
/**
! * 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,225 ****
v.visitLocalVariable(this);
}
/**
! * Dump 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);
}
-
/**
* @return Constant pool used by this object.
*/
! public final ConstantPool getConstantPool() {
return constant_pool;
}
/**
* @return Variable is valid within getStartPC() .. getStartPC()+getLength()
*/
! public final int getLength() {
return length;
}
/**
* @return Variable name.
*/
! public final 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() {
return name_index;
}
/**
* @return Signature.
*/
! public final 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() {
return signature_index;
}
/**
* @return index of register where variable is stored
*/
! public final int getIndex() {
return index;
}
/**
* @return index of register where variable was originally stored
*/
! public final int getOrigIndex() {
return orig_index;
}
/**
! * @return Start of range where he variable is valid
*/
! public final int getStartPC() {
return start_pc;
}
/*
* Helper method shared with LocalVariableTypeTable
*/
! final 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 + ")";
--- 131,234 ----
v.visitLocalVariable(this);
}
/**
! * Dumps local variable to file stream in binary format.
*
! * @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 ConstantPool getConstantPool() {
return constant_pool;
}
/**
* @return Variable is valid within getStartPC() .. getStartPC()+getLength()
*/
! public int getLength() {
return length;
}
/**
* @return Variable name.
*/
! 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 int getNameIndex() {
return name_index;
}
/**
* @return Signature.
*/
! 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 int getSignatureIndex() {
return signature_index;
}
/**
* @return index of register where variable is stored
*/
! public int getIndex() {
return index;
}
/**
* @return index of register where variable was originally stored
*/
! public int getOrigIndex() {
return orig_index;
}
/**
! * @return Start of range where the variable is valid
*/
! public int getStartPC() {
return start_pc;
}
/*
* Helper method shared with LocalVariableTypeTable
*/
! 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,286 ****
/**
* @param constant_pool Constant pool to be used for this object.
*/
! public final 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 ) {
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
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
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
this.index = index;
}
/**
* @param start_pc Specify range where the local variable is valid.
*/
! public final void setStartPC( final int start_pc ) { // TODO unused
this.start_pc = start_pc;
}
/**
* @return string representation.
*/
@Override
! public final String toString() {
return toStringShared(false);
}
/**
--- 236,295 ----
/**
* @param constant_pool Constant pool to be used for this object.
*/
! public void setConstantPool( final ConstantPool constant_pool ) {
this.constant_pool = constant_pool;
}
/**
* @param length the length of this local variable
*/
! 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 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 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 void setIndex( final int index ) { // TODO unused
this.index = index;
}
/**
* @param start_pc Specify range where the local variable is valid.
*/
! public void setStartPC( final int start_pc ) { // TODO unused
this.start_pc = start_pc;
}
/**
* @return string representation.
*/
@Override
! public String toString() {
return toStringShared(false);
}
/**
< prev index next >