未验证 提交 7e782b20 编写于 作者: M Manish Vasani 提交者: GitHub

Merge pull request #28728 from mavasani/SuppressActiveIssues

Fix "Run Code Analysis and Suppress Active Issues" command for CPS pr…
......@@ -8,7 +8,7 @@
using Microsoft.VisualStudio.LanguageServices.Implementation.Venus;
using Microsoft.VisualStudio.Shell;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.SolutionExplorer
namespace Microsoft.VisualStudio.LanguageServices.Implementation
{
[ExportWorkspaceService(typeof(IHierarchyItemToProjectIdMap), ServiceLayer.Host), Shared]
internal class HierarchyItemToProjectIdMap : IHierarchyItemToProjectIdMap
......
......@@ -4,7 +4,7 @@
using Microsoft.CodeAnalysis.Host;
using Microsoft.VisualStudio.Shell;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.SolutionExplorer
namespace Microsoft.VisualStudio.LanguageServices.Implementation
{
/// <summary>
/// Maps from hierarchy items to project IDs.
......
......@@ -43,6 +43,8 @@ internal sealed class VisualStudioSuppressionFixService : IVisualStudioSuppressi
private readonly ICodeActionEditHandlerService _editHandlerService;
private readonly VisualStudioDiagnosticListSuppressionStateService _suppressionStateService;
private readonly IWaitIndicator _waitIndicator;
private readonly IVsHierarchyItemManager _vsHierarchyItemManager;
private readonly IHierarchyItemToProjectIdMap _projectMap;
[ImportingConstructor]
public VisualStudioSuppressionFixService(
......@@ -53,7 +55,8 @@ internal sealed class VisualStudioSuppressionFixService : IVisualStudioSuppressi
ICodeFixService codeFixService,
ICodeActionEditHandlerService editHandlerService,
IVisualStudioDiagnosticListSuppressionStateService suppressionStateService,
IWaitIndicator waitIndicator)
IWaitIndicator waitIndicator,
IVsHierarchyItemManager vsHierarchyItemManager)
{
_workspace = workspace;
_diagnosticService = diagnosticService;
......@@ -62,7 +65,9 @@ internal sealed class VisualStudioSuppressionFixService : IVisualStudioSuppressi
_suppressionStateService = (VisualStudioDiagnosticListSuppressionStateService)suppressionStateService;
_editHandlerService = editHandlerService;
_waitIndicator = waitIndicator;
_vsHierarchyItemManager = vsHierarchyItemManager;
_fixMultipleOccurencesService = workspace.Services.GetService<IFixMultipleOccurrencesService>();
_projectMap = workspace.Services.GetService<IHierarchyItemToProjectIdMap>();
var errorList = serviceProvider.GetService(typeof(SVsErrorList)) as IErrorList;
_tableControl = errorList?.TableControl;
......@@ -75,7 +80,7 @@ public bool AddSuppressions(IVsHierarchy projectHierarchyOpt)
return false;
}
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_workspace, projectHierarchyOpt);
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_vsHierarchyItemManager, _projectMap, projectHierarchyOpt);
// Apply suppressions fix in global suppressions file for non-compiler diagnostics and
// in source only for compiler diagnostics.
......@@ -95,7 +100,7 @@ public bool AddSuppressions(bool selectedErrorListEntriesOnly, bool suppressInSo
return false;
}
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_workspace, projectHierarchyOpt);
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_vsHierarchyItemManager, _projectMap, projectHierarchyOpt);
return ApplySuppressionFix(shouldFixInProject, selectedErrorListEntriesOnly, isAddSuppression: true, isSuppressionInSource: suppressInSource, onlyCompilerDiagnostics: false, showPreviewChangesDialog: true);
}
......@@ -106,25 +111,23 @@ public bool RemoveSuppressions(bool selectedErrorListEntriesOnly, IVsHierarchy p
return false;
}
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_workspace, projectHierarchyOpt);
Func<Project, bool> shouldFixInProject = GetShouldFixInProjectDelegate(_vsHierarchyItemManager, _projectMap, projectHierarchyOpt);
return ApplySuppressionFix(shouldFixInProject, selectedErrorListEntriesOnly, isAddSuppression: false, isSuppressionInSource: false, onlyCompilerDiagnostics: false, showPreviewChangesDialog: true);
}
private static Func<Project, bool> GetShouldFixInProjectDelegate(VisualStudioWorkspaceImpl workspace, IVsHierarchy projectHierarchyOpt)
private static Func<Project, bool> GetShouldFixInProjectDelegate(IVsHierarchyItemManager vsHierarchyItemManager, IHierarchyItemToProjectIdMap projectMap, IVsHierarchy projectHierarchyOpt)
{
if (projectHierarchyOpt == null)
ProjectId projectIdToMatch = null;
if (projectHierarchyOpt != null)
{
return p => true;
}
else
{
var projectIdsForHierarchy = (workspace.DeferredState?.ProjectTracker.ImmutableProjects ?? ImmutableArray<AbstractProject>.Empty)
.Where(p => p.Language == LanguageNames.CSharp || p.Language == LanguageNames.VisualBasic)
.Where(p => p.Hierarchy == projectHierarchyOpt)
.Select(p => workspace.CurrentSolution.GetProject(p.Id).Id)
.ToImmutableHashSet();
return p => projectIdsForHierarchy.Contains(p.Id);
IVsHierarchyItem projectHierarchyItem = vsHierarchyItemManager.GetHierarchyItem(projectHierarchyOpt, VSConstants.VSITEMID_ROOT);
if (projectMap.TryGetProjectId(projectHierarchyItem, targetFrameworkMoniker: null, out ProjectId projectId))
{
projectIdToMatch = projectId;
}
}
return p => projectHierarchyOpt == null || p.Id == projectIdToMatch;
}
private async Task<ImmutableArray<DiagnosticData>> GetAllBuildDiagnosticsAsync(Func<Project, bool> shouldFixInProject, CancellationToken cancellationToken)
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis
Imports Microsoft.VisualStudio.LanguageServices.Implementation
Imports Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem
Imports Microsoft.VisualStudio.LanguageServices.Implementation.SolutionExplorer
Imports Microsoft.VisualStudio.Shell
Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.ProjectSystemShim.Framework
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册