提交 902be1d5 编写于 作者: T Tom Meschter

Merge pull request #741 from tmeschter/SupportNotConfigurable

Disable the severity menu items when a selected diagnostic is not configurable
......@@ -20,9 +20,8 @@ internal class AnalyzerItemsTracker : IVsSelectionEvents
private IVsMonitorSelection _vsMonitorSelection = null;
private uint _selectionEventsCookie = 0;
public event EventHandler SelectedHierarchyChanged;
public event EventHandler SelectedDiagnosticItemsChanged;
public event EventHandler SelectedItemIdChanged;
public event EventHandler SelectedHierarchyItemChanged;
[ImportingConstructor]
public AnalyzerItemsTracker(SVsServiceProvider serviceProvider)
......@@ -94,14 +93,10 @@ int IVsSelectionEvents.OnElementValueChanged(uint elementid, object varValueOld,
.Select(b => b.DiagnosticItem)
.ToImmutableArray();
if (!object.ReferenceEquals(oldSelectedHierarchy, this.SelectedHierarchy))
if (!object.ReferenceEquals(oldSelectedHierarchy, this.SelectedHierarchy) ||
oldSelectedItemId != this.SelectedItemId)
{
this.SelectedHierarchyChanged?.Invoke(this, EventArgs.Empty);
}
if (oldSelectedItemId != this.SelectedItemId)
{
this.SelectedItemIdChanged?.Invoke(this, EventArgs.Empty);
this.SelectedHierarchyItemChanged?.Invoke(this, EventArgs.Empty);
}
if (oldSelectedDiagnosticItems != this.SelectedDiagnosticItems)
......
......@@ -82,13 +82,12 @@ public void Initialize(IMenuCommandService menuCommandService)
_openHelpLinkMenuItem = AddCommandHandler(menuCommandService, ID.RoslynCommands.OpenDiagnosticHelpLink, OpenDiagnosticHelpLinkHandler);
UpdateMenuItemVisibility();
UpdateMenuItemsChecked();
UpdateSeverityMenuItemsChecked();
if (_tracker != null)
{
_tracker.SelectedHierarchyChanged += SelectedHierarchyChangedHandler;
_tracker.SelectedHierarchyItemChanged += SelectedHierarchyItemChangedHandler;
_tracker.SelectedDiagnosticItemsChanged += SelectedDiagnosticItemsChangedHandler;
_tracker.SelectedItemIdChanged += SelectedItemIdChangedHandler;
}
var buildManager = (IVsSolutionBuildManager)_serviceProvider.GetService(typeof(SVsSolutionBuildManager));
......@@ -120,23 +119,19 @@ private void SelectedDiagnosticItemsChangedHandler(object sender, EventArgs e)
item.PropertyChanged += DiagnosticItemPropertyChangedHandler;
}
UpdateMenuItemsChecked();
UpdateSeverityMenuItemsChecked();
UpdateSeverityMenuItemsEnabled();
}
private void DiagnosticItemPropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(DiagnosticItem.EffectiveSeverity))
{
UpdateMenuItemsChecked();
UpdateSeverityMenuItemsChecked();
}
}
private void SelectedHierarchyChangedHandler(object sender, EventArgs e)
{
UpdateMenuItemVisibility();
}
private void SelectedItemIdChangedHandler(object sender, EventArgs e)
private void SelectedHierarchyItemChangedHandler(object sender, EventArgs e)
{
UpdateMenuItemVisibility();
}
......@@ -159,7 +154,7 @@ private void UpdateMenuItemVisibility()
Path.GetExtension(itemName).Equals(".ruleset", StringComparison.OrdinalIgnoreCase);
}
private void UpdateMenuItemsChecked()
private void UpdateSeverityMenuItemsChecked()
{
_setSeverityErrorMenuItem.Checked = AnyDiagnosticsWithSeverity(ReportDiagnostic.Error);
_setSeverityWarningMenuItem.Checked = AnyDiagnosticsWithSeverity(ReportDiagnostic.Warn);
......@@ -173,6 +168,17 @@ private bool AnyDiagnosticsWithSeverity(ReportDiagnostic severity)
return _selectedDiagnosticItems.Any(item => item.EffectiveSeverity == severity);
}
private void UpdateSeverityMenuItemsEnabled()
{
bool configurable = !_selectedDiagnosticItems.Any(item => item.Descriptor.CustomTags.Contains(WellKnownDiagnosticTags.NotConfigurable));
_setSeverityErrorMenuItem.Enabled = configurable;
_setSeverityWarningMenuItem.Enabled = configurable;
_setSeverityInfoMenuItem.Enabled = configurable;
_setSeverityHiddenMenuItem.Enabled = configurable;
_setSeverityNoneMenuItem.Enabled = configurable;
}
private bool SelectedProjectSupportsAnalyzers()
{
EnvDTE.Project project;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册