KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > yworks > yguard > obf > MdFd


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;
27
28 import java.io.*;
29 import java.lang.reflect.*;
30 import java.util.*;
31 import com.yworks.yguard.obf.classfile.*;
32
33 /**
34  * Base to method and field tree items.
35  *
36  * @author Mark Welsh
37  */

38 abstract public class MdFd extends TreeItem
39 {
40     // Constants -------------------------------------------------------------
41

42
43     // Fields ----------------------------------------------------------------
44
private String JavaDoc descriptor = null;
45
46
47     // Class Methods ---------------------------------------------------------
48

49
50     // Instance Methods ------------------------------------------------------
51
/** Ctor. */
52     public MdFd(TreeItem parent, boolean isSynthetic, String JavaDoc name, String JavaDoc descriptor, int access)
53     {
54         super(parent, name);
55         this.descriptor = descriptor;
56         this.access = access;
57         this.isSynthetic = isSynthetic;
58         if (name.equals("") || descriptor.equals("") || !(parent instanceof Cl))
59         {
60             System.err.println("Internal error: method/field must have name and descriptor, and have Class or Interface as parent");
61         }
62
63         // Disallow obfuscation of 'Synthetic' and native methods and fields
64
if (isSynthetic || Modifier.isNative(access))
65         {
66             setOutName(getInName());
67         }
68     }
69
70     /** Return the method or field descriptor String. */
71     public String JavaDoc getDescriptor() {return descriptor;}
72
73     /** Return the display name for field. */
74     public String JavaDoc toString()
75     {
76         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
77         int modifiers = getModifiers();
78         if (Modifier.isAbstract(modifiers))
79         {
80             sb.append("abstract ");
81         }
82         if (Modifier.isSynchronized(modifiers))
83         {
84             sb.append("synchronized ");
85         }
86         if (Modifier.isTransient(modifiers))
87         {
88             sb.append("transient ");
89         }
90         if (Modifier.isVolatile(modifiers))
91         {
92             sb.append("volatile ");
93         }
94         if (Modifier.isNative(modifiers))
95         {
96             sb.append("native ");
97         }
98         if (Modifier.isPublic(modifiers))
99         {
100             sb.append("public ");
101         }
102         if (Modifier.isProtected(modifiers))
103         {
104             sb.append("protected ");
105         }
106         if (Modifier.isPrivate(modifiers))
107         {
108             sb.append("private ");
109         }
110         if (Modifier.isStatic(modifiers))
111         {
112             sb.append("static ");
113         }
114         if (Modifier.isFinal(modifiers))
115         {
116             sb.append("final ");
117         }
118         sb.append(getReturnTypeName());
119         sb.append(getInName());
120         sb.append(getDescriptorName());
121         return sb.toString();
122     }
123
124     /** Return the display name of the return type. */
125     protected String JavaDoc getReturnTypeName()
126     {
127         String JavaDoc[] types = parseTypes();
128         return (types.length > 0 ? types[types.length - 1] : "") + " ";
129     }
130
131     /** Return the display name of the descriptor types. */
132     abstract protected String JavaDoc getDescriptorName();
133
134     /** Return the parsed descriptor types array. */
135     private String JavaDoc[] parsedTypes = null;
136     protected String JavaDoc[] parseTypes()
137     {
138         if (parsedTypes == null)
139         {
140             try
141             {
142                 parsedTypes = ClassFile.parseDescriptor(getDescriptor(), true);
143             }
144             catch (Exception JavaDoc e)
145             {
146                 parsedTypes = null;
147             }
148         }
149         return parsedTypes;
150     }
151 }
152
Popular Tags