我试图确定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或等效值)中获得足够的不同信息。我可以将其链接回被调用的方法。 最佳答案
通常您不能。 BCEL和大多数其他用于在单个类上运行字节码的框架。因此,您将阅读所有可用的类(可以懒惰地做)并构建自己的MethodGens存储库(例如FQN方法名称到MethodGen实例的映射)。