Accessing OBJECT names on which methods are called from within other methods

Atam <[email protected]> Wed, 30 Nov 2005 20:13:00 +0530
Newsgroups gmane.comp.jakarta.bcel.user
Message-ID <[email protected]>
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 = ""; ???????????
			   }
		}