View Javadoc

1   package serp.bytecode.lowlevel;
2   
3   import java.io.*;
4   
5   import serp.bytecode.visitor.*;
6   
7   /***
8    * A String constant in the constant pool. String constants
9    * hold a reference to a {@link UTF8Entry} that stores the actual value.
10   *
11   * @author Abe White
12   */
13  public class StringEntry extends Entry implements ConstantEntry {
14      private int _stringIndex = -1;
15  
16      /***
17       * Default constructor.
18       */
19      public StringEntry() {
20      }
21  
22      /***
23       * Constructor.
24       *
25       * @param stringIndex the constant pool index of the {@link UTF8Entry}
26       * containing the value of this string
27       */
28      public StringEntry(int stringIndex) {
29          _stringIndex = stringIndex;
30      }
31  
32      public int getType() {
33          return Entry.STRING;
34      }
35  
36      /***
37       * Return the constant pool index of the {@link UTF8Entry}
38       * storing the value of this string.
39       */
40      public int getStringIndex() {
41          return _stringIndex;
42      }
43  
44      /***
45       * Set the constant pool index of the {@link UTF8Entry}
46       * storing the value of this string.
47       */
48      public void setStringIndex(int stringIndex) {
49          Object key = beforeModify();
50          _stringIndex = stringIndex;
51          afterModify(key);
52      }
53  
54      /***
55       * Return the referenced {@link UTF8Entry}. This method can only
56       * be run for entries that have been added to a constant pool.
57       */
58      public UTF8Entry getStringEntry() {
59          return (UTF8Entry) getPool().getEntry(_stringIndex);
60      }
61  
62      public Object getConstant() {
63          return getStringEntry().getValue();
64      }
65  
66      public void setConstant(Object value) {
67          getStringEntry().setConstant(value);
68      }
69  
70      public void acceptVisit(BCVisitor visit) {
71          visit.enterStringEntry(this);
72          visit.exitStringEntry(this);
73      }
74  
75      void readData(DataInput in) throws IOException {
76          _stringIndex = in.readUnsignedShort();
77      }
78  
79      void writeData(DataOutput out) throws IOException {
80          out.writeShort(_stringIndex);
81      }
82  }