1 package serp.bytecode.lowlevel;
2
3 import java.io.*;
4
5 import serp.bytecode.visitor.*;
6
7 /***
8 * Entry containing indexes referencing a name and a descriptor. Used
9 * to describe fields and methods of other classes referenced by opcodes.
10 *
11 * @author Abe White
12 */
13 public class NameAndTypeEntry extends Entry {
14 private int _nameIndex = 0;
15 private int _descriptorIndex = 0;
16
17 /***
18 * Default constructor.
19 */
20 public NameAndTypeEntry() {
21 }
22
23 /***
24 * Constructor.
25 *
26 * @param nameIndex the constant pool index of the
27 * {@link UTF8Entry} containing the name of this entity
28 * @param descriptorIndex the constant pool index of the
29 * {@link UTF8Entry} containing the descriptor for this entity
30 */
31 public NameAndTypeEntry(int nameIndex, int descriptorIndex) {
32 _nameIndex = nameIndex;
33 _descriptorIndex = descriptorIndex;
34 }
35
36 public int getType() {
37 return Entry.NAMEANDTYPE;
38 }
39
40 /***
41 * Return the constant pool index of the {@link UTF8Entry}
42 * containing the name of this entity.
43 */
44 public int getNameIndex() {
45 return _nameIndex;
46 }
47
48 /***
49 * Set the constant pool index of the {@link UTF8Entry}
50 * containing the name of this entity.
51 */
52 public void setNameIndex(int nameIndex) {
53 Object key = beforeModify();
54 _nameIndex = nameIndex;
55 afterModify(key);
56 }
57
58 /***
59 * Return the name's referenced {@link UTF8Entry}. This method can only
60 * be run for entries that have been added to a constant pool.
61 */
62 public UTF8Entry getNameEntry() {
63 return (UTF8Entry) getPool().getEntry(_nameIndex);
64 }
65
66 /***
67 * Return the constant pool index of the {@link UTF8Entry}
68 * containing the descriptor for this entity.
69 */
70 public int getDescriptorIndex() {
71 return _descriptorIndex;
72 }
73
74 /***
75 * Set the constant pool index of a {@link UTF8Entry}
76 * containing the descriptor for this entity.
77 */
78 public void setDescriptorIndex(int descriptorIndex) {
79 Object key = beforeModify();
80 _descriptorIndex = descriptorIndex;
81 afterModify(key);
82 }
83
84 /***
85 * Return the descriptor's referenced {@link UTF8Entry}. This method
86 * can only be run for entries that have been added to a constant pool.
87 */
88 public UTF8Entry getDescriptorEntry() {
89 return (UTF8Entry) getPool().getEntry(_descriptorIndex);
90 }
91
92 public void acceptVisit(BCVisitor visit) {
93 visit.enterNameAndTypeEntry(this);
94 visit.exitNameAndTypeEntry(this);
95 }
96
97 void readData(DataInput in) throws IOException {
98 _nameIndex = in.readUnsignedShort();
99 _descriptorIndex = in.readUnsignedShort();
100 }
101
102 void writeData(DataOutput out) throws IOException {
103 out.writeShort(_nameIndex);
104 out.writeShort(_descriptorIndex);
105 }
106 }