void () { orderNodes(); List<IGraphNode> lstNodes = colOrderedIDoms.getLstKeys(); while (true) { boolean changed = false; for (IGraphNode node : lstNodes) { IGraphNode idom = null; if (!setRoots.contains(node)) { for (IGraphNode pred : node.getPredecessorNodes()) { if (colOrderedIDoms.getWithKey(pred) != null) { idom = getCommonIDom(idom, pred, colOrderedIDoms); if (idom == null) { break; // no idom found: merging point of two trees } } } } if (idom == null) { idom = node; } IGraphNode oldidom = colOrderedIDoms.putWithKey(idom, node); if (!idom.equals(oldidom)) { // oldidom is null iff the node is touched for the first time changed = true; } } if (!changed) { break; } } }