KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jas > InnerClassAttr


1 /**
2  * InnerClass attributes are embedded into class files
3  * and used for further ???
4  * @author $Author: Jennifer Lhotak$
5  * @version $Revision: 1.1 $
6  */

7
8 package jas;
9
10 import java.io.*;
11 import java.util.*;
12
13 public class InnerClassAttr
14 {
15     static CP attr = new AsciiCP("InnerClasses");
16     short attr_length = 0;
17     short num = 0;
18     ArrayList list;
19
20
21     /**
22     * Note: An inner class attr is associated with a <em>class</em>, so you
23     * need to create a new InnerClassAttr for each class you create
24     */

25     public InnerClassAttr() { //
26
list = new ArrayList();
27     }
28
29     void resolve(ClassEnv e){
30         e.addCPItem(attr);
31         if (list != null){
32             Iterator it = list.iterator();
33             while (it.hasNext()){
34                 ((InnerClassSpecAttr)it.next()).resolve(e);
35             }
36         }
37     }
38
39     int size(){
40         return
41             (2 + // name_idx
42
4 + // attr_len
43
2 + // inner class len spec
44
8*(list.size())); // table
45
}
46
47     public void addInnerClassSpec(InnerClassSpecAttr attr){
48         list.add(attr);
49     }
50
51     void write(ClassEnv e, DataOutputStream out)
52         throws IOException, jasError {
53     
54         out.writeShort(e.getCPIndex(attr));
55         //out.writeInt(size());
56
out.writeInt(2+8*list.size());
57         out.writeShort(list.size());
58         Iterator it = list.iterator();
59         while(it.hasNext()){
60             ((InnerClassSpecAttr)it.next()).write(e, out);
61         }
62     /*for (Enumeration en = pc.elements(), ien = line.elements();
63      en.hasMoreElements();)
64       {
65     Label l = (Label)(en.nextElement());
66     Integer i = (Integer)(ien.nextElement());
67     l.writeOffset(ce, null, out);
68     out.writeShort((int) i.intValue());*/

69     }
70 }
71
Popular Tags