001 package serp.bytecode.lowlevel;
002
003 import java.io.*;
004
005 import serp.bytecode.visitor.*;
006
007 /**
008 * A constant pool entry describing a class.
009 * Class entries are used to refer to the current class, the superclass,
010 * implemented interfaces, etc. Each class entry contains the constant pool
011 * index of the {@link UTF8Entry} that stores the class name, which is
012 * represented in internal form.
013 *
014 * @author Abe White
015 */
016 public class ClassEntry extends Entry implements ConstantEntry {
017 private int _nameIndex = 0;
018
019 /**
020 * Default constructor.
021 */
022 public ClassEntry() {
023 }
024
025 /**
026 * Constructor.
027 *
028 * @param nameIndex the constant pool index of the {@link UTF8Entry}
029 * containing the class name
030 */
031 public ClassEntry(int nameIndex) {
032 _nameIndex = nameIndex;
033 }
034
035 /**
036 * Return the constant pool index of the {@link UTF8Entry}
037 * containing the class name. Defaults to 0.
038 */
039 public int getNameIndex() {
040 return _nameIndex;
041 }
042
043 /**
044 * Set the constant pool index of the {@link UTF8Entry}
045 * containing the class name.
046 */
047 public void setNameIndex(int nameIndex) {
048 Object key = beforeModify();
049 _nameIndex = nameIndex;
050 afterModify(key);
051 }
052
053 /**
054 * Return the referenced {@link UTF8Entry}. This method can only
055 * be run for entries that have been added to a constant pool.
056 */
057 public UTF8Entry getNameEntry() {
058 return (UTF8Entry) getPool().getEntry(_nameIndex);
059 }
060
061 public int getType() {
062 return Entry.CLASS;
063 }
064
065 public Object getConstant() {
066 return getNameEntry().getValue();
067 }
068
069 public void setConstant(Object value) {
070 getNameEntry().setConstant(value);
071 }
072
073 public void acceptVisit(BCVisitor visit) {
074 visit.enterClassEntry(this);
075 visit.exitClassEntry(this);
076 }
077
078 void readData(DataInput in) throws IOException {
079 _nameIndex = in.readUnsignedShort();
080 }
081
082 void writeData(DataOutput out) throws IOException {
083 out.writeShort(_nameIndex);
084 }
085 }