private void RerouteEdgesTargeting(ISet<EquatableEdge<IBuilder>> graph, ISet<IBuilder> originalTargets, IBuilder replacementTarget)
{
log.DebugFormat("-> Rerouting edges targeting {0} to {1}", string.Join(", ", originalTargets), replacementTarget);
var edgesToRemove = new HashSet<EquatableEdge<IBuilder>>();
var edgesToAdd = new HashSet<EquatableEdge<IBuilder>>();
foreach (var edge in graph)
{
if (originalTargets.Contains(edge.Target) && edge.Target != edge.Source && edge.Target != replacementTarget)
{
edgesToRemove.Add(edge);
var newEdge = new EquatableEdge<IBuilder>(edge.Source, replacementTarget);
edgesToAdd.Add(newEdge);
}
}
RemoveEdges(graph, edgesToRemove);
foreach (var edge in edgesToAdd)
AddEdge(graph, edge);
}