BCEL 라이브러리에서 주어진 InvokeInstruction에 대한 호출 수신자의 MethodGen을 확인하려고합니다. 문제는 InvokeInstruction을 사용하여 호출하려고하는 MethodGen에 연결하는 방법을 모른다는 것입니다. 나는이 프로그램의 주요 방법에 대한 BCEL MethodGen 객체가있는 경우InvokeInstruction (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의 문서 중 일부
위대하고 다른입니다 부품이 부족합니다. 호출되는 메소드의 MethodGen에 InvokeInstruction을 연결하는 방법에 대한 제안 사항이 있습니까?단순화하면 프로그램에 다형성이 없다고 가정 할 수 있습니다. 어느 시점에서 나는 그것을 (보수적으로) 다루어야 만 하겠지만.
명확한 설명 : I (예
invoke.getCalledMethodGen()
)이 작업을 수행하는 직접 경로가 아닌 실현,하지만 난합니다 (호출 명령에서 예를 들어, 방법의 충분한 별개의 정보를 얻을 수있는 방법이 있는지 궁금 FQN 또는 equiv.) 호출 할 메서드를 다시 연결할 수 있습니다.
내가 지금까지 가지고있는 것을 바탕으로, 나는 그지도를 아주 쉽게 만들 수있다. 나는 방법의 FQN을 얻을 수있는 방법이 있는지 찾아 내기를 원한다고 생각한다. – jbranchaud
invoke.getType (cpg) .getSignature() + "."를 사용해보세요. + invoke.getSignature (cpg) –
이것들은 특정 메소드 호출의 리턴 타입에 대한 정보를 제공합니다. 그러나,'invoke.getName (cpGen);'은 호출 된 메소드의 이름을 알려줍니다. 이제 메소드를 포함하고있는 클래스가 무엇인지를 좁혀 야합니다. – jbranchaud