MCPcopy Create free account
hub / github.com/GCMiner/GCMiner / Monitor

Class Monitor

src/test/java/Monitor.java:4–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2import javassist.*;
3
4public class Monitor {
5 final static ClassPool pool = ClassPool.getDefault();
6 final static String classname = "examples.Student";
7 public void studentLearnMonitor() throws Exception{
8 CtClass ss = pool.getCtClass(classname);
9 CtClass.debugDump="./dump";
10 String methodname = "learn";
11 CtMethod learn_ori = ss.getDeclaredMethod(methodname);
12 //拷贝一份learn方法
13 CtMethod learn_cp = CtNewMethod.copy(learn_ori,learn_ori.getName()+"_cp",ss,null);
14 //添加拷贝后的方法
15 ss.addMethod(learn_cp);
16 //修改learn方法:原代码前后添加时间
17 String src = "{"+
18 "long start = System.currentTimeMillis();" +
19 learn_ori.getName()+"_cp($$);"+
20 "long end = System.currentTimeMillis();"+
21 "System.out.println(end-start);"+
22 "}";
23 learn_ori.setBody(src);
24 ss.toClass();
25 //生成.class文件,主要用于调试,查看是否有代码片段被忽略
26 //ss.writeFile();
27 Student s = new Student();
28 s.learn();
29 }
30
31 public void studentDisplayMonitor() throws Exception{
32 CtClass ss = pool.getCtClass(classname);
33 CtClass.debugDump="./dump";
34 //添加字段name
35 CtField param = new CtField(pool.get("java.lang.String"),"name", ss);
36 // 访问级别是 private
37 param.setModifiers(Modifier.PRIVATE);
38 // 初始值是 "Frankyu"
39 ss.addField(param, CtField.Initializer.constant("Frankyu"));
40 String methodname = "display";
41 CtMethod display = ss.getDeclaredMethod(methodname);
42 String src = "{"+
43 "System.out.println($0.age);" +
44 "$0.name=\"frankyu\";" +
45 "System.out.println($0.name);"+
46 "}";
47 display.insertBefore(src);
48 if(true){
49 System.out.println("Hello javassist + 1");
50 }
51 src ="if(true){" +
52 "System.out.println(\"Hello javassist +2\");" +
53 "}";
54 display.insertAt(7,src);
55 src = "{"+
56 "System.out.println($0.grade);"+
57 "}";
58 display.insertAfter(src);
59 ss.toClass();
60 //ss.writeFile();
61 Student s = new Student();

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected