我试图在BCEL库中确定给定InvokeInstruction的被调用方的InvokeInstruction。问题是,我不知道如何使用InvokeInstruction来访问它试图调用的MethodGen。
如果一个程序的主要方法有一个BCEL对象,我可以查看指令列表并找到那些是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,有什么建议吗?
如果它简化了一些事情,我现在可以假设程序没有任何多态。不过,在某些时候,我将不得不(保守地)处理它。
Clarification:--我意识到没有一种直接的方法可以做到这一点(例如invoke.getCalledMethodGen()),但我想知道是否有什么方法可以从调用指令中获得足够的不同信息(例如,方法的FQN或equiv)。我可以把它链接回被调用的方法。
发布于 2012-06-07 18:24:24
通常情况下,您不能。BCEL和大多数其他框架使用字节码在单个类上操作。因此,您将阅读所有可用的类(可以懒洋洋地这样做),并构建自己的MethodGens存储库(例如,将FQN方法名称映射到MethodGen实例)。
https://stackoverflow.com/questions/10936910
复制相似问题