| File: AddPackage\InstallPackageDirectlyCodeActionOperation.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CodeActions; using Microsoft.CodeAnalysis.Packaging; namespace Microsoft.CodeAnalysis.AddPackage; /// <summary> /// Operation responsible purely for installing a nuget package with a specific /// version, or a the latest version of a nuget package. Is not responsible /// for adding an import to user code. /// </summary> internal sealed class InstallPackageDirectlyCodeActionOperation : CodeActionOperation { private readonly Document _document; private readonly IPackageInstallerService _installerService; private readonly string? _source; private readonly string _packageName; private readonly string? _versionOpt; private readonly bool _includePrerelease; private readonly bool _isLocal; private readonly List<string> _projectsWithMatchingVersion = []; public InstallPackageDirectlyCodeActionOperation( IPackageInstallerService installerService, Document document, string? source, string packageName, string? versionOpt, bool includePrerelease, bool isLocal) { _installerService = installerService; _document = document; _source = source; _packageName = packageName; _versionOpt = versionOpt; _includePrerelease = includePrerelease; _isLocal = isLocal; if (versionOpt != null) { const int projectsToShow = 5; var otherProjects = installerService.GetProjectsWithInstalledPackage( _document.Project.Solution, packageName, versionOpt).ToList(); _projectsWithMatchingVersion.AddRange(otherProjects.Take(projectsToShow).Select(p => p.Name)); if (otherProjects.Count > projectsToShow) _projectsWithMatchingVersion.Add("..."); } } public override string Title => _versionOpt == null ? string.Format(FeaturesResources.Find_and_install_latest_version_of_0, _packageName) : _isLocal ? string.Format(FeaturesResources.Use_locally_installed_0_version_1_This_version_used_in_colon_2, _packageName, _versionOpt, string.Join(", ", _projectsWithMatchingVersion)) : string.Format(FeaturesResources.Install_0_1, _packageName, _versionOpt); internal override bool ApplyDuringTests => true; internal override Task<bool> TryApplyAsync( Workspace workspace, Solution originalSolution, IProgress<CodeAnalysisProgress> progressTracker, CancellationToken cancellationToken) { return _installerService.TryInstallPackageAsync( workspace, _document.Id, _source, _packageName, _versionOpt, _includePrerelease, progressTracker, cancellationToken); } }