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