インストルメントされた各メソッドに数行のコードを追加して、メソッドの名前をファイルに書き込もうとしています。私はJavassistを使用しています。
これが私のコードです:
public static void addInstrumentation(CtClass ctClass, CtMethod ctMethod) throws NotFoundException, CannotCompileException {
if (ctClass.getName().startsWith("com.application.bookstore.entities.test")) {
String testName = ctClass.getName() + "." + ctMethod.getName();
String fileToWrite = "C:/profiler/root.txt";
ctMethod.insertBefore("{ FileWriter fw = new FileWriter(\"" + fileToWrite + "\", true); BufferedWriter out = new BufferedWriter(fw); out.write(\"" + testName + "\"); out.newLine(); out.close(); }");
}
else {
String methodName = ctClass.getName() + "." + ctMethod.getName() + "()";
String fileToRead = "C:/profiler/root.txt";
ctMethod.insertBefore("{ FileReader fr = new FileReader(\"" + fileToRead + "\"); BufferedReader in = new BufferedReader(fr); String line; while((line = in.readLine()) != null); in.close(); FileWriter fw = new FileWriter(line, true); BufferedWriter out = new BufferedWriter(fw); out.write(\"" + methodName + "\"); out.newLine(); out.close(); }");
}
}
/**
* Get current classname and for each methods inside it, call the addInstrumentation method.
*/
@Override
public void onLoad(ClassPool pool, String classname) throws NotFoundException, CannotCompileException {
if (classToImplement(classname))
{
pool.importPackage("java.io");
CtClass ctClass = pool.get(classname);
for (CtMethod ctMethod : ctClass.getDeclaredMethods()) {
if (!Modifier.isNative(ctMethod.getModifiers())) {
addInstrumentation(ctClass, ctMethod);
}
}
}
}
私の問題は他の部分にあります。行の値を取得できないため、ファイルを開いて書き込みます。
では、lineの値を取得する方法について考えていますか?
ありがとう