public void replaceStatement(Statement oldstat, Statement newstat) { for (StatEdge edge : oldstat.getAllPredecessorEdges()) { oldstat.removePredecessor(edge); edge.getSource().changeEdgeNode(DIRECTION_FORWARD, edge, newstat); newstat.addPredecessor(edge); } for (StatEdge edge : oldstat.getAllSuccessorEdges()) { oldstat.removeSuccessor(edge); edge.setSource(newstat); newstat.addSuccessor(edge); } int statindex = stats.getIndexByKey(oldstat.id); stats.removeWithKey(oldstat.id); stats.addWithKeyAndIndex(statindex, newstat, newstat.id); newstat.setParent(this); newstat.post = oldstat.post; if (first == oldstat) { first = newstat; } List<StatEdge> lst = new ArrayList<StatEdge>(oldstat.getLabelEdges()); for (int i = lst.size() - 1; i >= 0; i--) { StatEdge edge = lst.get(i); if (edge.getSource() != newstat) { newstat.addLabeledEdge(edge); } else { if (this == edge.getDestination() || this.containsStatementStrict(edge.getDestination())) { edge.closure = null; } else { this.addLabeledEdge(edge); } } } oldstat.getLabelEdges().clear(); }