<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p dir="ltr">Hi.</p>
<p dir="ltr">Yes Spark will never give you duplicate edges for the same calls. That is intended.
</p>
<p dir="ltr">Cheers,<br>
Eric</p>
<div class="gmail_quote">On May 18, 2015 11:46 PM, Jason Ott &lt;jott002@ucr.edu&gt; wrote:<br type="attribution">
<blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div dir="ltr">My tests suggest that when I add multiple entry points that have overlapping edges, that those edges are not added multiple times.&nbsp; I just want to confirm that.
<div><br>
</div>
<div>Ultimately I experiencing a bizarre problem where I create many files with many entry points.&nbsp; Each of those files instantiates a particular object.&nbsp; Also in that file is a list of all public methods that we want included in the call graph.</div>
<div><br>
</div>
<div>I then dump that into soot for Spark to generate the call graph.&nbsp; However, there are edges that are missing.&nbsp; I have found one instance where I have, in one of my files, several methods that are not even referenced in the graph.&nbsp; I'm not sure why they
 aren't there.</div>
<div><br>
</div>
<div>To give an example I have a few files:</div>
<div><br>
</div>
<div>fileone.java:</div>
<div>public class fileone {</div>
<div>public static void main(String[] args) {</div>
<div>&nbsp; &nbsp; CustomObject co = new CustomObject();</div>
<div><br>
</div>
<div>&nbsp; &nbsp; co.doone();</div>
<div>&nbsp; &nbsp; co.dotwo();</div>
<div>&nbsp; &nbsp; co.dothree();</div>
<div>}</div>
<div>}</div>
<div><br>
</div>
<div>filetwo.java:</div>
<div>public class filetwo {</div>
<div>public static void main(String[] args) {</div>
<div>&nbsp; &nbsp; DiffObj do = new DiffObj();</div>
<div><br>
</div>
<div>&nbsp; &nbsp; do.doit();</div>
<div>&nbsp; &nbsp; do.do();</div>
<div>&nbsp; &nbsp; do.stop();</div>
<div>}</div>
<div><br>
</div>
<div>Then for spark for each file, I add each class and their entry point:</div>
<div>//...</div>
<div>for(file f : folder) {</div>
<div>&nbsp; &nbsp; sootClass = Scene.v().forceResolve(f.className, SootClass.BODIES);</div>
<div>&nbsp; &nbsp; sootClass.setApplicationClass();</div>
<div>&nbsp; &nbsp; entrypoints.add(sootCalss.getMethodByName(f.method));// always resolves to &quot;main&quot;</div>
<div>}</div>
<div>Scene.v().loadNecessaryClasses();</div>
<div>Scene.v().setEntryPoints(entryPoints);</div>
<div>PackManager.v().runPacks();</div>
<div><br>
</div>
<div>callGraph = Scene.v().getCallGraph();</div>
<div>//...</div>
<div><br>
</div>
<div>Obviously this part is shortened for brevity.&nbsp; As of right now, do.doit() and do.do() are not present in the call graph.&nbsp; I don't fully understand why this is the case.&nbsp; Any help would be greatly appreciated.</div>
</div>
</div>
</blockquote>
</div>
</body>
</html>