private static void CollectNode(IPackageGraphNode node, ICollection <IPackageGraphNode> collectedNodes) { if (!collectedNodes.Contains(node)) { collectedNodes.Add(node); } foreach (var dependent in node.Dependents) { CollectNode(dependent, collectedNodes); } }
private void Accumulate(IPackageGraphNode node, Func <IPackageGraphNode, bool> condition, Action <IPackageGraphNode, List <IPackageGraphNode> > action, List <IPackageGraphNode> accu) { if (condition(node)) { action(node, accu); } foreach (var nodeDependency in node.Dependencies) { Accumulate(nodeDependency, condition, action, accu); } }
private void FlattenNode(IPackageGraphNode package, ICollection <PackageId> flatList) { if (flatList.Contains(package.Package)) { return; } foreach (var dependency in package.Dependencies) { FlattenNode(dependency, flatList); } flatList.Add(package.Package); }
private void MarkPackages(IPackageGraphNode package, ICollection <PackageId> targetPackages, ICollection <IPackageGraphNode> collectedPackages, IDictionary <PackageId, Mark> marks, Mark currentMark, bool excludeNonExclusiveDependencies) { if (targetPackages.Contains(package.Package)) { marks[package.Package] = Mark.Include; currentMark = Mark.Tentative; } else if (excludeNonExclusiveDependencies) { Mark mark; if (currentMark == Mark.DoNotInclude) { marks[package.Package] = Mark.DoNotInclude; } else if (marks.TryGetValue(package.Package, out mark)) { if (mark == Mark.DoNotInclude) { currentMark = Mark.DoNotInclude; } } } if (currentMark == Mark.Tentative && !collectedPackages.Contains(package)) { marks[package.Package] = Mark.Tentative; collectedPackages.Add(package); } foreach (var dependency in package.Dependencies) { MarkPackages(dependency, targetPackages, collectedPackages, marks, currentMark, excludeNonExclusiveDependencies); } }