001 package edu.rice.cs.cunit.classFile.constantPool; 002 003 import java.io.DataInputStream; 004 import java.io.DataOutputStream; 005 import java.io.IOException; 006 import java.util.ArrayList; 007 008 /** 009 * Represents UTF data in the constant pool. 010 * 011 * @author Mathias Ricken 012 */ 013 public abstract class AUTFPoolInfo extends APoolInfo { 014 /** 015 * Data. 016 */ 017 protected String _strValue; 018 019 /** 020 * Constructor. 021 * 022 * @param type constant pool object type 023 * @param s data 024 */ 025 public AUTFPoolInfo(int type, String s, ConstantPool cp) { 026 super(type, cp); 027 _strValue = s; 028 } 029 030 /** 031 * Constructor reading from a stream. 032 * 033 * @param type type, either ASCII or UNICODE 034 * @param dis input stream 035 * @param cp constant pool 036 * 037 * @throws IOException 038 */ 039 public AUTFPoolInfo(int type, DataInputStream dis, ConstantPool cp) throws IOException { 040 super(type, cp); 041 StringBuilder xxBuf = new StringBuilder(); 042 043 int len = dis.readShort(); 044 while(len > 0) { 045 char c = (char)(dis.readByte()); 046 xxBuf.append(c); 047 --len; 048 } 049 _strValue = xxBuf.toString(); 050 } 051 052 /** 053 * Mutator for the data. 054 * 055 * @param strValue new data 056 */ 057 public void setStrValue(String strValue) { 058 _strValue = strValue; 059 } 060 061 /** 062 * Write this constant pool object into the stream, including the type byte. 063 * 064 * @param dos stream 065 * 066 * @throws java.io.IOException 067 */ 068 public void write(DataOutputStream dos) throws IOException { 069 reindex(); 070 dos.writeByte(_type); 071 dos.writeShort(_strValue.length()); 072 dos.writeBytes(_strValue); 073 } 074 075 /** 076 * Resolve constant pool objects. This makes sure that the object links match the index links. 077 */ 078 public void resolve() { 079 // do nothing 080 } 081 082 /** 083 * Reindex constant pool indices. This makes sure the index links match the object links. 084 */ 085 public void reindex() { 086 // do nothing 087 } 088 089 /** 090 * Return a human-readable version of this constant pool object. 091 * 092 * @return string 093 */ 094 public abstract String toStringVerbose(); 095 096 /** 097 * Return a human-readable version of this constant pool object. 098 * 099 * @return string 100 */ 101 public String toString() { 102 return _strValue; 103 } 104 105 /** 106 * Return a hash code. 107 * 108 * @return hash code 109 */ 110 public int hashCode() { 111 return _strValue.hashCode(); 112 } 113 114 /** 115 * Compare this object and another one. 116 * 117 * @param obj other object 118 * 119 * @return true if the same 120 */ 121 public abstract boolean equals(Object obj); 122 }