1 30 31 43 package jbet; 44 import java.io.*; 45 46 class CpFieldRef extends CpEntry { 47 int classIndex = -1; int nameAndTypeIndex = -1; 50 String cname, fname; Type t; 54 55 57 63 CpFieldRef(int i, CPInterface cp) { 64 super(i, CPInterface.CONSTANT_Fieldref, cp); 65 } 66 67 68 77 CpFieldRef(CPInterface cp, String cname, String fname, Type t) { 78 super(cp.poolCount(), CPInterface.CONSTANT_Fieldref, cp); 79 this.cname = cname; 80 this.fname = fname; 81 this.t = t; 82 } 83 84 public String toString() { 85 return classname() + " " + name() + " " + type(); 86 } 87 88 String classname() { return cname; } 89 String name() { return fname; } 90 Type type() { return t; } 91 92 96 void setup() throws ClassFileException { 97 if (cname == null || fname == null || t == null) { 98 CpClass cpc = constantPool.cpClassAt(classIndex); 99 cpc.setup(); 100 CpNameAndType cpnat = constantPool.cpNameAndTypeAt(nameAndTypeIndex); 101 cpnat.setup(); 102 cname = cpc.string(); 103 fname = cpnat.name(); 104 t = cpnat.type(); 105 } 106 } 107 108 public int hashCode() { 109 return cname.hashCode() + fname.hashCode() + t.hashCode(); 110 } 111 112 public boolean equals(Object o) { 113 if (!( o instanceof CpFieldRef)) return false; 114 CpFieldRef cp = (CpFieldRef) o; 115 return cp.cname.equals(cname) && cp.fname.equals(fname) && 116 cp.t.equals(t); 117 } 118 119 120 void write(DataOutputStream dataOut) throws IOException { 121 dataOut.writeByte(tag); 122 dataOut.writeShort(classIndex); 123 dataOut.writeShort(nameAndTypeIndex); 124 } 125 126 } 127 | Popular Tags |