KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jbet > cmd > dupclass


1 /*
2  * JBET - Java Binary Enhancement Tool
3  * Copyright (c) 2003 Networks Associates Technology, Inc.
4  *
5  * This software was developed under DARPA/SPAWAR contract
6  * N66001-00-C-8602 "SPMA" as part of the
7  * DARPA OASIS research program.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28  * SUCH DAMAGE.
29  */

30
31 package jbet.cmd;
32 import jbet.*;
33 import java.util.*;
34
35
36 public class dupclass implements Command {
37
38     public int helplevel() { return 3; }
39     public String JavaDoc shorthelp() { return "rename classes"; }
40     public String JavaDoc longhelp() { return "jbet dupclass <classes> : <classes> \n"; }
41
42     public void run (Lexer lexer) throws Exception JavaDoc {
43     ClassFinder f = Jbet.loader.getCopyFinder;
44     lexer.match(Token.END_OF_OPTS);
45     Vector from = new Vector();
46     lexer.getClasses(from, Jbet.loader.getCopyFinder);
47     lexer.match(':');
48     Vector to = new Vector ();
49     for (int i = 0; i < from.size(); i++) {
50         to.add( lexer.parse_name() );
51     }
52     lexer.term();
53
54     Hashtable subs = new Hashtable();
55     for (int i = 0; i < to.size(); i++) {
56         ClassInfo cr = (ClassInfo) from.elementAt(i);
57         String JavaDoc newname = (String JavaDoc) to.elementAt(i);
58         subs.put(cr.name(), newname);
59         HashSet inners = Util.findInnerClasses(cr.name(),
60                            Jbet.loader.getCopyFinder);
61         for (Iterator j = inners.iterator(); j.hasNext();) {
62         String JavaDoc icname = (String JavaDoc) j.next();
63         ClassInfo iccr = Jbet.loader.getClass(icname);
64         from.add(iccr);
65         subs.put(icname, newname + "$" +
66              iccr.name().substring(cr.name().length()+1));
67         }
68     }
69     
70     Vector newcrs = new Vector ();
71     for (int i = 0; i < from.size(); i++) {
72         ClassInfo cr = (ClassInfo) from.elementAt(i);
73         cr.relocate(subs);
74         cr.dirty = true;
75         Jbet.loader.putClass(cr);
76     }
77     }
78
79 }
80
Popular Tags