<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&#39;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 &quot;A.Foo()&quot;.</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"> ​&lt;java.lang.Thread: void run()&gt;</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">&lt;java.lang.Thread: void run()&gt;</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">​&lt;java.lang.Thread: void run()&gt;</font><font face="arial, helvetica, sans-serif">, I get A.Foo() and B.Bar() as createFile()&#39;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>