KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > bytecode > InnerClassesAttr


1 // Copyright (c) 1998 Per M.A. Bothner.
2
// This is free software; for terms and warranty disclaimer see ./COPYING.
3

4 package gnu.bytecode;
5 public class InnerClassesAttr extends Attribute
6 {
7   short count;
8   short[] data;
9
10   /** Add a new InnerClassesAttr to a ClassType. */
11   public InnerClassesAttr (ClassType cl)
12   {
13     super("InnerClasses");
14     addToFrontOf(cl);
15   }
16
17   public InnerClassesAttr (short[] data, ClassType cl)
18   {
19     this(cl);
20     count = (short) (data.length >> 2);
21     this.data = data;
22   }
23
24   /** Return the length of the attribute in bytes.
25     * Does not include the 6-byte header (for the name_index and the length).*/

26     public int getLength() { return 2 + 8 * count; }
27
28   /** Write out the contents of the Attribute.
29     * Does not write the 6-byte attribute header. */

30   public void write (java.io.DataOutputStream JavaDoc dstr)
31     throws java.io.IOException JavaDoc
32   {
33     dstr.writeShort(count);
34     for (int i = 0; i < count; i++)
35       {
36     dstr.writeShort(data[4 * i]); // inner_class_info_index
37
dstr.writeShort(data[4 * i + 1]); // outer_class_info_index
38
dstr.writeShort(data[4 * i + 2]); // inner_name_index
39
dstr.writeShort(data[4 * i + 3]); // inner_class_access_flags
40
}
41   }
42
43   public void print (ClassTypeWriter dst)
44   {
45     ClassType ctype = (ClassType) container;
46     ConstantPool constants = ctype.getConstants();
47     dst.print("Attribute \"");
48     dst.print(getName());
49     dst.print("\", length:");
50     dst.print(getLength());
51     dst.print(", count: ");
52     dst.println(count);
53     for (int i = 0; i < count; i++)
54       {
55     dst.print(" ");
56     int index;
57     index = data[4*i] & 0xFFFF; // inner_class_info_index
58
CpoolEntry centry = constants.getForced(index, ConstantPool.CLASS);
59     dst.print(((CpoolClass) centry).getStringName());
60     dst.print("; ");
61
62     index = data[4*i+1] & 0xFFFF; // outer_class_info_index
63
if (index != 0)
64       {
65         dst.print("Member of ");
66         centry = constants.getForced(index, ConstantPool.CLASS);
67         dst.print(((CpoolClass) centry).getStringName());
68       }
69     dst.print("; ");
70
71     index = data[4*i+2] & 0xFFFF; // inner_name_index
72
if (index != 0)
73       {
74         centry = constants.getForced(index, ConstantPool.UTF8);
75         dst.print(((CpoolUtf8) centry).string);
76       }
77     else
78       dst.print("(Anonymous)");
79     dst.print(";");
80
81     dst.print(Access.toString(data[4*i+3] & 0xFFFF, 'C'));
82     dst.println();
83       }
84   }
85 }
86
Popular Tags