Skip to content

Commit

Permalink
Merge pull request #71104 from dibarbet/restore_feedback
Browse files Browse the repository at this point in the history
Rename automatic restore requests to be more explicit
  • Loading branch information
dibarbet authored Dec 13, 2023
2 parents 2b73f63 + 543ac58 commit 1f296ff
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,12 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList<Project
{
var tasks = new List<Task>();

var projectsWithUnresolvedDependencies = new ConcurrentSet<string>();
var projectsThatNeedRestore = new ConcurrentSet<string>();
foreach (var projectToLoad in projectPathsToLoadOrReload)
{
tasks.Add(Task.Run(async () =>
{
var (errorKind, preferredBuildHostKind, hasUnresolvedDependencies) = await LoadOrReloadProjectAsync(projectToLoad, buildHostProcessManager, cancellationToken);
var (errorKind, preferredBuildHostKind, projectNeedsRestore) = await LoadOrReloadProjectAsync(projectToLoad, buildHostProcessManager, cancellationToken);
if (errorKind is LSP.MessageType.Error)
{
// We should display a toast when the value of displayedToast is 0. This will also update the value to 1 meaning we won't send any more toasts.
Expand All @@ -174,23 +174,23 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList<Project
}
}
if (hasUnresolvedDependencies)
if (projectNeedsRestore)
{
projectsWithUnresolvedDependencies.Add(projectToLoad.Path);
projectsThatNeedRestore.Add(projectToLoad.Path);
}
}, cancellationToken));
}

await Task.WhenAll(tasks);

if (_globalOptionService.GetOption(LanguageServerProjectSystemOptionsStorage.EnableAutomaticRestore) && projectsWithUnresolvedDependencies.Any())
if (_globalOptionService.GetOption(LanguageServerProjectSystemOptionsStorage.EnableAutomaticRestore) && projectsThatNeedRestore.Any())
{
// Tell the client to restore any projects with unresolved dependencies.
// This should eventually move entirely server side once we have a mechanism for reporting generic project load progress.
// Tracking: https://github.com/dotnet/vscode-csharp/issues/6675
//
// The request blocks to ensure we aren't trying to run a design time build at the same time as a restore.
await ProjectDependencyHelper.RestoreProjectsAsync(projectsWithUnresolvedDependencies.ToImmutableHashSet(), cancellationToken);
await ProjectDependencyHelper.RestoreProjectsAsync(projectsThatNeedRestore.ToImmutableHashSet(), cancellationToken);
}
}
finally
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,13 +183,13 @@ public void Dispose()

WatchProjectAssetsFile(newProjectInfo, _fileChangeContext);

var hasUnresolvedDependencies = ProjectDependencyHelper.HasUnresolvedDependencies(newProjectInfo, _mostRecentFileInfo, logger);
var needsRestore = ProjectDependencyHelper.NeedsRestore(newProjectInfo, _mostRecentFileInfo, logger);

_mostRecentFileInfo = newProjectInfo;

Contract.ThrowIfNull(_projectSystemProject.CompilationOptions, "Compilation options cannot be null for C#/VB project");
var outputKind = _projectSystemProject.CompilationOptions.OutputKind;
return (metadataReferences, outputKind, hasUnresolvedDependencies);
return (metadataReferences, outputKind, needsRestore);

// logMessage should be a string with two placeholders; the first is the project name, the second is the number of items.
void UpdateProjectSystemProjectCollection<T>(IEnumerable<T> loadedCollection, IEnumerable<T>? oldLoadedCollection, IEqualityComparer<T> comparer, Action<T> addItem, Action<T> removeItem, string logMessage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
namespace Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
internal static class ProjectDependencyHelper
{
private const string UnresolvedProjectDependenciesName = "workspace/_roslyn_projectHasUnresolvedDependencies";
private const string ProjectNeedsRestoreName = "workspace/_roslyn_projectNeedsRestore";

internal static bool HasUnresolvedDependencies(ProjectFileInfo newProjectFileInfo, ProjectFileInfo? previousProjectFileInfo, ILogger logger)
internal static bool NeedsRestore(ProjectFileInfo newProjectFileInfo, ProjectFileInfo? previousProjectFileInfo, ILogger logger)
{
if (previousProjectFileInfo is null)
{
Expand All @@ -26,12 +26,6 @@ internal static bool HasUnresolvedDependencies(ProjectFileInfo newProjectFileInf
return CheckProjectAssetsForUnresolvedDependencies(newProjectFileInfo, logger);
}

if (newProjectFileInfo.TargetFramework != previousProjectFileInfo.TargetFramework)
{
// If the target framework has changed then we need to run a restore.
return true;
}

var newPackageReferences = newProjectFileInfo.PackageReferences;
var previousPackageReferences = previousProjectFileInfo.PackageReferences;

Expand Down Expand Up @@ -136,7 +130,7 @@ internal static async Task RestoreProjectsAsync(ImmutableHashSet<string> project
Contract.ThrowIfNull(LanguageServerHost.Instance, "We don't have an LSP channel yet to send this request through.");
var languageServerManager = LanguageServerHost.Instance.GetRequiredLspService<IClientLanguageServerManager>();
var unresolvedParams = new UnresolvedDependenciesParams(projectPaths.ToArray());
await languageServerManager.SendRequestAsync(UnresolvedProjectDependenciesName, unresolvedParams, cancellationToken);
await languageServerManager.SendRequestAsync(ProjectNeedsRestoreName, unresolvedParams, cancellationToken);
}

[DataContract]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,6 @@ public static IEnumerable<ProjectFileReference> GetProjectReferences(this MSB.Ex
public static ImmutableArray<PackageReference> GetPackageReferences(this MSB.Execution.ProjectInstance executedProject)
{
var packageReferenceItems = executedProject.GetItems(ItemNames.PackageReference);
if (packageReferenceItems == null)
{
return ImmutableArray<PackageReference>.Empty;
}

using var _ = PooledHashSet<PackageReference>.GetInstance(out var references);

foreach (var item in packageReferenceItems)
Expand Down

0 comments on commit 1f296ff

Please sign in to comment.