@Test public void testNodeWithSelfCycle() throws Exception { node(1, 2); node(2, 3); node(3, 1); node(2, 2); AcyclicCallGraphBuilder builder = new AcyclicCallGraphBuilder(program, functions, false); DependencyGraph<Address> graph = builder.getDependencyGraph(DUMMY_MONITOR); Assert.assertEquals(3, graph.size()); assertDependents(graph, 3, 2); assertDependents(graph, 2, 1); assertDependents(graph, 1); }
public DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor) throws CancelledException { DependencyGraph<Address> graph = new DependencyGraph<>(); Deque<Address> startPoints = findStartPoints(); Set<Address> unprocessed = new TreeSet<>(functionSet); while (!unprocessed.isEmpty()) { monitor.checkCanceled(); Address functionEntry = getNextStartFunction(startPoints, unprocessed); processForward(graph, unprocessed, functionEntry, monitor); } return graph; }
AcyclicCallGraphBuilder { public DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor) throws CancelledException { DependencyGraph<Address> graph = new DependencyGraph<>(); Deque<Address> startPoints = findStartPoints(); Set<Address> unprocessed = new TreeSet<>(functionSet); while (!unprocessed.isEmpty()) { monitor.checkCanceled(); Address functionEntry = getNextStartFunction(startPoints, unprocessed); processForward(graph, unprocessed, functionEntry, monitor); } return graph; } }
AcyclicCallGraphBuilder { public DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor) throws CancelledException { DependencyGraph<Address> graph = new DependencyGraph<>(); Deque<Address> startPoints = findStartPoints(); Set<Address> unprocessed = new TreeSet<>(functionSet); while (!unprocessed.isEmpty()) { monitor.checkCanceled(); Address functionEntry = getNextStartFunction(startPoints, unprocessed); processForward(graph, unprocessed, functionEntry, monitor); } return graph; } AcyclicCallGraphBuilder(Program program, boolean killThunks);  AcyclicCallGraphBuilder(Program program, AddressSetView set, boolean killThunks);  AcyclicCallGraphBuilder(Program program, Collection<Function> functions,
			boolean killThunks); }
AcyclicCallGraphBuilder { public DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor) throws CancelledException { DependencyGraph<Address> graph = new DependencyGraph<>(); Deque<Address> startPoints = findStartPoints(); Set<Address> unprocessed = new TreeSet<>(functionSet); while (!unprocessed.isEmpty()) { monitor.checkCanceled(); Address functionEntry = getNextStartFunction(startPoints, unprocessed); processForward(graph, unprocessed, functionEntry, monitor); } return graph; } AcyclicCallGraphBuilder(Program program, boolean killThunks);  AcyclicCallGraphBuilder(Program program, AddressSetView set, boolean killThunks);  AcyclicCallGraphBuilder(Program program, Collection<Function> functions,
			boolean killThunks); DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor); }
AcyclicCallGraphBuilder { public DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor) throws CancelledException { DependencyGraph<Address> graph = new DependencyGraph<>(); Deque<Address> startPoints = findStartPoints(); Set<Address> unprocessed = new TreeSet<>(functionSet); while (!unprocessed.isEmpty()) { monitor.checkCanceled(); Address functionEntry = getNextStartFunction(startPoints, unprocessed); processForward(graph, unprocessed, functionEntry, monitor); } return graph; } AcyclicCallGraphBuilder(Program program, boolean killThunks);  AcyclicCallGraphBuilder(Program program, AddressSetView set, boolean killThunks);  AcyclicCallGraphBuilder(Program program, Collection<Function> functions,
			boolean killThunks); DependencyGraph<Address> getDependencyGraph(TaskMonitor monitor);  }