<div dir="ltr"><div>Hello,</div><div><br></div><div>I have a class as follows:</div><div>------------------------</div><div>package testers;</div><div><br></div><div>import java.util.Iterator;</div><div><br></div><div>public class CallGraphs {</div><div><br></div><div>  Cell[] cells;</div><div><br></div><div>  class Cell {</div><div>    private int cell = 0;</div><div><br></div><div>    public Cell(int cell) {</div><div>      this.cell = cell;</div><div>    }</div><div><br></div><div>    public int getCell() {</div><div>      return cell;</div><div>    }</div><div>  }</div><div><br></div><div>  class CellIterator implements Iterator&lt;Cell&gt; {</div><div>    private int idx, end;</div><div><br></div><div>    public CellIterator(int idx, int end) {</div><div>      this.idx = idx;</div><div>      this.end = end;</div><div>    }</div><div><br></div><div>    public boolean hasNext() {</div><div>      return idx &lt; end;</div><div>    }</div><div><br></div><div>    public Cell next() {</div><div>      return cells[idx++];</div><div>    }</div><div><br></div><div>    public void remove() {</div><div>    }</div><div>  }</div><div><br></div><div>  void testIterator() {</div><div>    cells = new Cell[5];</div><div>    Cell c0 = new Cell(0);</div><div>    Cell c1 = new Cell(1);</div><div>    Cell c2 = new Cell(2);</div><div>    cells[0] = c0;</div><div>    cells[1] = c1;</div><div>    cells[2] = c2;</div><div>    Iterator&lt;Cell&gt; iterator = new CellIterator(0, 3);</div><div>    while (iterator.hasNext()) {</div><div>      Cell c = iterator.next();</div><div>      System.out.println(c.getCell());</div><div>    }</div><div>  }</div><div><br></div><div>  public static void main(String[] args) {</div><div>    CallGraphs cG = new CallGraphs();</div><div>    cG.testIterator();</div><div>  }</div><div>}</div><div>---------------------------------</div><div><br></div><div>I used Soot to build a call graph for the class. The call graph is exploded because of the method: &lt;testers.CallGraphs$CellIterator: java.lang.Object next()&gt;. </div><div>The method  &lt;testers.CallGraphs$CellIterator: java.lang.Object next()&gt; is the target method of &lt;testers.CallGraphs$CellIterator: testers.CallGraphs$Cell next()&gt;. The tool reported that this method is called by many other methods such as:</div><div>&lt;sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraints: boolean disables(java.security.Key)&gt;</div><div>&lt;sun.misc.ProxyGenerator$ProxyMethod: sun.misc.ProxyGenerator$MethodInfo generateMethod()&gt;</div><div>&lt;sun.misc.ProxyGenerator$MethodInfo: void write(java.io.DataOutputStream)&gt;</div><div>&lt;sun.misc.ProxyGenerator$ConstantPool: void write(java.io.OutputStream)&gt;</div><div>&lt;sun.misc.ProxyGenerator: sun.misc.ProxyGenerator$MethodInfo generateStaticInitializer()&gt;</div><div>&lt;sun.misc.ProxyGenerator: sun.misc.ProxyGenerator$MethodInfo generateStaticInitializer()&gt;</div><div>&lt;sun.misc.ProxyGenerator: void addProxyMethod(java.lang.reflect.Method,java.lang.Class)&gt;</div><div>&lt;sun.security.x509.ExtendedKeyUsageExtension: java.util.List getExtendedKeyUsage()&gt;</div><div>&lt;java.security.KeyFactory: java.security.KeyFactorySpi nextSpi(java.security.KeyFactorySpi)&gt;</div><div>&lt;sun.misc.ProxyGenerator: void checkReturnTypes(java.util.List)&gt;</div><div>&lt;sun.misc.ProxyGenerator: byte[] generateClassFile()&gt;</div><div>&lt;sun.misc.ProxyGenerator: byte[] generateClassFile()&gt;</div><div>....</div><div><span class="" style="white-space:pre">        </span></div><div>It seems the result is not correct. Can you let me know how to deal with this case.</div><div><br></div><div>Thank you very much! </div><div><br></div><div>Best,</div><div>John</div></div>