KickJava   Java API By Example, From Geeks To Geeks.

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


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

25 package com.yworks.yguard.obf;
26
27 import java.util.HashMap JavaDoc;
28 import java.util.Map JavaDoc;
29
30 /**
31  *
32  * @author muellese
33  */

34 public abstract class NameMakerFactory
35 {
36   
37   /** Holds value of property instance. */
38   private static NameMakerFactory instance = new DefaultNameMakerFactory();
39   
40   /** Creates a new instance of NameMakerFactory */
41   protected NameMakerFactory()
42   {}
43   
44   /** Getter for property instance.
45    * @return Value of property instance.
46    *
47    */

48   public static NameMakerFactory getInstance()
49   {
50     return instance;
51   }
52   
53   /** Setter for property instance.
54    * @param instance New value of property instance.
55    *
56    */

57   protected void setInstance(NameMakerFactory _instance)
58   {
59     instance = _instance;
60   }
61   
62   public abstract NameMaker getPackageNameMaker(String JavaDoc[] reservedNames, String JavaDoc packageName);
63
64   public abstract NameMaker getClassNameMaker(String JavaDoc[] reservedNames, String JavaDoc packageName);
65   
66   public abstract NameMaker getInnerClassNameMaker(String JavaDoc[] reservedNames, String JavaDoc packageName);
67   
68   public abstract NameMaker getMethodNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName);
69
70   public abstract NameMaker getFieldNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName);
71   
72   public static class DefaultNameMakerFactory extends NameMakerFactory{
73     
74     private Map JavaDoc classNameMap = new HashMap JavaDoc();
75     private Map JavaDoc fieldNameMap = new HashMap JavaDoc();
76     private Map JavaDoc methodNameMap = new HashMap JavaDoc();
77     private Map JavaDoc innerClassNameMap = new HashMap JavaDoc();
78     private Map JavaDoc packageNameMap = new HashMap JavaDoc();
79     
80     public NameMaker getClassNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName)
81     {
82       NameMaker res = (NameMaker) classNameMap.get(fqClassName);
83       if (res == null){
84         res = createClassNameMaker(reservedNames, fqClassName);
85         classNameMap.put(fqClassName, res);
86       }
87       return res;
88     }
89     
90     protected NameMaker createClassNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName){
91       return new KeywordNameMaker(reservedNames);
92     }
93     
94     public NameMaker getFieldNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName)
95     {
96       NameMaker res = (NameMaker) fieldNameMap.get(fqClassName);
97       if (res == null){
98         res = createFieldNameMaker(reservedNames, fqClassName);
99         fieldNameMap.put(fqClassName, res);
100       }
101       return res;
102     }
103
104     protected NameMaker createFieldNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName){
105       return new KeywordNameMaker(reservedNames, false, true);
106     }
107     
108     public NameMaker getInnerClassNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqInnerClassName)
109     {
110       NameMaker res = (NameMaker) innerClassNameMap.get(fqInnerClassName);
111       if (res == null){
112         res = createInnerClassNameMaker(reservedNames, fqInnerClassName);
113         innerClassNameMap.put(fqInnerClassName, res);
114       }
115       return res;
116     }
117     
118     protected NameMaker createInnerClassNameMaker(final String JavaDoc[] reservedNames, String JavaDoc fqInnerClassName){
119       final NameMaker inner = new KeywordNameMaker(null);
120       //JBuilder7 incompatability workaround
121
return new NameMaker(){
122         public String JavaDoc nextName(String JavaDoc sig){
123           while(true){
124             String JavaDoc name = '_' + inner.nextName(sig);
125             if (reservedNames == null || !Tools.isInArray(name, reservedNames)){
126               return name;
127             }
128           }
129         }
130       };
131     }
132
133     public NameMaker getMethodNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName)
134     {
135       NameMaker res = (NameMaker) methodNameMap.get(fqClassName);
136       if (res == null){
137         res = createMethodNameMaker(reservedNames, fqClassName);
138         methodNameMap.put(fqClassName, res);
139       }
140       return res;
141     }
142
143     protected NameMaker createMethodNameMaker(String JavaDoc[] reservedNames, String JavaDoc fqClassName){
144       return new KeywordNameMaker(reservedNames, false, true);
145     }
146     
147     public NameMaker getPackageNameMaker(String JavaDoc[] reservedNames, String JavaDoc packageName)
148     {
149       NameMaker res = (NameMaker) packageNameMap.get(packageName);
150       if (res == null){
151         res = createPackageNameMaker(reservedNames, packageName);
152         packageNameMap.put(packageName, res);
153       }
154       return res;
155     }
156     
157     protected NameMaker createPackageNameMaker(String JavaDoc[] reservedNames, String JavaDoc packageName){
158       return new KeywordNameMaker(reservedNames);
159     }
160     
161     public String JavaDoc toString(){
162       return "default";
163     }
164   }
165 }
166
Popular Tags