Bari.Plugins.VsCore.Build.OptimizingBuildContextFactory.RerouteEdgesTargeting C# (CSharp) Method

RerouteEdgesTargeting() private method

private RerouteEdgesTargeting ( ISet graph, ISet originalTargets, IBuilder replacementTarget ) : void
graph ISet
originalTargets ISet
replacementTarget IBuilder
return void
        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);
        }