<div dir="ltr">Hi,<div><br></div><div>I&#39;m extending FlowDroid to construct an Android app&#39;s call graph. More specifically, I get the call graph by modifying Infoflow.runAnalysis(final ISourceSinkManager sourcesSinks, final Set&lt;String&gt; additionalSeeds) to call Scene.v().getCallGraph(). The call graph is missing edges in an odd way - for a function, the graph has some outgoing edges but is missing ones that should be there. Namely, given the following function (shown in Java rather than jimple for readability), the called methods should be &quot;get()&quot;, &quot;isFinished()&quot;, &quot;remove()&quot;, &quot;free()&quot;, &quot;size()&quot;, &quot;update()&quot;, but I&#39;m only getting &quot;get()&quot;, &quot;size()&quot;, and &quot;remove()&quot;. I don&#39;t understand why &quot;remove()&quot; is included but &quot;free()&quot; is not since they are in the same basic block. I&#39;m using soot.jimple.toolkits.callgraph.TransitiveTargets to analyze the call graph.</div><div><br></div><div><div>public void update(float x) {</div><div>  for (...size()..) {</div><div><span style="white-space:pre">      </span>get();</div><div><span style="white-space:pre">      i</span>f (isFinished()) {</div><div><span style="white-space:pre">        </span>remove();</div><div><span style="white-space:pre">        </span>free();</div><div><span style="white-space:pre">      </span>}</div><div><span style="white-space:pre">  </span>}</div><div><br></div><div><span style="white-space:pre">  </span>if (y) {</div><div><span style="white-space:pre">    </span>if (x) {</div><div><span style="white-space:pre">      </span>for (... size()...)  get().update(x);</div><div><span style="white-space:pre">    </span>} else {</div><div><span style="white-space:pre">      </span>for (...size()...)  get().update(x);</div><div><span style="white-space:pre">    </span>}</div><div><span style="white-space:pre">  </span>}</div><div>}</div></div><div><br></div><div>Thank you for your help.</div><div><br></div></div>