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) 519GraphNode<RemoteResolveResult> nodeWithConflict = new(childResolvedLibraryDependency.LibraryRange) 538GraphNode<RemoteResolveResult> newGraphNode = new(childResolvedLibraryDependency.LibraryRange) 603GraphNode<RemoteResolveResult> conflictingNode = new(childLibraryDependency.LibraryRange) 682DowngradedFrom = new GraphNode<RemoteResolveResult>(downgrade.FromLibraryDependency.LibraryRange) 691DowngradedTo = new GraphNode<RemoteResolveResult>(toResolvedDependencyGraphItem.LibraryDependency.LibraryRange)
NuGet.DependencyResolver.Core (3)
Remote\RemoteDependencyWalker.cs (3)
101GraphNode<RemoteResolveResult> rootNode = new GraphNode<RemoteResolveResult>(libraryRange, rootHasInnerNodes, hasParentNodes) 197var dependencyNode = new GraphNode<RemoteResolveResult>(dependency.LibraryRange) 222GraphNode<RemoteResolveResult> newNode = new GraphNode<RemoteResolveResult>(graphNodeCreationData.LibraryRange, hasInnerNodes, false)
193 references to GraphNode
NuGet.Commands (52)
RestoreCommand\DependencyGraphResolver.cs (16)
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) 519GraphNode<RemoteResolveResult> nodeWithConflict = new(childResolvedLibraryDependency.LibraryRange) 538GraphNode<RemoteResolveResult> newGraphNode = new(childResolvedLibraryDependency.LibraryRange) 603GraphNode<RemoteResolveResult> conflictingNode = new(childLibraryDependency.LibraryRange) 651foreach (KeyValuePair<LibraryRangeIndex, GraphNode<RemoteResolveResult>> versionConflict in versionConflicts) 653if (nodesById.TryGetValue(versionConflict.Key, out GraphNode<RemoteResolveResult>? selected)) 672if (!nodesById.TryGetValue(downgrade.FromParentLibraryRangeIndex, out GraphNode<RemoteResolveResult>? fromParentNode) 673|| !nodesById.TryGetValue(downgrade.ToParentLibraryRangeIndex, out GraphNode<RemoteResolveResult>? toParentNode) 719|| !nodesById.TryGetValue(resolvedDependencyGraphItem.LibraryRangeIndex, out GraphNode<RemoteResolveResult>? currentNode)) 727if (!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)
523HashSet<GraphNode<RemoteResolveResult>> visitedNodes = new HashSet<GraphNode<RemoteResolveResult>>(); 524Queue<GraphNode<RemoteResolveResult>> queue = new Queue<GraphNode<RemoteResolveResult>>(); 526foreach (GraphNode<RemoteResolveResult> rootNode in targetGraph.Graphs) 530foreach (GraphNode<RemoteResolveResult> node in rootNode.InnerNodes) 553foreach (GraphNode<RemoteResolveResult> dependencyNode in EnumerateNodesForDependencyChecks(visitedNodes, queue, rootNode, node)) 598/// <param name="visitedNodes">Reusable <see cref="HashSet{GraphNode{T}}" /> for graph traversal algorithm.</param> 599/// <param name="queue">Reusable <see cref="Queue{GraphNode{T}}" /> for graph traversal algorithm.</param> 600/// <param name="rootNode">The <see cref="GraphNode{TItem}" /> to know which nodes are first level inner nodes.</param> 601/// <param name="graphNode">The <see cref="GraphNode{TItem}" /> to enumerate the parent nodes of.</param> 603private static IEnumerable<GraphNode<T>> EnumerateNodesForDependencyChecks<T>(HashSet<GraphNode<T>> visitedNodes, Queue<GraphNode<T>> queue, GraphNode<T> rootNode, GraphNode<T> graphNode) 612var node = queue.Dequeue(); 618foreach (var parentNode in node.ParentNodes)
RestoreCommand\ProjectRestoreCommand.cs (1)
285var graphs = new List<GraphNode<RemoteResolveResult>>
RestoreCommand\RestoreCommand.cs (6)
625var restoreTargetGraph = RestoreTargetGraph.Create(_request.Project.RuntimeGraph, Enumerable.Empty<GraphNode<RemoteResolveResult>>(), contextForProject, frameworkRuntimePairs[i].TargetAlias, frameworkRuntimePairs[i].Framework, frameworkRuntimePairs[i].RuntimeIdentifier); 1640foreach (var cycle in graph.AnalyzeResult.Cycles) 1714var downgraded = downgrade.DowngradedFrom; 1715var downgradedBy = downgrade.DowngradedTo; 1910allGraphs.Add(RestoreTargetGraph.Create(_request.Project.RuntimeGraph, Enumerable.Empty<GraphNode<RemoteResolveResult>>(), context, frameworkRuntimePair.TargetAlias, frameworkRuntimePair.Framework, frameworkRuntimePair.RuntimeIdentifier)); 2076graphs.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)
560foreach (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 (141)
GraphModel\AnalyzeResult.cs (2)
14public List<GraphNode<TItem>> Cycles { get; } 20Cycles = new List<GraphNode<TItem>>();
GraphModel\DowngradeResult.cs (2)
7public GraphNode<TItem> DowngradedFrom { get; set; } 8public GraphNode<TItem> DowngradedTo { get; set; }
GraphModel\GraphNode.cs (9)
24InnerNodes = hasInnerNodes ? new List<GraphNode<TItem>>() : EmptyList; 25ParentNodes = hasParentNodes ? new List<GraphNode<TItem>>() : EmptyList; 29internal static readonly IList<GraphNode<TItem>> EmptyList = Array.Empty<GraphNode<TItem>>(); 32public GraphNode<TItem> OuterNode { get; set; } 33public IList<GraphNode<TItem>> InnerNodes { get; set; } 39public IList<GraphNode<TItem>> ParentNodes { get; } 72if (InnerNodes is List<GraphNode<TItem>> innerList) 82InnerNodes = new List<GraphNode<TItem>>(additionalSpace);
GraphModel\GraphOperations.cs (95)
32public static AnalyzeResult<RemoteResolveResult> Analyze(this GraphNode<RemoteResolveResult> root) 57GraphNode<RemoteResolveResult> resultToCheck = d.DowngradedFrom.OuterNode; 73this GraphNode<RemoteResolveResult> root, 75List<GraphNode<RemoteResolveResult>> cycles) 99private static void WalkTreeCheckCycleAndNearestWins(CyclesAndDowngrades context, GraphNode<RemoteResolveResult> node) 144for (var n = node.OuterNode; n != null; n = n.OuterNode) 150var sideNode = innerNodes[i]; 186public static string GetPath<TItem>(this GraphNode<TItem> node) 189var current = node; 203public static string GetPathWithLastRange<TItem>(this GraphNode<TItem> node) 206var current = node; 220public static GraphNode<TItem> Path<TItem>(this GraphNode<TItem> node, params string[] path) 224GraphNode<TItem> childNode = null; 229var candidateNode = innerNodes[i]; 252public static string GetIdAndRange<TItem>(this GraphNode<TItem> node) 277public static string GetIdAndVersionOrRange<TItem>(this GraphNode<TItem> node) 305public static string GetId<TItem>(this GraphNode<TItem> node) 316public static NuGetVersion GetVersionOrDefault<TItem>(this GraphNode<TItem> node) 328public static VersionRange GetVersionRange<TItem>(this GraphNode<TItem> node) 336public static bool IsPackage<TItem>(this GraphNode<TItem> node) 348private static bool TryResolveConflicts<TItem>(this GraphNode<TItem> root, List<VersionConflictResult<TItem>> versionConflicts) 360Func<GraphNode<TItem>, bool> skipNode = null; 405private static void WalkTreeDectectConflicts<TItem>(GraphNode<TItem> node, ConflictsAndAccepted<TItem> context) 421var childNode = innerNodes[i]; 422GraphNode<TItem> acceptedNode; 452private static WalkState WalkTreeMarkAmbiguousNodes<TItem>(GraphNode<TItem> node, WalkState state, Tracker<TItem> context) 484private static bool WalkTreeRejectNodesOfRejectedNodes<TItem>(bool state, GraphNode<TItem> node, Tracker<TItem> context) 497private static bool WalkTreeAcceptOrRejectNodes<TItem>(TrackerAndAccepted<TItem> context, bool state, GraphNode<TItem> node) 529private static TState ForEachGlobalState<TItem, TState>(this GraphNode<TItem> root, TState state, Func<GraphNode<TItem>, TState, TState> visitor, Func<GraphNode<TItem>, bool> skipNode = null) 537var work = queue.Dequeue(); 551private 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) 571public static void ForEach<TItem>(this IEnumerable<GraphNode<TItem>> roots, Action<GraphNode<TItem>> visitor) 582var node = queue.Dequeue(); 592private static void ForEach<TItem>(this GraphNode<TItem> root, Action<GraphNode<TItem>> visitor, Func<GraphNode<TItem>, bool> skipNode) 600var node = queue.Dequeue(); 612public static void ForEach<TItem>(this GraphNode<TItem> root, Action<GraphNode<TItem>> visitor) 617private static void ForEach<TItem, TContext>(this GraphNode<TItem> root, Action<GraphNode<TItem>, TContext> visitor, TContext context, Func<GraphNode<TItem>, bool> skipNode) 625var node = queue.Dequeue(); 637public static void ForEach<TItem, TContext>(this GraphNode<TItem> root, Action<GraphNode<TItem>, TContext> visitor, TContext context) 642private static void AddInnerNodesToQueue<TItem, TState>(IList<GraphNode<TItem>> innerNodes, Queue<NodeWithState<TItem, TState>> queue, TState innerState) 647var innerNode = innerNodes[i]; 652private static void AddInnerNodesToQueue<TItem>(IList<GraphNode<TItem>> innerNodes, Queue<GraphNode<TItem>> queue) 657var innerNode = innerNodes[i]; 663private static Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> _tempDowngrades; 665public static Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> RentDowngradesDictionary() 674return new Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>>(); 677public static void ReleaseDowngradesDictionary(Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> dictionary) 718private static Queue<GraphNode<TItem>> _queue; 720private static Dictionary<string, GraphNode<TItem>> _dictionary; 724public static Queue<GraphNode<TItem>> RentQueue() 733return new Queue<GraphNode<TItem>>(); 736public static void ReleaseQueue(Queue<GraphNode<TItem>> queue) 766public static Dictionary<string, GraphNode<TItem>> RentDictionary() 775return new Dictionary<string, GraphNode<TItem>>(StringComparer.OrdinalIgnoreCase); 778public static void ReleaseDictionary(Dictionary<string, GraphNode<TItem>> dictionary) 790public GraphNode<TItem> Node; 796public static NodeWithState<TItem, TState> Create<TItem, TState>(GraphNode<TItem> node, TState state) 809public Dictionary<string, GraphNode<TItem>> AcceptedLibraries; 811private static ConflictsAndAccepted<TItem> CreateState<TItem>(List<VersionConflictResult<TItem>> versionConflicts, Dictionary<string, GraphNode<TItem>> acceptedLibraries) 823public Dictionary<string, GraphNode<TItem>> AcceptedLibraries; 826private static TrackerAndAccepted<TItem> CreateState<TItem>(Tracker<TItem> tracker, Dictionary<string, GraphNode<TItem>> acceptedLibraries) 837public List<GraphNode<RemoteResolveResult>> Cycles; 838public Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> Downgrades; 841private static CyclesAndDowngrades CreateState(List<GraphNode<RemoteResolveResult>> cycles, Dictionary<GraphNode<RemoteResolveResult>, GraphNode<RemoteResolveResult>> downgrades) 850private static void DetectAndMarkAmbiguousCentralTransitiveDependencies<TItem>(Tracker<TItem> tracker, List<GraphNode<TItem>> centralTransitiveNodes) 880private static void RejectCentralTransitiveBecauseOfRejectedParents<TItem>(this GraphNode<TItem> root, Tracker<TItem> tracker, List<GraphNode<TItem>> centralTransitiveNodes) 882HashSet<GraphNode<TItem>> internalContext = new HashSet<GraphNode<TItem>>(); 909foreach (var node in internalContext) 918private static bool WalkTreeRejectNodesOfRejectedNodes<TItem>(bool state, GraphNode<TItem> node, HashSet<GraphNode<TItem>> context) 936public static void Dump<TItem>(this GraphNode<TItem> root, Action<string> write) 942private static void DumpChildren<TItem>(GraphNode<TItem> root, Action<string> write, int level) 952private static void DumpNode<TItem>(GraphNode<TItem> node, Action<string> write, int level)
GraphModel\VersionConflictResult.cs (2)
8public GraphNode<TItem> Selected { get; set; } 9public GraphNode<TItem> Conflicting { get; set; }
Remote\RemoteDependencyWalker.cs (31)
30public async Task<GraphNode<RemoteResolveResult>> WalkAsync(LibraryRange library, NuGetFramework framework, string runtimeIdentifier, RuntimeGraph runtimeGraph, bool recursive) 33var rootNode = await CreateGraphNodeAsync( 52var 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; 197var dependencyNode = new GraphNode<RemoteResolveResult>(dependency.LibraryRange) 222GraphNode<RemoteResolveResult> newNode = new GraphNode<RemoteResolveResult>(graphNodeCreationData.LibraryRange, hasInnerNodes, false) 298public static void MergeRuntimeDependencies(HashSet<LibraryDependency> runtimeDependencies, GraphNode<RemoteResolveResult> node) 364GraphNode<RemoteResolveResult> node, 573GraphNode<RemoteResolveResult> parentNode) 579/// New <see cref="GraphNode{RemoteResolveResult}"/> will be created for each of the items in the <paramref name="transitiveCentralPackageVersions"/> 582private async Task<GraphNode<RemoteResolveResult>> AddTransitiveCentralPackageVersionNodesAsync( 583GraphNode<RemoteResolveResult> rootNode, 590GraphNode<RemoteResolveResult> node = await CreateGraphNodeAsync( 621private Dictionary<string, List<GraphNode<RemoteResolveResult>>> _transitiveCentralPackageVersions; 626_transitiveCentralPackageVersions = new Dictionary<string, List<GraphNode<RemoteResolveResult>>>(StringComparer.OrdinalIgnoreCase); 629internal void Add(LibraryDependency centralPackageVersionDependency, GraphNode<RemoteResolveResult> parentNode) 635list = new List<GraphNode<RemoteResolveResult>>(); 650internal void AddParentsToNode(GraphNode<RemoteResolveResult> node) 654List<GraphNode<RemoteResolveResult>> graphNodes = _transitiveCentralPackageVersions[node.Item.Key.Name]; 683/// The <see cref="GraphNode{TItem}"/> that is currently being processed. 685public readonly GraphNode<RemoteResolveResult> GraphNode; 688/// The dependencies of the current <see cref="GraphNode{TItem}"/> that will be updated as a final step. 693/// Where we are when processing dependencies. Also used to flag where we are in processing the current <see cref="GraphNode{TItem}"/>. 698/// The <see cref="GraphEdge"/> for the current <see cref="GraphNode{TItem}"/>. 703GraphNode<RemoteResolveResult> graphNode, 716/// Stores data that is required to create a <see cref="GraphNode{TItem}"/> for later use. 721/// 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}"/>. 731/// The <see cref="LibraryRange"/> of this <see cref="GraphNode{TItem}"/> to construct. 736/// Edge pointing to the parent <see cref="GraphNode{TItem}"/>.