我正在尝试确定BCEL库中给定InvokeInstruction的被调用者的MethodGen。问题是我不知道如何使用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或等价物)我可以将它链接回被调用的方法。
答案 0 :(得分:0)
一般情况下你不能。 BCEL和大多数其他框架用于在单个类上运行字节码。因此,您将阅读所有可用的类(可以懒得做)并构建自己的MethodGens存储库(例如,将FQN方法名称映射到MethodGen实例)。