Bari.Plugins.VsCore.Build.VsProjectBuilderFactory.RunPostProcessors C# (CSharp) Method

RunPostProcessors() private method

private RunPostProcessors ( Project prjs, IBuilder input, IEnumerable projects ) : IBuilder
prjs Project
input IBuilder
projects IEnumerable
return IBuilder
        private IBuilder RunPostProcessors(Project[] prjs, IBuilder input, IEnumerable<Project> projects)
        {
            var modules = prjs.Select(p => p.Module).Distinct().ToList();
            var postProcessableItems = prjs.Concat(modules.Cast<IPostProcessorsHolder>()).ToList();

            var factories = postProcessorFactories.ToList();
            var resultBuilders = new List<IPostProcessor>();

            foreach (var ppHolder in postProcessableItems)
            {
                foreach (var pp in ppHolder.PostProcessors)
                {
                    var postProcessor =
                        factories.Select(f => f.CreatePostProcessorFor(ppHolder, pp, new [] { input })).FirstOrDefault(p => p != null);
                    if (postProcessor != null)
                    {
                        resultBuilders.Add(postProcessor);
                    }
                }
            }

            if (resultBuilders.Count == 0)
            {
                return input;
            }
            else
            {
                return coreBuilderFactory.CreateMergingBuilder(resultBuilders.Concat(new[] {input}), new ProjectBuilderTag(String.Format("Post processors of {0}", String.Join(", ", prjs.Select(p => p.Name))), projects));
            }
        }