Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/chaoswg/xtc4y/classdesc/InnerClassInfo.java


1   //$Header: /cvsroot/xtc4y/xtc4y/src/com/chaoswg/xtc4y/classdesc/AttributeInfo.java,v 1.2 2003/08/25 10:50:14 toggm Exp $
2   /******************************************************************************
3    * XTC4y - eXtreme Testing Collection 4 you                                   *
4    * -------------------------------------------------------------------------- *
5    * URL: http://www.chaoswg.com/xtc4y                                          *
6    * Author: Mike Toggweiler (2.dog@gmx.ch)                                     *
7    *                                                                            *
8    * Last Updated: $Date: 2003/08/25 10:50:14 $, by $Author: toggm $            *
9    * Version: $Revision: 1.2 $                                                  *
10   * -------------------------------------------------------------------------- *
11   * COPYRIGHT:   (c) 2003 by Mike Toggweiler                                   *
12   *                                                                            *
13   * This program is free software; you can redistribute it and/or modify       *
14   * it under the terms of the GNU General Public License as published by       *
15   * the Free Software Foundation; either version 2 of the License, or          *
16   * (at your option) any later version.                                        *
17   *****************************************************************************/
18  package com.chaoswg.xtc4y.classdesc;
19  
20  import java.io.DataInputStream;
21  import java.io.DataOutputStream;
22  import java.io.IOException;
23  
24  /**
25   * this container class describes an information for an innerclass
26   * @author Mike Toggweiler
27   **/
28  public class InnerClassInfo {
29      private ClassCPEntry innerClass;
30      private ClassCPEntry outerClass;
31      private UTF8CPEntry name;
32      private InnerClassAccessFlags accessFlags;
33      
34      /**
35       * Creates a InnnerClassInfo and initializes it from a DataInputStream
36       * @param dis the DataInputStream to read from
37       * @param cp the constant pool to resolve indices
38       **/
39      protected InnerClassInfo(DataInputStream dis, ConstantPool cp) 
40    throws IOException {    
41    short innerClassIndex = (short)dis.readUnsignedShort();
42    short outerClassIndex = (short)dis.readUnsignedShort();
43    short innerNameIndex = (short)dis.readUnsignedShort();
44    short access = (short)dis.readUnsignedShort();
45  
46    if (innerClassIndex == 0) {
47        innerClass = null;
48    }
49    else {
50        innerClass = (ClassCPEntry)cp.getCPEntryAt(innerClassIndex);
51    }
52    if (outerClassIndex == 0) {
53        //is not a member
54        outerClass = null;
55    }
56    else {
57        outerClass = (ClassCPEntry)cp.getCPEntryAt(outerClassIndex);
58    }
59    
60    if (innerNameIndex == 0) {
61        //it is an anonymous inner class
62        name = null;
63    }
64    else {
65        name = (UTF8CPEntry)cp.getCPEntryAt(innerNameIndex);
66    }
67    accessFlags = new InnerClassAccessFlags(access);  
68      }    
69  
70      /**
71       * Construct a innerclassinfo and initializes with the 
72       * the innerclass, outerclass and the name as well as 
73       * the access flags
74       * @param innerClass the innerClass cp entry
75       * @param outerClass the outerClass cp entry
76       * @param name the name cp entry
77       * @param access the InnerclassAccessFlags
78       **/
79      public InnerClassInfo(ClassCPEntry innerClass, ClassCPEntry outerClass, 
80          UTF8CPEntry name, InnerClassAccessFlags access) {
81    this.innerClass = innerClass;
82    this.outerClass = outerClass;
83    this.name = name;
84    this.accessFlags = access;
85      }
86  
87      /**
88       * Write the constant pool information into a DataOutputStream
89       * @param dos the DataOutputStream to write on     
90       * @param cp the constant pool to store variables
91       **/
92      protected final void write(DataOutputStream dos, ConstantPool cp) 
93    throws IOException {    
94    if (innerClass == null) {
95        dos.writeShort(0);
96    }
97    else {
98        dos.writeShort(cp.addCPEntry(innerClass));
99    }
100   if (outerClass == null) {
101       dos.writeShort(0);
102   }
103   else {
104       dos.writeShort(cp.addCPEntry(outerClass));
105   }
106   if (name == null) {
107       dos.writeShort(0);
108   }
109   else {
110       dos.writeShort(cp.addCPEntry(name));
111   }
112   dos.writeShort(accessFlags.getAccessFlag());
113     }                    
114 
115     /**
116      * @return the innerclass
117      **/
118     public ClassCPEntry getInnerClass() {
119   return innerClass;
120     }
121 
122     /**
123      * @return the outerclass
124      **/
125     public ClassCPEntry getOuterClass() {
126   return outerClass;
127     }
128 
129     /**
130      * @return the class name
131      **/
132     public UTF8CPEntry getInnerName() {
133   return name;
134     }
135 
136     /**
137      * @return the access flags
138      **/
139     public InnerClassAccessFlags getAccessFlags() {
140   return accessFlags;
141     }
142 
143     /**
144      * Set the new inner class
145      * @param innerClass
146      **/
147     public void setInnerClass(ClassCPEntry innerClass) {
148   this.innerClass = innerClass;
149     }
150 
151     /**
152      * Set the new outer class
153      * @param outerClass
154      **/
155     public void setOuterClass(ClassCPEntry outerClass) {
156   this.outerClass = outerClass;
157     }
158 
159     /**
160      * Set the new inner class name
161      * @param name
162      **/
163     public void setInnerName(UTF8CPEntry name) {
164   this.name = name;
165     }
166 
167     /**
168      * Set the new access flags
169      * @param access
170      **/
171     public void setAccessFlags(InnerClassAccessFlags access) {
172   this.accessFlags = access;
173     }
174 
175     /**
176      * Write in a readable way
177      **/
178     public String toString() {
179   return innerClass+":"+outerClass+":"+name+":"+accessFlags;
180     }
181 }