From e105038cf01de12118ebf5a76dc525f8697f5991 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Mon, 3 Nov 2025 19:39:50 +1000 Subject: [PATCH] fix non-transitive for solution --- .../Features/Nuget/NugetClientService.cs | 6 ++--- .../Features/Nuget/NugetPanel.cs | 25 +++++++++++++------ .../Features/Nuget/PackageEntry.cs | 4 +-- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs index e07073a..943dfa5 100644 --- a/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs +++ b/src/SharpIDE.Application/Features/Nuget/NugetClientService.cs @@ -9,7 +9,7 @@ using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; namespace SharpIDE.Application.Features.Nuget; -public record InstalledNugetPackageInfo(bool IsTransitive, List ProjectPackageReferences); +public record InstalledNugetPackageInfo(bool IsPrimarilyTransitive, List ProjectPackageReferences); public record IdePackageResult(string PackageId, List PackageFromSources, InstalledNugetPackageInfo? InstalledNugetPackageInfo); public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source); public class NugetClientService @@ -118,8 +118,8 @@ public class NugetClientService var packagesResult = new List(); foreach (var installedPackage in installedPackages) { - var isTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive); - var installedNugetPackageInfo = new InstalledNugetPackageInfo(isTransitive, installedPackage.ProjectPackageReferences); + var isPrimarilyTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive is false) is false; + var installedNugetPackageInfo = new InstalledNugetPackageInfo(isPrimarilyTransitive, installedPackage.ProjectPackageReferences); var idePackageResult = new IdePackageResult(installedPackage.Name, [], installedNugetPackageInfo); foreach (var source in packageSources) diff --git a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs index 6ec7a77..ab8a256 100644 --- a/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs +++ b/src/SharpIDE.Godot/Features/Nuget/NugetPanel.cs @@ -73,8 +73,8 @@ public partial class NugetPanel : Control if (_solution is null) throw new InvalidOperationException("Solution is null but should not be"); _ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject)); _ = Task.GodotRun(() => SetDetailsProjects(slnOrProject)); + _ = Task.GodotRun(() => PopulateInstalledPackages(slnOrProject)); _ = Task.GodotRun(PopulateSearchResults); - _ = Task.GodotRun(PopulateInstalledPackages); }); } @@ -130,12 +130,23 @@ public partial class NugetPanel : Control }); } - private async Task PopulateInstalledPackages() + private async Task PopulateInstalledPackages(ISolutionOrProject slnOrProject) { - var project = _solution!.AllProjects.First(s => s.Name == "ProjectA"); - await project.MsBuildEvaluationProjectTask; - var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects([project]); - var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages); + var msbuildEvalTask = slnOrProject switch + { + SharpIdeSolutionModel solutionModel => (Task)Task.WhenAll(solutionModel.AllProjects.Select(s => s.MsBuildEvaluationProjectTask)), + SharpIdeProjectModel projectModel => (Task)projectModel.MsBuildEvaluationProjectTask, + _ => throw new InvalidOperationException("Unknown solution or project type") + }; + await msbuildEvalTask; + var projects = slnOrProject switch + { + SharpIdeSolutionModel solutionModel => solutionModel.AllProjects.ToList(), + SharpIdeProjectModel projectModel => [projectModel], + _ => throw new InvalidOperationException("Unknown solution or project type") + }; + var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects(projects); + var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(slnOrProject.DirectoryPath, installedPackages); var scenes = idePackageResult.Select(s => { var scene = _packageEntryScene.Instantiate(); @@ -143,7 +154,7 @@ public partial class NugetPanel : Control scene.PackageSelected += OnPackageSelected; return scene; }).ToList(); - var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.ProjectPackageReferences.Any(x => x.IsTransitive)).ToList(); + var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.IsPrimarilyTransitive).ToList(); var directScenes = scenes.Except(transitiveScenes).ToList(); await this.InvokeAsync(() => { diff --git a/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs b/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs index 4dcec6e..282b3ea 100644 --- a/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs +++ b/src/SharpIDE.Godot/Features/Nuget/PackageEntry.cs @@ -52,7 +52,7 @@ public partial class PackageEntry : MarginContainer if (PackageResult is null) return; _packageNameLabel.Text = PackageResult.PackageId; var installedPackagedInfo = PackageResult.InstalledNugetPackageInfo; - if (installedPackagedInfo?.IsTransitive is true && installedPackagedInfo.ProjectPackageReferences.Any(p => p.DependentPackages?.Count is not 0) is true) + if (installedPackagedInfo?.IsPrimarilyTransitive is true && installedPackagedInfo.ProjectPackageReferences.Any(p => p.DependentPackages?.Count is not 0) is true) { var transitiveOriginsGroupedByVersion = installedPackagedInfo.ProjectPackageReferences.SelectMany(s => s.DependentPackages ?? []) .GroupBy(t => t.RequestedVersion) @@ -103,7 +103,7 @@ public partial class PackageEntry : MarginContainer .Select(p => p.InstalledVersion.ToNormalizedString()) .Distinct() .ToList(); - var text = packageInfo.IsTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions); + var text = packageInfo.IsPrimarilyTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions); return text; } } \ No newline at end of file