void (DoStatement loop, IfStatement ifstat) { Statement target = ifstat.getIfstat(); StatEdge ifedge = ifstat.getIfEdge(); ifstat.setIfstat(null); ifedge.getSource().changeEdgeType(EdgeDirection.FORWARD, ifedge, EdgeType.BREAK); ifedge.closure = loop; ifstat.getStats().removeWithKey(target.id); loop.addLabeledEdge(ifedge); SequenceStatement block = new SequenceStatement(Arrays.asList(loop, target)); loop.getParent().replaceStatement(loop, block); block.setAllParent(); loop.addSuccessor(new StatEdge(EdgeType.REGULAR, loop, target)); for (StatEdge edge : new ArrayList<>(block.getLabelEdges())) { if (edge.getType() == EdgeType.CONTINUE || edge == ifedge) { loop.addLabeledEdge(edge); } } for (StatEdge edge : block.getPredecessorEdges(EdgeType.CONTINUE)) { if (loop.containsStatementStrict(edge.getSource())) { block.removePredecessor(edge); edge.getSource().changeEdgeNode(EdgeDirection.FORWARD, edge, loop); loop.addPredecessor(edge); } } }