private void replaceNode(DAGNode<Component,Dependency> old,
DAGNode<Component,Dependency> repl) {
Map<DAGNode<Component,Dependency>,
DAGNode<Component,Dependency>> memory = Maps.newHashMap();
graph = graph.replaceNode(old, repl, memory);
Collection<DAGEdge<Component, Dependency>> oldBackEdges = backEdges.values();
backEdges = HashMultimap.create();
for (DAGEdge<Component,Dependency> edge: oldBackEdges) {
DAGNode<Component,Dependency> newHead, newTail;
newHead = memory.get(edge.getHead());
if (newHead == null) {
newHead = edge.getHead();
}
newTail = memory.get(edge.getTail());
if (newTail == null) {
newTail = edge.getTail();
}
DAGEdge<Component,Dependency> newEdge;
if (newHead.equals(edge.getHead()) && newTail.equals(edge.getTail())) {
newEdge = edge;
} else {
newEdge = DAGEdge.create(newHead, newTail, edge.getLabel());
}
backEdges.put(newHead, newEdge);
}
}