Hi there,
Its a tricky question but with the return types of the messages, you can
look through the localvariabletable for the method (
MethodGen.getLocalvariables()) and then find all the localvariables with the
same return type as the init() for example and with the same
instructionhandle.
That is the instructionhandle where you retrieve the call to m2(), say must
be the same with the instructionhandle from the given localvariable (
localvariablegen.containsTarget(ih) must return true where ih is the
instructionhandle for the call to m2()).
HTH
CEE
On 11/30/05, Atam <[EMAIL PROTECTED]> wrote:
>
> Hi all,
>
> i am also newbie here, but i read alot first about BCEL. My goal is to
> extra from within a method, which other methods are called, and to
> which objects these messages are send.
>
> eg
>
> public voud m1()
> {
> c2 c2obj = new c2();
> c2obj.m2();
> }
>
> Here, wihin m1() there are 2 messages: <init> and m2().
> This information i can extract with the code below. What i cannot do
> yet, is to know that these messages are sent to the c2obj object. So,
> i need the name of the OBJECT to which the messages are sent. If it is
> a static call, name of object is not needed.
>
> If anyone can please help me with this, i would appreciate it very much.
>
> With kind regards,
>
> Atam
>
> Code :
>
> ClassGen classGen = new ClassGen(myclass.getJavaClass());
> MethodGen methodGen = new MethodGen(mymethod,
> myclass.getClassName(), classGen.getConstantPool());
> InstructionList il = methodGen.getInstructionList();
>
> for (Iterator i = il.iterator(); i.hasNext(); )
> {
> InstructionHandle handle = (InstructionHandle)
> i.next();
>
> if (handle.getInstruction() instanceof
> InvokeInstruction)
> {
> InvokeInstruction invokeInstruction =
> (InvokeInstruction)
> handle.getInstruction();
> String calledClass =
> invokeInstruction.getClassName(classGen.getConstantPool());
> String calledMethodName =
> invokeInstruction.getName(classGen.getConstantPool());
> String calledMethodSignature =
> invokeInstruction.getSignature(classGen.getConstantPool());
> boolean isStaticMethod =
> invokeInstruction.getOpcode() ==
> Constants.INVOKESTATIC;
> String objectname;
> if( isStaticMethod)
> objectname = "static";
> else
> objectname = ""; ???????????
> }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>