Skip to content

Commit 39048c8

Browse files
Have distinct messages for adding vs. removing accessibility modifiers (#77188)
2 parents 250126c + 7b91b2f commit 39048c8

17 files changed

+115
-38
lines changed

src/Analyzers/CSharp/Analyzers/AddAccessibilityModifiers/CSharpAddAccessibilityModifiersDiagnosticAnalyzer.cs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System.Collections.Immutable;
65
using Microsoft.CodeAnalysis.AddAccessibilityModifiers;
76
using Microsoft.CodeAnalysis.CodeStyle;
8-
using Microsoft.CodeAnalysis.CSharp.Extensions;
97
using Microsoft.CodeAnalysis.CSharp.LanguageService;
108
using Microsoft.CodeAnalysis.CSharp.Syntax;
119
using Microsoft.CodeAnalysis.Diagnostics;
12-
using Microsoft.CodeAnalysis.Shared.Extensions;
10+
using Microsoft.CodeAnalysis.LanguageService;
1311

1412
namespace Microsoft.CodeAnalysis.CSharp.AddAccessibilityModifiers;
1513

1614
[DiagnosticAnalyzer(LanguageNames.CSharp)]
17-
internal class CSharpAddAccessibilityModifiersDiagnosticAnalyzer
15+
internal sealed class CSharpAddAccessibilityModifiersDiagnosticAnalyzer
1816
: AbstractAddAccessibilityModifiersDiagnosticAnalyzer<CompilationUnitSyntax>
1917
{
18+
protected override IAccessibilityFacts AccessibilityFacts => CSharpAccessibilityFacts.Instance;
19+
protected override IAddAccessibilityModifiers AddAccessibilityModifiers => CSharpAddAccessibilityModifiers.Instance;
20+
2021
protected override void ProcessCompilationUnit(
2122
SyntaxTreeAnalysisContext context,
2223
CodeStyleOption2<AccessibilityModifiersRequired> option, CompilationUnitSyntax compilationUnit)
@@ -47,20 +48,6 @@ private void ProcessMemberDeclaration(
4748
if (member is TypeDeclarationSyntax typeDeclaration)
4849
ProcessMembers(context, option, typeDeclaration.Members);
4950

50-
if (!CSharpAddAccessibilityModifiers.Instance.ShouldUpdateAccessibilityModifier(
51-
CSharpAccessibilityFacts.Instance, member, option.Value, out var name, out var modifiersAdded))
52-
{
53-
return;
54-
}
55-
56-
// Have an issue to flag, either add or remove. Report issue to user.
57-
var additionalLocations = ImmutableArray.Create(member.GetLocation());
58-
context.ReportDiagnostic(DiagnosticHelper.Create(
59-
Descriptor,
60-
name.GetLocation(),
61-
option.Notification,
62-
context.Options,
63-
additionalLocations: additionalLocations,
64-
modifiersAdded ? ModifiersAddedProperties : null));
51+
CheckMemberAndReportDiagnostic(context, option, member);
6552
}
6653
}

src/Analyzers/Core/Analyzers/AddAccessibilityModifiers/AbstractAddAccessibilityModifiersDiagnosticAnalyzer.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Immutable;
66
using Microsoft.CodeAnalysis.CodeStyle;
77
using Microsoft.CodeAnalysis.Diagnostics;
8+
using Microsoft.CodeAnalysis.LanguageService;
89

910
namespace Microsoft.CodeAnalysis.AddAccessibilityModifiers;
1011

@@ -17,6 +18,18 @@ internal abstract class AbstractAddAccessibilityModifiersDiagnosticAnalyzer<TCom
1718
new LocalizableResourceString(nameof(AnalyzersResources.Accessibility_modifiers_required), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)))
1819
where TCompilationUnitSyntax : SyntaxNode
1920
{
21+
protected abstract IAccessibilityFacts AccessibilityFacts { get; }
22+
protected abstract IAddAccessibilityModifiers AddAccessibilityModifiers { get; }
23+
24+
protected abstract void ProcessCompilationUnit(SyntaxTreeAnalysisContext context, CodeStyleOption2<AccessibilityModifiersRequired> option, TCompilationUnitSyntax compilationUnitSyntax);
25+
26+
protected readonly DiagnosticDescriptor ModifierRemovedDescriptor = CreateDescriptorWithId(
27+
IDEDiagnosticIds.AddAccessibilityModifiersDiagnosticId,
28+
EnforceOnBuildValues.AddAccessibilityModifiers,
29+
hasAnyCodeStyleOption: true,
30+
new LocalizableResourceString(nameof(AnalyzersResources.Remove_accessibility_modifiers), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)),
31+
new LocalizableResourceString(nameof(AnalyzersResources.Accessibility_modifiers_unnecessary), AnalyzersResources.ResourceManager, typeof(AnalyzersResources)));
32+
2033
protected static readonly ImmutableDictionary<string, string?> ModifiersAddedProperties = ImmutableDictionary<string, string?>.Empty.Add(
2134
AddAccessibilityModifiersConstants.ModifiersAdded, AddAccessibilityModifiersConstants.ModifiersAdded);
2235

@@ -39,5 +52,25 @@ private void AnalyzeTree(SyntaxTreeAnalysisContext context, CompilationOptions c
3952
ProcessCompilationUnit(context, option, (TCompilationUnitSyntax)context.Tree.GetRoot(context.CancellationToken));
4053
}
4154

42-
protected abstract void ProcessCompilationUnit(SyntaxTreeAnalysisContext context, CodeStyleOption2<AccessibilityModifiersRequired> option, TCompilationUnitSyntax compilationUnitSyntax);
55+
protected void CheckMemberAndReportDiagnostic(
56+
SyntaxTreeAnalysisContext context,
57+
CodeStyleOption2<AccessibilityModifiersRequired> option,
58+
SyntaxNode member)
59+
{
60+
if (!this.AddAccessibilityModifiers.ShouldUpdateAccessibilityModifier(
61+
this.AccessibilityFacts, member, option.Value, out var name, out var modifiersAdded))
62+
{
63+
return;
64+
}
65+
66+
// Have an issue to flag, either add or remove. Report issue to user.
67+
var additionalLocations = ImmutableArray.Create(member.GetLocation());
68+
context.ReportDiagnostic(DiagnosticHelper.Create(
69+
modifiersAdded ? Descriptor : ModifierRemovedDescriptor,
70+
name.GetLocation(),
71+
option.Notification,
72+
context.Options,
73+
additionalLocations: additionalLocations,
74+
modifiersAdded ? ModifiersAddedProperties : null));
75+
}
4376
}

src/Analyzers/Core/Analyzers/AnalyzersResources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,4 +406,7 @@
406406
<data name="Implement_through_0" xml:space="preserve">
407407
<value>Implement through '{0}'</value>
408408
</data>
409+
<data name="Accessibility_modifiers_unnecessary" xml:space="preserve">
410+
<value>Accessibility modifiers unnecessary</value>
411+
</data>
409412
</root>

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.cs.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.de.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.es.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.fr.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.it.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ja.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Analyzers/Core/Analyzers/xlf/AnalyzersResources.ko.xlf

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)