001 package edu.rice.cs.cunit.classFile.constantPool;
002
003 import edu.rice.cs.cunit.classFile.constantPool.visitors.IPoolInfoVisitor;
004
005 import java.io.DataOutputStream;
006 import java.io.IOException;
007
008 /**
009 * Represents an empty slot in the constant pool.
010 *
011 * @author Mathias Ricken
012 */
013 public class EmptyPoolInfo extends APoolInfo {
014 /**
015 * Singleton constructor.
016 */
017 private EmptyPoolInfo() {
018 super(-1, null);
019 }
020
021 /**
022 * Singleton instance.
023 */
024 private static EmptyPoolInfo _instance = new EmptyPoolInfo();
025
026 /**
027 * Singleton accessor.
028 *
029 * @return singleton
030 */
031 public static EmptyPoolInfo singleton() {
032 return _instance;
033 }
034
035 /**
036 * Write this constant pool object into the stream, including the type byte.
037 *
038 * @param dos stream
039 *
040 * @throws java.io.IOException
041 */
042 public void write(DataOutputStream dos) throws IOException {
043 // do nothing
044 }
045
046 /**
047 * Resolve constant pool objects. This makes sure that the object links match the index links.
048 */
049 public void resolve() {
050 // do nothing
051 }
052
053 /**
054 * Reindex constant pool indices. This makes sure the index links match the object links.
055 */
056 public void reindex() {
057 // do nothing
058 }
059
060 /**
061 * Return a human-readable version of this constant pool object.
062 *
063 * @return string
064 */
065 public String toString() {
066 return "Empty constant pool info";
067 }
068
069 /**
070 * Return a human-readable version of this constant pool object.
071 *
072 * @return string
073 */
074 public String toStringVerbose() {
075 return toString();
076 }
077
078 /**
079 * Return a hash code.
080 *
081 * @return hash code
082 */
083 public int hashCode() {
084 return 0;
085 }
086
087 /**
088 * Compare this object and another one.
089 *
090 * @param obj other object
091 *
092 * @return true if the same
093 */
094 public boolean equals(Object obj) {
095 return obj instanceof EmptyPoolInfo;
096 }
097
098 /**
099 * Execute a visitor.
100 *
101 * @param visitor visitor
102 * @param data visitor-specific parameter
103 *
104 * @return visitor-specific return value
105 */
106 public <R, D> R execute(IPoolInfoVisitor<R, D> visitor, D data) {
107 return visitor.emptyCase(this, data);
108 }
109 }