1 package serp.bytecode.lowlevel;
2
3 import java.io.*;
4
5 import serp.bytecode.visitor.*;
6
7 /***
8 * A constant pool entry describing a class.
9 * Class entries are used to refer to the current class, the superclass,
10 * implemented interfaces, etc. Each class entry contains the constant pool
11 * index of the {@link UTF8Entry} that stores the class name, which is
12 * represented in internal form.
13 *
14 * @author Abe White
15 */
16 public class ClassEntry extends Entry implements ConstantEntry {
17 private int _nameIndex = 0;
18
19 /***
20 * Default constructor.
21 */
22 public ClassEntry() {
23 }
24
25 /***
26 * Constructor.
27 *
28 * @param nameIndex the constant pool index of the {@link UTF8Entry}
29 * containing the class name
30 */
31 public ClassEntry(int nameIndex) {
32 _nameIndex = nameIndex;
33 }
34
35 /***
36 * Return the constant pool index of the {@link UTF8Entry}
37 * containing the class name. Defaults to 0.
38 */
39 public int getNameIndex() {
40 return _nameIndex;
41 }
42
43 /***
44 * Set the constant pool index of the {@link UTF8Entry}
45 * containing the class name.
46 */
47 public void setNameIndex(int nameIndex) {
48 Object key = beforeModify();
49 _nameIndex = nameIndex;
50 afterModify(key);
51 }
52
53 /***
54 * Return the referenced {@link UTF8Entry}. This method can only
55 * be run for entries that have been added to a constant pool.
56 */
57 public UTF8Entry getNameEntry() {
58 return (UTF8Entry) getPool().getEntry(_nameIndex);
59 }
60
61 public int getType() {
62 return Entry.CLASS;
63 }
64
65 public Object getConstant() {
66 return getNameEntry().getValue();
67 }
68
69 public void setConstant(Object value) {
70 getNameEntry().setConstant(value);
71 }
72
73 public void acceptVisit(BCVisitor visit) {
74 visit.enterClassEntry(this);
75 visit.exitClassEntry(this);
76 }
77
78 void readData(DataInput in) throws IOException {
79 _nameIndex = in.readUnsignedShort();
80 }
81
82 void writeData(DataOutput out) throws IOException {
83 out.writeShort(_nameIndex);
84 }
85 }