12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package javassist;
-
- import java.util.Enumeration;
- import java.util.zip.*;
-
- public class ClassPoolBench {
- static ClassPool cp;
- static boolean mod = false, detach = false, readonly = false;
-
- public static void accessClass(String name) throws Exception {
- CtClass cc = cp.get(name);
- System.out.println(cc.getName());
- cc.getSuperclass();
- if (mod)
- cc.getClassFile();
-
- if (detach)
- cc.stopPruning(true);
-
- if (!readonly)
- cc.toBytecode();
-
- if (detach)
- cc.detach();
- }
-
- @SuppressWarnings("rawtypes")
- public static void accessAll(String filename) throws Exception {
- ZipFile zip = new ZipFile(filename);
- Enumeration files = zip.entries();
- while (files.hasMoreElements()) {
- ZipEntry z = (ZipEntry)files.nextElement();
- String name = z.getName();
- if (name.endsWith(".class")) {
- name = name.substring(0, name.length() - 6)
- .replace('/', '.');
- accessClass(name);
- }
- }
-
- zip.close();
- }
-
- public static void main(String[] args) throws Exception {
- cp = ClassPool.getDefault();
- cp.appendClassPath(args[0]);
- if (args[1].equals("true"))
- mod = true;
- else if (args[1].equals("detach"))
- mod = detach = true;
- else if (args[1].equals("read"))
- readonly = true;
-
- System.err.println("mod: " + mod + " detach: " + detach
- + " readonly: " + readonly);
- accessAll(args[0]);
- }
- }
|