123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import javassist.CannotCompileException;
- import javassist.ClassPool;
- import javassist.CtClass;
- import javassist.CtMethod;
- import javassist.NotFoundException;
- import javassist.expr.ExprEditor;
- import javassist.expr.MethodCall;
-
- @SuppressWarnings("unused")
- public class Jassist150 {
- public static final String BASE_PATH = "./";
- public static final String JAVASSIST_JAR = BASE_PATH + "javassist.jar";
- public static final String CLASSES_FOLDER = BASE_PATH + "build/classes";
- public static final String TEST_CLASSES_FOLDER = BASE_PATH
- + "build/test-classes";
-
- public static class Inner1 {
- public static int get() {
- return 0;
- }
- }
-
- public static void implTestClassTailCache() throws NotFoundException,
- CannotCompileException {
- ClassPool pool = new ClassPool(true);
- for (int paths = 0; paths < 50; paths++) {
- pool.appendClassPath(JAVASSIST_JAR);
- pool.appendClassPath(CLASSES_FOLDER);
- pool.appendClassPath(TEST_CLASSES_FOLDER);
- }
- CtClass cc = pool.get("Jassist150$Inner1");
- CtMethod ccGet = cc.getDeclaredMethod("get");
- String code1 = "{ int n1 = Integer.valueOf(1); "
- + " int n2 = Integer.valueOf(2); "
- + " int n3 = Integer.valueOf(3); "
- + " int n4 = Integer.valueOf(4); "
- + " int n5 = Integer.valueOf(5); "
- + " return n1+n2+n3+n4+n5; }";
- String code2 = "{ int n1 = java.lang.Integer.valueOf(1); "
- + " int n2 = java.lang.Integer.valueOf(2); "
- + " int n3 = java.lang.Integer.valueOf(3); "
- + " int n4 = java.lang.Integer.valueOf(4); "
- + " int n5 = java.lang.Integer.valueOf(5); "
- + " return n1+n2+n3+n4+n5; }";
- String code3 = "{ int n1 = java.lang.Integer#valueOf(1); "
- + " int n2 = java.lang.Integer#valueOf(2); "
- + " int n3 = java.lang.Integer#valueOf(3); "
- + " int n4 = java.lang.Integer#valueOf(4); "
- + " int n5 = java.lang.Integer#valueOf(5); "
- + " return n1+n2+n3+n4+n5; }";
- loop(cc, ccGet, code1);
- }
-
- public static void loop(CtClass cc, CtMethod ccGet, String code)
- throws CannotCompileException {
- long startTime = System.currentTimeMillis();
- for (int replace = 0; replace < 1000; replace++) {
- ccGet.setBody(code);
- }
- long endTime = System.currentTimeMillis();
- System.out.println("Test: Time (ms) " + (endTime - startTime));
- }
-
- public static void implTestClassTailCache2() throws NotFoundException,
- CannotCompileException {
- ClassPool pool = new ClassPool(true);
- for (int paths = 0; paths < 50; paths++) {
- pool.appendClassPath(JAVASSIST_JAR);
- pool.appendClassPath(CLASSES_FOLDER);
- pool.appendClassPath(TEST_CLASSES_FOLDER);
- }
- CtClass cc = pool.get("Jassist150$Inner1");
- CtMethod ccGet = cc.getDeclaredMethod("get");
- String code3 = "{ int n1 = java.lang.Integer#valueOf(1); "
- + " int n2 = java.lang.Integer#valueOf(2); "
- + " int n3 = java.lang.Integer#valueOf(3); "
- + " int n4 = java.lang.Integer#valueOf(4); "
- + " int n5 = java.lang.Integer#valueOf(5); "
- + " return n1+n2+n3+n4+n5; }";
- ccGet.setBody(code3);
- }
-
- public void testJIRA152() throws Exception {
- CtClass cc = ClassPool.getDefault().get("test4.JIRA152");
- CtMethod mth = cc.getDeclaredMethod("buildColumnOverride");
- mth.instrument(new ExprEditor() {
- public void edit(MethodCall c) throws CannotCompileException {
- c.replace("try{ $_ = $proceed($$); } catch (Throwable t) { throw t; }");
- }
- });
- mth.getMethodInfo().rebuildStackMap(ClassPool.getDefault());
- cc.writeFile();
- }
-
- public static void main(String[] args) throws Exception {
- new Jassist150().testJIRA152();
- }
-
- public static void main2(String[] args) {
- for (int loop = 0; loop < 5; loop++) {
- try {
- implTestClassTailCache();
- for (int i = 0; i < 100; i++)
- implTestClassTailCache2();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- System.out.println("size: " + javassist.compiler.MemberResolver.getInvalidMapSize());
- }
- }
|