xref: /aosp_15_r20/external/javassist/src/test/Jassist150.java (revision f1fbf3c2ab775ce834e0af96b7a85bdc7a0eac65)
1*f1fbf3c2SXin Li import javassist.CannotCompileException;
2*f1fbf3c2SXin Li import javassist.ClassPool;
3*f1fbf3c2SXin Li import javassist.CtClass;
4*f1fbf3c2SXin Li import javassist.CtMethod;
5*f1fbf3c2SXin Li import javassist.NotFoundException;
6*f1fbf3c2SXin Li import javassist.expr.ExprEditor;
7*f1fbf3c2SXin Li import javassist.expr.MethodCall;
8*f1fbf3c2SXin Li 
9*f1fbf3c2SXin Li @SuppressWarnings("unused")
10*f1fbf3c2SXin Li public class Jassist150 {
11*f1fbf3c2SXin Li     public static final String BASE_PATH = "./";
12*f1fbf3c2SXin Li     public static final String JAVASSIST_JAR = BASE_PATH + "javassist.jar";
13*f1fbf3c2SXin Li     public static final String CLASSES_FOLDER = BASE_PATH + "build/classes";
14*f1fbf3c2SXin Li     public static final String TEST_CLASSES_FOLDER = BASE_PATH
15*f1fbf3c2SXin Li             + "build/test-classes";
16*f1fbf3c2SXin Li 
17*f1fbf3c2SXin Li     public static class Inner1 {
get()18*f1fbf3c2SXin Li         public static int get() {
19*f1fbf3c2SXin Li             return 0;
20*f1fbf3c2SXin Li         }
21*f1fbf3c2SXin Li     }
22*f1fbf3c2SXin Li 
implTestClassTailCache()23*f1fbf3c2SXin Li     public static void implTestClassTailCache() throws NotFoundException,
24*f1fbf3c2SXin Li             CannotCompileException {
25*f1fbf3c2SXin Li         ClassPool pool = new ClassPool(true);
26*f1fbf3c2SXin Li         for (int paths = 0; paths < 50; paths++) {
27*f1fbf3c2SXin Li             pool.appendClassPath(JAVASSIST_JAR);
28*f1fbf3c2SXin Li             pool.appendClassPath(CLASSES_FOLDER);
29*f1fbf3c2SXin Li             pool.appendClassPath(TEST_CLASSES_FOLDER);
30*f1fbf3c2SXin Li         }
31*f1fbf3c2SXin Li         CtClass cc = pool.get("Jassist150$Inner1");
32*f1fbf3c2SXin Li         CtMethod ccGet = cc.getDeclaredMethod("get");
33*f1fbf3c2SXin Li         String code1 = "{ int n1 = Integer.valueOf(1); "
34*f1fbf3c2SXin Li                 + "  int n2 = Integer.valueOf(2); "
35*f1fbf3c2SXin Li                 + "  int n3 = Integer.valueOf(3); "
36*f1fbf3c2SXin Li                 + "  int n4 = Integer.valueOf(4); "
37*f1fbf3c2SXin Li                 + "  int n5 = Integer.valueOf(5); "
38*f1fbf3c2SXin Li                 + "  return n1+n2+n3+n4+n5; }";
39*f1fbf3c2SXin Li         String code2 = "{ int n1 = java.lang.Integer.valueOf(1); "
40*f1fbf3c2SXin Li                 + "  int n2 = java.lang.Integer.valueOf(2); "
41*f1fbf3c2SXin Li                 + "  int n3 = java.lang.Integer.valueOf(3); "
42*f1fbf3c2SXin Li                 + "  int n4 = java.lang.Integer.valueOf(4); "
43*f1fbf3c2SXin Li                 + "  int n5 = java.lang.Integer.valueOf(5); "
44*f1fbf3c2SXin Li                 + "  return n1+n2+n3+n4+n5; }";
45*f1fbf3c2SXin Li         String code3 = "{ int n1 = java.lang.Integer#valueOf(1); "
46*f1fbf3c2SXin Li                 + "  int n2 = java.lang.Integer#valueOf(2); "
47*f1fbf3c2SXin Li                 + "  int n3 = java.lang.Integer#valueOf(3); "
48*f1fbf3c2SXin Li                 + "  int n4 = java.lang.Integer#valueOf(4); "
49*f1fbf3c2SXin Li                 + "  int n5 = java.lang.Integer#valueOf(5); "
50*f1fbf3c2SXin Li                 + "  return n1+n2+n3+n4+n5; }";
51*f1fbf3c2SXin Li         loop(cc, ccGet, code1);
52*f1fbf3c2SXin Li     }
53*f1fbf3c2SXin Li 
loop(CtClass cc, CtMethod ccGet, String code)54*f1fbf3c2SXin Li     public static void loop(CtClass cc, CtMethod ccGet, String code)
55*f1fbf3c2SXin Li             throws CannotCompileException {
56*f1fbf3c2SXin Li         long startTime = System.currentTimeMillis();
57*f1fbf3c2SXin Li         for (int replace = 0; replace < 1000; replace++) {
58*f1fbf3c2SXin Li             ccGet.setBody(code);
59*f1fbf3c2SXin Li         }
60*f1fbf3c2SXin Li         long endTime = System.currentTimeMillis();
61*f1fbf3c2SXin Li         System.out.println("Test: Time (ms) " + (endTime - startTime));
62*f1fbf3c2SXin Li     }
63*f1fbf3c2SXin Li 
implTestClassTailCache2()64*f1fbf3c2SXin Li     public static void implTestClassTailCache2() throws NotFoundException,
65*f1fbf3c2SXin Li             CannotCompileException {
66*f1fbf3c2SXin Li         ClassPool pool = new ClassPool(true);
67*f1fbf3c2SXin Li         for (int paths = 0; paths < 50; paths++) {
68*f1fbf3c2SXin Li             pool.appendClassPath(JAVASSIST_JAR);
69*f1fbf3c2SXin Li             pool.appendClassPath(CLASSES_FOLDER);
70*f1fbf3c2SXin Li             pool.appendClassPath(TEST_CLASSES_FOLDER);
71*f1fbf3c2SXin Li         }
72*f1fbf3c2SXin Li         CtClass cc = pool.get("Jassist150$Inner1");
73*f1fbf3c2SXin Li         CtMethod ccGet = cc.getDeclaredMethod("get");
74*f1fbf3c2SXin Li         String code3 = "{ int n1 = java.lang.Integer#valueOf(1); "
75*f1fbf3c2SXin Li                 + "  int n2 = java.lang.Integer#valueOf(2); "
76*f1fbf3c2SXin Li                 + "  int n3 = java.lang.Integer#valueOf(3); "
77*f1fbf3c2SXin Li                 + "  int n4 = java.lang.Integer#valueOf(4); "
78*f1fbf3c2SXin Li                 + "  int n5 = java.lang.Integer#valueOf(5); "
79*f1fbf3c2SXin Li                 + "  return n1+n2+n3+n4+n5; }";
80*f1fbf3c2SXin Li         ccGet.setBody(code3);
81*f1fbf3c2SXin Li     }
82*f1fbf3c2SXin Li 
testJIRA152()83*f1fbf3c2SXin Li     public void testJIRA152() throws Exception {
84*f1fbf3c2SXin Li         CtClass cc = ClassPool.getDefault().get("test4.JIRA152");
85*f1fbf3c2SXin Li         CtMethod mth = cc.getDeclaredMethod("buildColumnOverride");
86*f1fbf3c2SXin Li         mth.instrument(new ExprEditor() {
87*f1fbf3c2SXin Li             public void edit(MethodCall c) throws CannotCompileException {
88*f1fbf3c2SXin Li                 c.replace("try{ $_ = $proceed($$); } catch (Throwable t) { throw t; }");
89*f1fbf3c2SXin Li             }
90*f1fbf3c2SXin Li         });
91*f1fbf3c2SXin Li         mth.getMethodInfo().rebuildStackMap(ClassPool.getDefault());
92*f1fbf3c2SXin Li         cc.writeFile();
93*f1fbf3c2SXin Li     }
94*f1fbf3c2SXin Li 
main(String[] args)95*f1fbf3c2SXin Li     public static void main(String[] args) throws Exception {
96*f1fbf3c2SXin Li         new Jassist150().testJIRA152();
97*f1fbf3c2SXin Li     }
98*f1fbf3c2SXin Li 
main2(String[] args)99*f1fbf3c2SXin Li     public static void main2(String[] args) {
100*f1fbf3c2SXin Li         for (int loop = 0; loop < 5; loop++) {
101*f1fbf3c2SXin Li             try {
102*f1fbf3c2SXin Li                 implTestClassTailCache();
103*f1fbf3c2SXin Li                 for (int i = 0; i < 100; i++)
104*f1fbf3c2SXin Li                     implTestClassTailCache2();
105*f1fbf3c2SXin Li             } catch (Exception e) {
106*f1fbf3c2SXin Li                 e.printStackTrace();
107*f1fbf3c2SXin Li             }
108*f1fbf3c2SXin Li         }
109*f1fbf3c2SXin Li         System.out.println("size: " + javassist.compiler.MemberResolver.getInvalidMapSize());
110*f1fbf3c2SXin Li     }
111*f1fbf3c2SXin Li }
112