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

MergeProjects() private method

private MergeProjects ( ISet graph, SolutionBuildPattern>.Dictionary patterns, Project projects, string name ) : void
graph ISet
patterns SolutionBuildPattern>.Dictionary
projects Project
name string
return void
        private void MergeProjects(ISet<EquatableEdge<IBuilder>> graph, Dictionary<SlnBuilder, SolutionBuildPattern> patterns, Project[] projects, string name)
        {
            var existingPattern = patterns.Values.FirstOrDefault(
                p => projects.All(p.Projects.Contains));
            IBuilder mergedRoot;
            if (existingPattern == null)
            {
                // Creating the new [MSBuildRunner] -> [SlnBuilder] -> ... branches
                mergedRoot = CreateMergedBuild(graph, projects,
                    String.Format("Merged builders of module {0}", name));
            }
            else
            {
                mergedRoot = existingPattern.Root;
            }

            // Redirecting all * -> [MSBuildRunner] edges to the merged [MSBuildRunner]
            RerouteEdgesTargeting(
                graph,
                new HashSet<IBuilder>(patterns.Values
                    .Where(p => p.Root != mergedRoot)
                    .Where(p => p.Projects.IsSubsetOf(projects))
                    .Select(p => p.Root)),
                mergedRoot);
        }