1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.tonicsystems.jarjar.util;
18
19 import java.io.*;
20 import org.objectweb.asm.ClassReader;
21 import org.objectweb.asm.ClassVisitor;
22 import org.objectweb.asm.ClassWriter;
23
24 abstract public class JarTransformer implements JarProcessor
25 {
26 public boolean process(EntryStruct struct) throws IOException {
27 if (struct.name.endsWith(".class")) {
28 ClassReader reader;
29 try {
30 reader = new ClassReader(struct.data);
31 } catch (Exception e) {
32 return true;
33 }
34 GetNameClassWriter w = new GetNameClassWriter(ClassWriter.COMPUTE_MAXS);
35 reader.accept(transform(w), ClassReader.EXPAND_FRAMES);
36 struct.data = w.toByteArray();
37 struct.name = pathFromName(w.getClassName());
38 }
39 return true;
40 }
41
42 abstract protected ClassVisitor transform(ClassVisitor v);
43
44 private static String pathFromName(String className) {
45 return className.replace('.', '/') + ".class";
46 }
47 }