void (DominatorTreeExceptionFilter filter) { DominatorEngine engine = filter.getDomEngine(); for (Integer head : new HashSet<>(mapExtPostdominators.keySet())) { FastFixedSet<Integer> setPostdoms = mapExtPostdominators.get(head); LinkedList<Statement> stack = new LinkedList<>(); LinkedList<FastFixedSet<Integer>> stackPath = new LinkedList<>(); stack.add(statement.getStats().getWithKey(head)); stackPath.add(factory.spawnEmptySet()); Set<Statement> setVisited = new HashSet<>(); setVisited.add(stack.getFirst()); while (!stack.isEmpty()) { Statement stat = stack.removeFirst(); FastFixedSet<Integer> path = stackPath.removeFirst(); if (setPostdoms.contains(stat.id)) { path.add(stat.id); } if (path.contains(setPostdoms)) { continue; } if(!engine.isDominator(stat.id, head)) { setPostdoms.complement(path); continue; } for (StatEdge edge : stat.getSuccessorEdges(EdgeType.REGULAR)) { Statement edge_destination = edge.getDestination(); if(!setVisited.contains(edge_destination)) { stack.add(edge_destination); stackPath.add(path.getCopy()); setVisited.add(edge_destination); } } } if (setPostdoms.isEmpty()) { mapExtPostdominators.remove(head); } } }