0

invokevirtual 操作を呼び出したオブジェクトの名前を知る必要があります (次の形式 - Objectname@object_id)。MethodInsnNode オブジェクトのみを指定することは可能ですか? インデックス0でローカル変数に格納されていることは知っていますが、取得方法がわかりません。

4

2 に答える 2

1

ローカル変数にアクセスするには MethodNode が必要です。

関連する MethodNode が変数mnにあり、MethodInsnNode が格納されているinsn場合:

InsnList insnList = mn.instructions;
int instructionIdx = insnList.indexOf(insn);
String name =  null;
int wantedLocalVariableIndex = 0;
for (LocalVariableNode lvn : mn.localVariables) {
    if (lvn.index == wantedLocalVariableIndex && insnList.indexOf(lvn.start) < instructionIdx && instructionIdx < insnList.indexOf(lvn.end)) {
        name = lvn.name;
        break;
    }
}
if (name != null) {
    // we found it's name
}
于 2013-02-22T22:58:05.380 に答える