Ejemplo n.º 1
0
        private IReadOnlyList <ProjectData> GetProjects(
            IEnumerable <Process> allProcesses,
            Dictionary <PipId, AbsolutePath> sealedDirectoriesFromWrappers)
        {
            return(Measure(
                       "Constructing Project Data",
                       () =>
            {
                var groups = allProcesses.GroupBy(p => p.Provenance.Token.Path).ToArray();
                var projects = new ProjectData[groups.Length];
                Parallel.For(
                    0,
                    groups.Length,
                    i =>
                {
                    var specFileGroupedProcesses = groups[i];
                    var projectFolder = specFileGroupedProcesses.Key.GetParent(PathTable);
                    var project = new ProjectData(projectFolder);

                    foreach (var process in specFileGroupedProcesses)
                    {
                        foreach (var dependency in PipGraph.RetrievePipReferenceImmediateDependencies(process.PipId, PipType.Process))
                        {
                            project.AddProjectDependency(GetProjectFolder(dependency.HydratePip()));
                        }

                        foreach (var dependency in PipGraph.RetrievePipReferenceImmediateDependencies(process.PipId, PipType.SealDirectory))
                        {
                            AbsolutePath projectDependency;
                            if (sealedDirectoriesFromWrappers.TryGetValue(dependency.PipId, out projectDependency))
                            {
                                project.AddProjectDependency(projectDependency);
                            }
                            else
                            {
                                project.AddSourceFolderDependency(GetProjectFolder(dependency.HydratePip()));
                            }
                        }
                    }

                    projects[i] = project;
                });

                return projects;
            }));
        }