KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tonicsystems > jarjar > util > JarTransformer


1 /*
2   Jar Jar Links - A utility to repackage and embed Java libraries
3   Copyright (C) 2004 Tonic Systems, Inc.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 2 of the License, or
8   (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program; see the file COPYING. if not, write to
17   the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18   Boston, MA 02111-1307 USA
19 */

20
21 package com.tonicsystems.jarjar.util;
22
23 import java.io.*;
24 import org.objectweb.asm.Attribute;
25 import org.objectweb.asm.ClassReader;
26 import org.objectweb.asm.ClassWriter;
27 import org.objectweb.asm.ClassVisitor;
28
29 abstract public class JarTransformer implements JarProcessor
30 {
31     public boolean process(EntryStruct struct) throws IOException {
32         if (struct.name.endsWith(".class")) {
33             // System.err.println("processing " + struct.name);
34
ClassReader reader = new ClassReader(struct.in);
35             struct.in.close();
36             GetNameClassWriter w = new GetNameClassWriter(true);
37             reader.accept(transform(w), false);
38             struct.in = new ByteArrayInputStream(w.toByteArray());
39             struct.name = pathFromName(w.getClassName());
40         }
41         return true;
42     }
43
44     abstract protected ClassVisitor transform(ClassVisitor v);
45
46     private static String JavaDoc pathFromName(String JavaDoc className) {
47         return className.replace('.', '/') + ".class";
48     }
49 }
50
Popular Tags