KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > javaguard > NameMaker


1 /**
2  * JavaGuard -- an obfuscation package for Java classfiles.
3  *
4  * Copyright (c) 1999 Mark Welsh (markw@retrologic.com)
5  * Copyright (c) 2002 Thorsten Heit (theit@gmx.de)
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 theit@gmx.de.
22  *
23  *
24  * $Id: NameMaker.java,v 1.1.1.1 2002/04/03 13:49:44 glurk Exp $
25  */

26 package net.sf.javaguard;
27
28 import java.util.Enumeration JavaDoc;
29 import java.util.Hashtable JavaDoc;
30
31
32 /** Base class for name generators for a given namespace.
33  * The base class gathers statistics for name mappings.
34  *
35  * @author <a HREF="mailto:markw@retrologic.com">Mark Welsh</a>
36  * @author <a HREF="mailto:theit@gmx.de">Thorsten Heit</a>
37  */

38 abstract public class NameMaker {
39   /** Used for logging frequency of generated names. */
40   protected static Hashtable JavaDoc frequency = new Hashtable JavaDoc();
41   
42   
43   
44   /** Get an enumeration of distinct obfuscated names for all namespaces.
45    */

46   public static Enumeration JavaDoc getNames() {
47     return frequency.keys();
48   }
49   
50   
51   /** Get an enumeration of use count for distinct obfuscated names for all
52    * namespaces.
53    */

54   public static Enumeration JavaDoc getUseCounts() {
55     return frequency.elements();
56   }
57   
58   
59   
60   /** Return the next unique name for this namespace, differing only for
61    * identical arg-lists.
62    */

63   public String JavaDoc nextName(String JavaDoc descriptor) {
64     // Log the name usage globally across all namespaces
65
String JavaDoc name = getNextName(descriptor);
66     Integer JavaDoc intCount = (Integer JavaDoc)frequency.get(name);
67     if (intCount == null) {
68       frequency.put(name, new Integer JavaDoc(0));
69     }
70     else {
71       frequency.remove(name);
72       frequency.put(name, new Integer JavaDoc(intCount.intValue() + 1));
73     }
74     return name;
75   }
76   
77   
78   /** Return the next unique name for this namespace, differing only for
79    * identical arg-lists.
80    */

81   abstract protected String JavaDoc getNextName(String JavaDoc descriptor);
82 }
83
Popular Tags