<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Hi all,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I have a problem in tracing a runnable object's caller method. To make it clear, I simplified my code as follows: </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default"><font face="monospace, monospace">public class A {</font></div><div class="gmail_default"><font face="monospace, monospace"> public void Foo () {</font></div><div class="gmail_default"><font face="monospace, monospace"> Thread t = new Thread(new MyFirstHandler());</font></div><div class="gmail_default"><font face="monospace, monospace"> }</font></div><div class="gmail_default"><font face="monospace, monospace"><br></font></div><div class="gmail_default"><font face="monospace, monospace"> private class MyFirstHandler implements Runnable {</font></div><div class="gmail_default"><font face="monospace, monospace"> @Override</font></div><div class="gmail_default"><font face="monospace, monospace"> public void run() {</font></div><div class="gmail_default"><font face="monospace, monospace"> CreateFile();</font></div><div class="gmail_default"><font face="monospace, monospace"> }</font></div><div class="gmail_default"><font face="monospace, monospace"> }</font></div><div class="gmail_default"><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><div class="gmail_default"><div class="gmail_default"><font face="monospace, monospace">public class B {</font></div><div class="gmail_default"><font face="monospace, monospace"> public void Bar () {</font></div><div class="gmail_default"><font face="monospace, monospace"> Thread t = new Thread(new MySecondHandler());</font></div><div class="gmail_default"><font face="monospace, monospace"> }</font></div><div class="gmail_default"><font face="monospace, monospace"> ....<br></font></div><div class="gmail_default"><font face="monospace, monospace">}</font></div></div><br></div><div><div class="gmail_default"><font face="arial, helvetica, sans-serif">My problem is : Given method </font><span style="font-family:monospace,monospace">CreateFile(), </span><font face="arial, helvetica, sans-serif">I want to trace back to get its caller method. Ideally I should get "A.Foo()".</font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">My algorithm is to use </font><font face="monospace, monospace">InterproceduralCFG.getCallersOf()</font> provided by heros, starting from createFile() and tracing backwards level by level: </div></div><div><div class="gmail_default"><span style="font-family:arial,helvetica,sans-serif">(1) Get</span><font face="monospace, monospace"> <java.lang.Thread: void run()></font><font face="arial, helvetica, sans-serif"> as the only caller of </font><font face="monospace, monospace">CreateFile()</font></div><div class="gmail_default"><span style="font-family:arial,helvetica,sans-serif">(2) Continue to <span style="font-family:arial,sans-serif">get the callers of </span></span><font face="monospace, monospace"><java.lang.Thread: void run()></font><font face="arial, helvetica, sans-serif">. </font></div><div class="gmail_default"><span style="font-family:arial,helvetica,sans-serif"> Now you may guess what happens: Because both A.Foo() and B.Bar() call </span><font face="monospace, monospace"><java.lang.Thread: void run()></font><font face="arial, helvetica, sans-serif">, I get A.Foo() and B.Bar() as createFile()'s caller methods. </font></div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">So my question is how to remove B.Bar() from my results ? </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Thanks a lot !</div><br></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><font face="georgia, serif">Xinxin Jin </font><div><div><font face="georgia, serif">Ph.D. student, Computer Science<br></font><div><font face="georgia, serif">University of California, San Diego</font></div><div><font face="georgia, serif"><a href="http://cseweb.ucsd.edu/~x7jin/" target="_blank">http://cseweb.ucsd.edu/~x7jin/</a></font><br></div><div><br></div></div></div></div></div>
</div>