/** * Inserts another node right before this node. * <p/> * The new node is added as a successor of all predecessors of this node and this node is set as the successor of the new * node. * * @param newNode The node that should be inserted. */ public void insertBefore(SequentialNode newNode) { newNode.setSuccessor(this); Set<Node> predecessors = new HashSet<Node>(getPredecessors()); for (Node predecessor : predecessors) { predecessor.replaceSuccessor(this, newNode); } predecessors.clear(); // previous predecessors are no predecessors anymore addPredecessor(newNode); } }
/** * 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); } }