1 26 package net.sf.javaguard.classfile; 27 28 import java.io.*; 29 30 31 36 public class InnerClassesInfo { 37 38 private int innerClassInfoIndex; 39 40 private int outerClassInfoIndex; 41 42 private int innerNameIndex; 43 44 private int innerClassAccessFlags; 45 46 47 48 49 54 public static InnerClassesInfo create(DataInput din) 55 throws IOException { 56 InnerClassesInfo ici = new InnerClassesInfo(); 57 ici.read(din); 58 return ici; 59 } 60 61 62 63 64 66 private InnerClassesInfo() { 67 } 68 69 70 71 72 76 protected void setInnerClassInfoIndex(int index) { 77 innerClassInfoIndex = index; 78 } 79 80 81 85 protected int getInnerClassInfoIndex() { 86 return innerClassInfoIndex; 87 } 88 89 90 91 92 96 protected void setOuterClassInfoIndex(int index) { 97 outerClassInfoIndex = index; 98 } 99 100 101 105 protected int getOuterClassInfoIndex() { 106 return outerClassInfoIndex; 107 } 108 109 110 111 112 116 protected void setInnerNameIndex(int index) { 117 innerNameIndex = index; 118 } 119 120 121 125 protected int getInnerNameIndex() { 126 return innerNameIndex; 127 } 128 129 130 131 132 136 protected void setInnerClassAccessFlags(int flags) { 137 innerClassAccessFlags = flags; 138 } 139 140 141 145 protected int getInnerClassAccessFlags() { 146 return innerClassAccessFlags; 147 } 148 149 150 151 152 155 protected void markUtf8Refs(ConstantPool pool) { 156 if (0 != getInnerNameIndex()) { 158 pool.incRefCount(getInnerNameIndex()); 159 } 160 } 161 162 163 164 165 169 private void read(DataInput din) 170 throws IOException { 171 setInnerClassInfoIndex(din.readUnsignedShort()); 172 setOuterClassInfoIndex(din.readUnsignedShort()); 173 setInnerNameIndex(din.readUnsignedShort()); 174 setInnerClassAccessFlags(din.readUnsignedShort()); 175 } 176 177 178 183 public void write(DataOutput dout) 184 throws IOException { 185 dout.writeShort(getInnerClassInfoIndex()); 186 dout.writeShort(getOuterClassInfoIndex()); 187 dout.writeShort(getInnerNameIndex()); 188 dout.writeShort(getInnerClassAccessFlags()); 189 } 190 191 192 193 194 198 public void dump(PrintWriter pw, ClassFile cf) { 199 pw.print("Inner class info index: "); 200 pw.print(getInnerClassInfoIndex()); 201 pw.print(" -> "); 202 pw.println(cf.toName(getInnerClassInfoIndex())); 203 pw.print("Outer class info index: "); 204 pw.print(getOuterClassInfoIndex()); 205 pw.print(" -> "); 206 if (getOuterClassInfoIndex() > 0) { 207 pw.println(cf.toName(getOuterClassInfoIndex())); 208 } else { 209 pw.println("<null>"); 210 } 211 pw.print("Inner name index: "); 212 pw.print(getInnerNameIndex()); 213 pw.print(" -> "); 214 if (getInnerNameIndex() > 0) { 215 pw.println( ((Utf8CpInfo) cf.getCpEntry(getInnerNameIndex())).getString()); 216 } else { 217 pw.println("<null>"); 218 } 219 pw.print("Inner class access flags: "); 220 pw.println(getInnerClassAccessFlags()); 221 } 222 } 223 | Popular Tags |