Re: Accessing OBJECT names on which methods are called from within other methods
C E Ezeugoh <[email protected]> Thu, 1 Dec 2005 01:27:49 +0000
| Newsgroups | gmane.comp.jakarta.bcel.user |
|---|---|
| Message-ID | <[email protected]> |
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] > >