1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
package javassist;
import java.lang.annotation.Annotation;
import java.lang.reflect.TypeVariable;
public class JvstTest5 extends JvstTestRoot {
public JvstTest5(String name) {
super(name);
}
public void testDollarClassInStaticMethod() throws Exception {
CtClass cc = sloader.makeClass("test5.DollarClass");
CtMethod m = CtNewMethod.make("public static int run(){ return $class.getName().length(); }", cc);
cc.addMethod(m);
m = CtNewMethod.make("public int run2(){ return $class.getName().length(); }", cc);
cc.addMethod(m);
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(cc.getName().length(), invoke(obj, "run"));
assertEquals(cc.getName().length(), invoke(obj, "run2"));
}
public void testSuperDefaultMethodCall() throws Exception {
CtClass cc = sloader.get("test5.DefaultMethod");
CtMethod m = CtNewMethod.make("public int run(){ return test5.DefaultMethodIntf.super.foo(); }", cc);
cc.addMethod(m);
m = CtNewMethod.make("public int run2(){ return test5.DefaultMethodIntf.baz(); }", cc);
cc.addMethod(m);
m = CtNewMethod.make("public int run3(){ return test5.DefaultMethodIntf.super.baz(); }", cc);
cc.addMethod(m);
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(1, invoke(obj, "run"));
assertEquals(10, invoke(obj, "run2"));
assertEquals(10, invoke(obj, "run3"));
}
public void testTypeAnno() throws Exception {
CtClass cc = sloader.get("test5.TypeAnno");
cc.getClassFile().compact();
cc.writeFile();
Object obj = make(cc.getName());
TypeVariable<?> t = obj.getClass().getTypeParameters()[0];
Annotation[] annos = t.getAnnotations();
assertEquals("@test5.TypeAnnoA()", annos[0].toString());
}
public void testJIRA241() throws Exception {
CtClass cc = sloader.get("test5.JIRA241");
CtMethod testMethod = cc.getDeclaredMethod("test");
testMethod.insertAfter("System.out.println(\"inserted!\");");
cc.writeFile();
Object obj = make(cc.getName());
assertEquals(10, invoke(obj, "run"));
}
public void testJIRA246() throws Exception {
CtClass ctClass = sloader.makeClass("test5.JIRA246Test");
ctClass.addInterface(sloader.get(test5.JIRA246.Test.class.getName()));
String methodBody = "public void test() { defaultMethod(); }";
CtMethod ctMethod = CtMethod.make(methodBody, ctClass);
ctClass.addMethod(ctMethod);
}
public void testJIRA246b() throws Exception {
CtClass ctClass = sloader.get(test5.JIRA246.A.class.getName());
String src = "public void id() { get(); }";
CtMethod make = CtNewMethod.make(src, ctClass);
}
}
|