KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > yworks > yguard > obf > classfile > InnerClassesInfo


1 /**
2  * YGuard -- an obfuscation library for Java(TM) classfiles.
3  *
4  * Original Copyright (c) 1999 Mark Welsh (markw@retrologic.com)
5  * Modifications Copyright (c) 2002 yWorks GmbH (yguard@yworks.com)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  * The author may be contacted at yguard@yworks.com
22  *
23  * Java and all Java-based marks are trademarks or registered
24  * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
25  */

26 package com.yworks.yguard.obf.classfile;
27
28 import java.io.*;
29 import java.util.*;
30 import java.lang.reflect.Modifier JavaDoc;
31
32 /**
33  * Representation of an Inner Classes table entry.
34  *
35  * @author Mark Welsh
36  */

37 public class InnerClassesInfo
38 {
39     // Constants -------------------------------------------------------------
40

41
42     // Fields ----------------------------------------------------------------
43
private int u2innerClassInfoIndex;
44     private int u2outerClassInfoIndex;
45     private int u2innerNameIndex;
46     private int u2innerClassAccessFlags;
47
48
49     // Class Methods ---------------------------------------------------------
50
public static InnerClassesInfo create(DataInput din) throws java.io.IOException JavaDoc
51     {
52         InnerClassesInfo ici = new InnerClassesInfo();
53         ici.read(din);
54         return ici;
55     }
56     
57     public int getModifiers(){
58       int mods = 0;
59       if ((u2innerClassAccessFlags & 0x0001) == 0x0001) mods |= Modifier.PUBLIC;
60       if ((u2innerClassAccessFlags & 0x0002) == 0x0002) mods |= Modifier.PRIVATE;
61       if ((u2innerClassAccessFlags & 0x0004) == 0x0004) mods |= Modifier.PROTECTED;
62       if ((u2innerClassAccessFlags & 0x0008) == 0x0008) mods |= Modifier.STATIC;
63       if ((u2innerClassAccessFlags & 0x0010) == 0x0010) mods |= Modifier.FINAL;
64       if ((u2innerClassAccessFlags & 0x0200) == 0x0200) mods |= Modifier.INTERFACE;
65       if ((u2innerClassAccessFlags & 0x0400) == 0x0400) mods |= Modifier.ABSTRACT;
66       return mods;
67     }
68
69
70     // Instance Methods ------------------------------------------------------
71
private InnerClassesInfo() {}
72
73     /** Return the inner class index. */
74     protected int getInnerClassIndex() {return u2innerClassInfoIndex;}
75
76     /** Return the name index. */
77     protected int getInnerNameIndex() {return u2innerNameIndex;}
78
79     /** Set the name index. */
80     protected void setInnerNameIndex(int index) {u2innerNameIndex = index;}
81
82     /** Check for Utf8 references to constant pool and mark them. */
83     protected void markUtf8Refs(ConstantPool pool)
84     {
85         // BUGFIX: a Swing1.1beta3 class has name index of zero - this is valid
86
if (u2innerNameIndex != 0)
87         {
88             pool.incRefCount(u2innerNameIndex);
89         }
90     }
91
92     private void read(DataInput din) throws java.io.IOException JavaDoc
93     {
94         u2innerClassInfoIndex = din.readUnsignedShort();
95         u2outerClassInfoIndex = din.readUnsignedShort();
96         u2innerNameIndex = din.readUnsignedShort();
97         u2innerClassAccessFlags = din.readUnsignedShort();
98     }
99
100     /** Export the representation to a DataOutput stream. */
101     public void write(DataOutput dout) throws java.io.IOException JavaDoc
102     {
103         dout.writeShort(u2innerClassInfoIndex);
104         dout.writeShort(u2outerClassInfoIndex);
105         dout.writeShort(u2innerNameIndex);
106         dout.writeShort(u2innerClassAccessFlags);
107     }
108 }
109
Popular Tags