Я пытаюсь определить MethodGen вызываемого объекта для данной InvokeInstruction в библиотеке BCEL. Проблема в том, что я не знаю, как использовать InvokeInstruction, чтобы добраться до MethodGen, который он пытается вызвать.
Если у меня есть объект BCEL MethodGen для основного метода программы, я могу просмотреть список инструкций и найти те, которые являются InvokeInstructions:
// Assume MethodGen mainMG is given to us
Instruction[] insns = mainMG.getInstructionList().getInstructions();
for(Instruction insn : insns) {
if(insn instanceof InvokeInstruction) {
// great, found an invoke instruction
InvokeInstruction invoke = (InvokeInstruction)insn;
// what do I do with it now?
}
}
Некоторая документация BCEL великолепна, а другие части отсутствуют. Любые предложения о том, как связать InvokeInstruction с MethodGen вызываемого метода?
Если это упростит ситуацию, я могу пока предположить, что в программе нет никакого полиморфизма. Хотя в какой-то момент мне придется с этим смириться (консервативно).
Пояснение: я понимаю, что для этого нет прямого пути (например,
invoke.getCalledMethodGen()
), но мне интересно, есть ли способ, которым я могу получить достаточно четкой информации из инструкции вызова (например, FQN метода или эквивалент), чтобы я мог связать его с вызываемым методом.