0
我正在試圖確定BCEL庫中給定InvokeInstruction的被調用者的MethodGen。問題是,我不知道如何使用InvokeInstruction來獲取它正試圖調用的MethodGen。如何確定由調用指令(BCEL)調用的方法?
如果我有一個程序的主要方法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或equiv。),我可以將其鏈接回被調用的方法。
根據我目前爲止的內容,我可以非常輕鬆地構建該地圖,我想我希望找到的一部分是如果有方法可以獲得該方法的FQN。 – jbranchaud
嘗試invoke.getType(cpg).getSignature()+「。」 + invoke.getSignature(cpg) –
這些似乎給我關於特定方法調用的返回類型的信息。但是,'invoke.getName(cpGen);'給了我調用方法的名字。現在我只需要縮小包含該方法的類就可以了。 – jbranchaud