11 instantiations of GraphNode
NuGet.Commands (8)
RestoreCommand\DependencyGraphResolver.cs (8)
351GraphNode<RemoteResolveResult> rootGraphNode = new GraphNode<RemoteResolveResult>(projectResolvedDependencyGraphItem.LibraryDependency.LibraryRange) 387GraphNode<RemoteResolveResult> nodeWithCycle = new(childLibraryDependency.LibraryRange) 418new GraphNode<RemoteResolveResult>(childLibraryDependency.LibraryRange) 521GraphNode<RemoteResolveResult> nodeWithConflict = new(childResolvedLibraryDependency.LibraryRange) 540GraphNode<RemoteResolveResult> newGraphNode = new(childResolvedLibraryDependency.LibraryRange) 609GraphNode<RemoteResolveResult> conflictingNode = new(childLibraryDependency.LibraryRange) 688DowngradedFrom = new GraphNode<RemoteResolveResult>(downgrade.FromLibraryDependency.LibraryRange) 697DowngradedTo = new GraphNode<RemoteResolveResult>(toResolvedDependencyGraphItem.LibraryDependency.LibraryRange)
NuGet.DependencyResolver.Core (3)
Remote\RemoteDependencyWalker.cs (3)
101GraphNode<RemoteResolveResult> rootNode = new GraphNode<RemoteResolveResult>(libraryRange, rootHasInnerNodes, hasParentNodes) 198var dependencyNode = new GraphNode<RemoteResolveResult>(dependency.LibraryRange) 223GraphNode<RemoteResolveResult> newNode = new GraphNode<RemoteResolveResult>(graphNodeCreationData.LibraryRange, hasInnerNodes, false)
193 references to GraphNode
NuGet.Commands (53)
RestoreCommand\DependencyGraphResolver.cs (17)
331List<GraphNode<RemoteResolveResult>> graphNodes = new(); 334Dictionary<LibraryRangeIndex, GraphNode<RemoteResolveResult>> nodesById = new(); 340Queue<(LibraryDependencyIndex, LibraryRangeIndex, GraphNode<RemoteResolveResult>)> itemsToFlatten = new(); 342Dictionary<LibraryRangeIndex, GraphNode<RemoteResolveResult>> versionConflicts = new(); 351GraphNode<RemoteResolveResult> rootGraphNode = new GraphNode<RemoteResolveResult>(projectResolvedDependencyGraphItem.LibraryDependency.LibraryRange) 365(LibraryDependencyIndex currentLibraryDependencyIndex, LibraryRangeIndex currentLibraryRangeIndex, GraphNode<RemoteResolveResult> currentGraphNode) = itemsToFlatten.Dequeue(); 387GraphNode<RemoteResolveResult> nodeWithCycle = new(childLibraryDependency.LibraryRange) 521GraphNode<RemoteResolveResult> nodeWithConflict = new(childResolvedLibraryDependency.LibraryRange) 540GraphNode<RemoteResolveResult> newGraphNode = new(childResolvedLibraryDependency.LibraryRange) 545GraphNode<RemoteResolveResult> parentGraphNode; 609GraphNode<RemoteResolveResult> conflictingNode = new(childLibraryDependency.LibraryRange) 657foreach (KeyValuePair<LibraryRangeIndex, GraphNode<RemoteResolveResult>> versionConflict in versionConflicts) 659if (nodesById.TryGetValue(versionConflict.Key, out GraphNode<RemoteResolveResult>? selected)) 678if (!nodesById.TryGetValue(downgrade.FromParentLibraryRangeIndex, out GraphNode<RemoteResolveResult>? fromParentNode) 679|| !nodesById.TryGetValue(downgrade.ToParentLibraryRangeIndex, out GraphNode<RemoteResolveResult>? toParentNode) 725|| !nodesById.TryGetValue(resolvedDependencyGraphItem.LibraryRangeIndex, out GraphNode<RemoteResolveResult>? currentNode)) 733if (!nodesById.TryGetValue(parentLibraryRangeIndex, out GraphNode<RemoteResolveResult>? parentNode))
RestoreCommand\Diagnostics\IndexedRestoreTargetGraph.cs (1)
57foreach (var node in cycles)
RestoreCommand\IRestoreTargetGraph.cs (1)
52IEnumerable<GraphNode<RemoteResolveResult>> Graphs { get; }
RestoreCommand\LockFileBuilder.cs (18)
533HashSet<GraphNode<RemoteResolveResult>> visitedNodes = new HashSet<GraphNode<RemoteResolveResult>>(); 534Queue<GraphNode<RemoteResolveResult>> queue = new Queue<GraphNode<RemoteResolveResult>>(); 536foreach (GraphNode<RemoteResolveResult> rootNode in targetGraph.Graphs) 540foreach (GraphNode<RemoteResolveResult> node in rootNode.InnerNodes) 563foreach (GraphNode<RemoteResolveResult> dependencyNode in EnumerateNodesForDependencyChecks(visitedNodes, queue, rootNode, node)) 608/// <param name="visitedNodes">Reusable <see cref="HashSet{GraphNode{T}}" /> for graph traversal algorithm.</param> 609/// <param name="queue">Reusable <see cref="Queue{GraphNode{T}}" /> for graph traversal algorithm.</param> 610/// <param name="rootNode">The <see cref="GraphNode{TItem}" /> to know which nodes are first level inner nodes.</param> 611/// <param name="graphNode">The <see cref="GraphNode{TItem}" /> to enumerate the parent nodes of.</param> 613private static IEnumerable<GraphNode<T>> EnumerateNodesForDependencyChecks<T>(HashSet<GraphNode<T>> visitedNodes, Queue<GraphNode<T>> queue, GraphNode<T> rootNode, GraphNode<T> graphNode) 622var node = queue.Dequeue(); 628foreach (var parentNode in node.ParentNodes)
RestoreCommand\ProjectRestoreCommand.cs (1)
285var graphs = new List<GraphNode<RemoteResolveResult>>
RestoreCommand\RestoreCommand.cs (6)
788var restoreTargetGraph = RestoreTargetGraph.Create(_request.Project.RuntimeGraph, Enumerable.Empty<GraphNode<RemoteResolveResult>>(), contextForProject, frameworkRuntimePairs[i].TargetAlias, frameworkRuntimePairs[i].Framework, frameworkRuntimePairs[i].RuntimeIdentifier); 1854foreach (var cycle in graph.AnalyzeResult.Cycles) 1928var downgraded = downgrade.DowngradedFrom; 1929var downgradedBy = downgrade.DowngradedTo; 2124allGraphs.Add(RestoreTargetGraph.Create(_request.Project.RuntimeGraph, Enumerable.Empty<GraphNode<RemoteResolveResult>>(), context, frameworkRuntimePair.TargetAlias, frameworkRuntimePair.Framework, frameworkRuntimePair.RuntimeIdentifier)); 2290graphs.Add(RestoreTargetGraph.Create(_request.Project.RuntimeGraph, Enumerable.Empty<GraphNode<RemoteResolveResult>>(), context, frameworkRuntimePair.TargetAlias, frameworkRuntimePair.Framework, frameworkRuntimePair.RuntimeIdentifier));
RestoreCommand\RestoreTargetGraph.cs (4)
47public IEnumerable<GraphNode<RemoteResolveResult>> Graphs { get; } 71IEnumerable<GraphNode<RemoteResolveResult>> graphs, 114IEnumerable<GraphNode<RemoteResolveResult>> graphs, 128foreach (var graph in graphs)
RestoreCommand\Utility\BuildAssetsUtils.cs (1)
580foreach (var projectGraph in targetGraph.Graphs)
RestoreCommand\Utility\IncludeFlagUtils.cs (4)
101foreach (var graph in targetGraph.Graphs) 103foreach (var root in graph.InnerNodes.Where(n => !n.Item.IsCentralTransitive)) 185GraphNode<RemoteResolveResult> parent, 186GraphNode<RemoteResolveResult> child)
NuGet.DependencyResolver.Core (140)
GraphModel\AnalyzeResult.cs (2)
12public List<GraphNode<TItem>> Cycles { get; } 18Cycles = new List<GraphNode<TItem>>();
GraphModel\DowngradeResult.cs (2)
5public required GraphNode<TItem> DowngradedFrom { get; set; } 6public required GraphNode<TItem> DowngradedTo { get; set; }
GraphModel\GraphNode.cs (9)
22InnerNodes = hasInnerNodes ? new List<GraphNode<TItem>>() : EmptyList; 23ParentNodes = hasParentNodes ? new List<GraphNode<TItem>>() : EmptyList; 27internal static readonly IList<GraphNode<TItem>> EmptyList = Array.Empty<GraphNode<TItem>>(); 30public GraphNode<TItem>? OuterNode { get; set; } 31public IList<GraphNode<TItem>> InnerNodes { get; set; } 37public IList<GraphNode<TItem>> ParentNodes { get; } 70if (InnerNodes is List<GraphNode<TItem>> innerList) 80InnerNodes = new List<GraphNode<TItem>>(additionalSpace);
GraphModel\GraphOperations.cs (95)
30public static AnalyzeResult<RemoteResolveResult> Analyze(this GraphNode<RemoteResolveResult> root) 55GraphNode<RemoteResolveResult>? resultToCheck = d.DowngradedFrom.OuterNode; 71this GraphNode<RemoteResolveResult> root, 73List<GraphNode<RemoteResolveResult>> cycles) 97private static void WalkTreeCheckCycleAndNearestWins(CyclesAndDowngrades context, GraphNode<RemoteResolveResult> node) 142for (var n = node.OuterNode; n != null; n = n.OuterNode) 148var sideNode = innerNodes[i]; 184public static string GetPath<TItem>(this GraphNode<TItem> node) 187var current = node; 201public static string GetPathWithLastRange<TItem>(this GraphNode<TItem> node) 204var current = node; 218public static GraphNode<TItem>? Path<TItem>(this GraphNode<TItem> node, params string[] path) 222GraphNode<TItem>? childNode = null; 227var candidateNode = innerNodes[i]; 250public static string GetIdAndRange<TItem>(this GraphNode<TItem> node) 275public static string GetIdAndVersionOrRange<TItem>(this GraphNode<TItem> node) 303public static string GetId<TItem>(this GraphNode<TItem> node) 314public static NuGetVersion? GetVersionOrDefault<TItem>(this GraphNode<TItem> node) 326public static VersionRange GetVersionRange<TItem>(this GraphNode<TItem> node) 334public static bool IsPackage<TItem>(this GraphNode<TItem> node) 346private static bool TryResolveConflicts<TItem>(this GraphNode<TItem> root, List<VersionConflictResult<TItem>> versionConflicts) 358Func<GraphNode<TItem>, bool>? skipNode = null; 403private static void WalkTreeDectectConflicts<TItem>(GraphNode<TItem> node, ConflictsAndAccepted<TItem> context) 419var childNode = innerNodes[i]; 420GraphNode<TItem>? acceptedNode; 451private static WalkState WalkTreeMarkAmbiguousNodes<TItem>(GraphNode<TItem> node, WalkState state, Tracker<TItem> context) 488private static bool WalkTreeRejectNodesOfRejectedNodes<TItem>(bool state, GraphNode<TItem> node, Tracker<TItem> context) 504private static bool WalkTreeAcceptOrRejectNodes<TItem>(TrackerAndAccepted<TItem> context, bool state, GraphNode<TItem> node) 536private static TState ForEachGlobalState<TItem, TState>(this GraphNode<TItem> root, TState state, Func<GraphNode<TItem>, TState, TState> visitor, Func<GraphNode<TItem>, bool>? skipNode = null) 544var work = queue.Dequeue(); 558private static void ForEach<TItem, TState, TContext>(this GraphNode<TItem> root, TState state, Func<GraphNode<TItem>, TState, TContext, TState> visitor, TContext context, Func<GraphNode<TItem>, bool>? skipNode = null) 578public static void ForEach<TItem>(this IEnumerable<GraphNode<TItem>> roots, Action<GraphNode<TItem>> visitor) 589var node = queue.Dequeue(); 599private static void ForEach<TItem>(this GraphNode<TItem> root, Action<GraphNode<TItem>> visitor, Func<GraphNode<TItem>, bool>? skipNode) 607var node = queue.Dequeue(); 619public static void ForEach<TItem>(this GraphNode<TItem> root, Action<GraphNode<TItem>> visitor) 624private static void ForEach<TItem, TContext>(this GraphNode<TItem> root, Action<GraphNode<TItem>, TContext> visitor, TContext context, Func<GraphNode<TItem>, bool>? skipNode) 632var node = queue.Dequeue(); 644public static void ForEach<TItem, TContext>(this GraphNode<TItem> root, Action<GraphNode<TItem>, TContext> visitor, TContext context) 649private static void AddInnerNodesToQueue<TItem, TState>(IList<GraphNode<TItem>> innerNodes, Queue<NodeWithState<TItem, TState>> queue, TState innerState) 654var innerNode = innerNodes[i]; 659private static void AddInnerNodesToQueue<TItem>(IList<GraphNode<TItem>> innerNodes, Queue<GraphNode<TItem>> queue) 664var innerNode = innerNodes[i]; 670private static Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>>? _tempDowngrades; 672public static Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> RentDowngradesDictionary() 681return new Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>>(); 684public static void ReleaseDowngradesDictionary(Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> dictionary) 725private static Queue<GraphNode<TItem>>? _queue; 727private static Dictionary<string, GraphNode<TItem>>? _dictionary; 731public static Queue<GraphNode<TItem>> RentQueue() 740return new Queue<GraphNode<TItem>>(); 743public static void ReleaseQueue(Queue<GraphNode<TItem>> queue) 773public static Dictionary<string, GraphNode<TItem>> RentDictionary() 782return new Dictionary<string, GraphNode<TItem>>(StringComparer.OrdinalIgnoreCase); 785public static void ReleaseDictionary(Dictionary<string, GraphNode<TItem>> dictionary) 797public GraphNode<TItem> Node; 803public static NodeWithState<TItem, TState> Create<TItem, TState>(GraphNode<TItem> node, TState state) 816public Dictionary<string, GraphNode<TItem>> AcceptedLibraries; 818private static ConflictsAndAccepted<TItem> CreateState<TItem>(List<VersionConflictResult<TItem>> versionConflicts, Dictionary<string, GraphNode<TItem>> acceptedLibraries) 830public Dictionary<string, GraphNode<TItem>> AcceptedLibraries; 833private static TrackerAndAccepted<TItem> CreateState<TItem>(Tracker<TItem> tracker, Dictionary<string, GraphNode<TItem>> acceptedLibraries) 844public List<GraphNode<RemoteResolveResult>> Cycles; 845public Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> Downgrades; 848private static CyclesAndDowngrades CreateState(List<GraphNode<RemoteResolveResult>> cycles, Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> downgrades) 857private static void DetectAndMarkAmbiguousCentralTransitiveDependencies<TItem>(Tracker<TItem> tracker, List<GraphNode<TItem>> centralTransitiveNodes) 895private static void RejectCentralTransitiveBecauseOfRejectedParents<TItem>(this GraphNode<TItem> root, Tracker<TItem> tracker, List<GraphNode<TItem>> centralTransitiveNodes) 897HashSet<GraphNode<TItem>> internalContext = new HashSet<GraphNode<TItem>>(); 924foreach (var node in internalContext) 936private static bool WalkTreeRejectNodesOfRejectedNodes<TItem>(bool state, GraphNode<TItem> node, HashSet<GraphNode<TItem>> context) 954public static void Dump<TItem>(this GraphNode<TItem> root, Action<string> write) 960private static void DumpChildren<TItem>(GraphNode<TItem> root, Action<string> write, int level) 970private static void DumpNode<TItem>(GraphNode<TItem> node, Action<string> write, int level)
GraphModel\VersionConflictResult.cs (2)
6public required GraphNode<TItem> Selected { get; set; } 7public required GraphNode<TItem> Conflicting { get; set; }
Remote\RemoteDependencyWalker.cs (30)
29public async Task<GraphNode<RemoteResolveResult>> WalkAsync(LibraryRange library, NuGetFramework framework, string? runtimeIdentifier, RuntimeGraph? runtimeGraph, bool recursive) 32var rootNode = await CreateGraphNodeAsync( 51var transitiveCentralPackageVersionNodes = new List<GraphNode<RemoteResolveResult>>(); 69private async ValueTask<GraphNode<RemoteResolveResult>> CreateGraphNodeAsync( 101GraphNode<RemoteResolveResult> rootNode = new GraphNode<RemoteResolveResult>(libraryRange, rootHasInnerNodes, hasParentNodes) 121GraphNode<RemoteResolveResult> node = currentState.GraphNode; 198var dependencyNode = new GraphNode<RemoteResolveResult>(dependency.LibraryRange) 223GraphNode<RemoteResolveResult> newNode = new GraphNode<RemoteResolveResult>(graphNodeCreationData.LibraryRange, hasInnerNodes, false) 300public static void MergeRuntimeDependencies(HashSet<LibraryDependency>? runtimeDependencies, GraphNode<RemoteResolveResult> node) 577GraphNode<RemoteResolveResult> parentNode) 583/// New <see cref="GraphNode{RemoteResolveResult}"/> will be created for each of the items in the <paramref name="transitiveCentralPackageVersions"/> 586private async Task<GraphNode<RemoteResolveResult>> AddTransitiveCentralPackageVersionNodesAsync( 587GraphNode<RemoteResolveResult> rootNode, 596GraphNode<RemoteResolveResult> node = await CreateGraphNodeAsync( 631private Dictionary<string, List<GraphNode<RemoteResolveResult>>> _transitiveCentralPackageVersions; 636_transitiveCentralPackageVersions = new Dictionary<string, List<GraphNode<RemoteResolveResult>>>(StringComparer.OrdinalIgnoreCase); 639internal void Add(LibraryDependency centralPackageVersionDependency, GraphNode<RemoteResolveResult> parentNode) 645list = new List<GraphNode<RemoteResolveResult>>(); 660internal void AddParentsToNode(GraphNode<RemoteResolveResult> node) 664List<GraphNode<RemoteResolveResult>> graphNodes = _transitiveCentralPackageVersions[(node.Item ?? throw new InvalidOperationException()).Key.Name]; 693/// The <see cref="GraphNode{TItem}"/> that is currently being processed. 695public readonly GraphNode<RemoteResolveResult> GraphNode; 698/// The dependencies of the current <see cref="GraphNode{TItem}"/> that will be updated as a final step. 703/// Where we are when processing dependencies. Also used to flag where we are in processing the current <see cref="GraphNode{TItem}"/>. 708/// The <see cref="GraphEdge"/> for the current <see cref="GraphNode{TItem}"/>. 713GraphNode<RemoteResolveResult> graphNode, 726/// Stores data that is required to create a <see cref="GraphNode{TItem}"/> for later use. 731/// A <see cref="Task{TResult}"/> that represents the retrieval of the necessary <see cref="GraphItem{TItem}"/> to complete construction of the <see cref="GraphNode{TItem}"/>. 741/// The <see cref="LibraryRange"/> of this <see cref="GraphNode{TItem}"/> to construct. 746/// Edge pointing to the parent <see cref="GraphNode{TItem}"/>.