boolean (VarVersionNode node, Set<VarVersionNode> domnodes) { if (domnodes.size() == 1) { return engine.isDominator(node, domnodes.iterator().next()); } else { Set<VarVersionNode> marked = new HashSet<>(); if (domnodes.contains(node)) { return true; } List<VarVersionNode> lstNodes = new LinkedList<>(); lstNodes.add(node); while (!lstNodes.isEmpty()) { VarVersionNode nd = lstNodes.remove(0); if (marked.contains(nd)) { continue; } else { marked.add(nd); } if (nd.predecessors.isEmpty()) { return false; } for (VarVersionEdge edge : nd.predecessors) { VarVersionNode pred = edge.source; if (!marked.contains(pred) && !domnodes.contains(pred)) { lstNodes.add(pred); } } } } return true; }