/** * Makes a deep copy of this node using the same predecessors and successor as the original. Depending on the * subtype, more properties are copied according to the {@link #copyElements()} method. * * @return a copy of this node with same predecessors and successors */ public SequentialNode copy() { SequentialNode copy = copyElements(); copy.setSuccessor(successor); for (Node p : getPredecessors()) { copy.addPredecessor(p); } return copy; } }
/** * Removes the given node from the control flow graph. The graph will be traversed in order to find the node to be * removed. Once the desired node is found, its predecessors are rewired to have the old node's successor as direct * successors. * * @param node node to be removed */ public void removeNode(SequentialNode node) { Node successor = node.getSuccessor(); successor.removePredecessor(node); Set<Node> predecessors = new HashSet<Node>(node.getPredecessors()); for (Node predecessor : predecessors) { successor.addPredecessor(predecessor); predecessor.replaceSuccessor(node, successor); } }