単純なクラスを使用して javassist でバイトコードを分析しようとしていますMyData
:
class MyData {
private Collection<String> strings = new ArrayList<String>();
// .....................
public void add(String str) {
strings.add(str); // line number 35
}
// .....................
}
このクラスに対して実行しているコードは次のとおりです。
ClassFile cf = new ClassFile(new DataInputStream(TryJavassist.class.getResourceAsStream("MyData.class")));
MethodInfo minfo = cf.getMethod("add");
CodeAttribute ca = minfo.getCodeAttribute();
for (CodeIterator ci = ca.iterator(); ci.hasNext();) {
int index = ci.next();
int op = ci.byteAt(index);
System.out.println(op + "=" + Mnemonic.OPCODE[op] + ": " + minfo.getLineNumber(index));
}
それは動作し、印刷します:
42=aload_0: 35
180=getfield: 35
43=aload_1: 35
185=invokeinterface: 35
87=pop: 35
177=return: 36
35 行add()
目で、 という名前のコレクションのメソッドを呼び出しますstrings
。私が投稿したコード スニペットはinvokeinterface
、35 行目のみを取得します。OK、それがクラス フィールド ( ) であることがわかりgetfield
ます。
残りの情報を取得する方法を知りたいです。
- フィールド名は
strings
- 呼び出されるインターフェースメソッドは
add()
これまでのところ、グーグルでも API ドキュメントを読んでも、肯定的な結果は得られていません。