Skip to content

Commit 6aab001

Browse files
committed
Improve code fix for CS0621
1 parent f5a37f0 commit 6aab001

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

src/CodeFixes/CSharp/CodeFixes/ModifiersCodeFixProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Microsoft.CodeAnalysis.CSharp;
1212
using Microsoft.CodeAnalysis.CSharp.Syntax;
1313
using Roslynator.CodeFixes;
14+
using Roslynator.CSharp.Syntax;
1415

1516
namespace Roslynator.CSharp.CodeFixes
1617
{
@@ -218,7 +219,12 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
218219
case CompilerDiagnosticIdentifiers.VirtualOrAbstractMembersCannotBePrivate:
219220
{
220221
if (Settings.IsEnabled(diagnostic.Id, CodeFixIdentifiers.RemoveVirtualModifier))
221-
ModifiersCodeFixRegistrator.RemoveModifier(context, diagnostic, node, SyntaxKind.VirtualKeyword, additionalKey: nameof(SyntaxKind.VirtualKeyword));
222+
{
223+
ModifierListInfo modifierInfo = SyntaxInfo.ModifierListInfo(node);
224+
225+
if (modifierInfo.IsVirtual)
226+
ModifiersCodeFixRegistrator.RemoveModifier(context, diagnostic, node, SyntaxKind.VirtualKeyword, additionalKey: nameof(SyntaxKind.VirtualKeyword));
227+
}
222228

223229
if (Settings.IsEnabled(diagnostic.Id, CodeFixIdentifiers.ChangeAccessibility))
224230
ModifiersCodeFixRegistrator.ChangeAccessibility(context, diagnostic, node, _publicOrInternalOrProtected);

src/CodeFixes/CodeFixes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,7 @@
571571
<CodeFix Id="RCF0101" Identifier="RemoveVirtualModifier" Title="Remove 'virtual' modifier">
572572
<FixableDiagnosticIds>
573573
<Id>CS0549</Id>
574+
<Id>CS0621</Id>
574575
</FixableDiagnosticIds>
575576
</CodeFix>
576577
<CodeFix Id="RCF0102" Identifier="MakeContainingClassUnsealed" Title="Make containing class unsealed">

src/Tests/CodeFixes.Tests/CS0621VirtualOrAbstractMembersCannotBePrivateTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,17 @@ private void M()
5050
}
5151
", equivalenceKey: EquivalenceKey.Create(DiagnosticId, nameof(SyntaxKind.VirtualKeyword)));
5252
}
53+
54+
[Fact, Trait(Traits.CodeFix, CompilerDiagnosticIdentifiers.VirtualOrAbstractMembersCannotBePrivate)]
55+
public async Task Test_RemoveAbstractModifier()
56+
{
57+
await VerifyNoFixAsync(@"
58+
abstract class C
59+
{
60+
abstract void M();
61+
}
62+
",
63+
equivalenceKey: EquivalenceKey.Create(DiagnosticId, nameof(SyntaxKind.VirtualKeyword)));
64+
}
5365
}
5466
}

0 commit comments

Comments
 (0)