diff --git a/ChangeLog.md b/ChangeLog.md index 6d8c70eaaf..5f34868ebb 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add SECURITY.md ([#1147](https://github.com/josefpihrt/roslynator/pull/1147)) +### Fixed + +- Fix [RCS1056](https://github.com/JosefPihrt/Roslynator/blob/main/docs/analyzers/RCS1056.md) ([#1154](https://github.com/JosefPihrt/Roslynator/pull/1154)). + ## [4.4.0] - 2023-08-01 ### Added diff --git a/src/Tests/Analyzers.Tests/RCS1056AvoidUsageOfUsingAliasDirectiveTests.cs b/src/Tests/Analyzers.Tests/RCS1056AvoidUsageOfUsingAliasDirectiveTests.cs index 81ed053dfc..7683cf19ab 100644 --- a/src/Tests/Analyzers.Tests/RCS1056AvoidUsageOfUsingAliasDirectiveTests.cs +++ b/src/Tests/Analyzers.Tests/RCS1056AvoidUsageOfUsingAliasDirectiveTests.cs @@ -79,6 +79,20 @@ void M() "); } + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.AvoidUsageOfUsingAliasDirective)] + public async Task Test_AliasQualifiedName() + { + await VerifyDiagnosticAndFixAsync(@" +[|using s = System;|] + +class X : s::Object +{ +}", @" +class X : object +{ +}"); + } + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.AvoidUsageOfUsingAliasDirective)] public async Task Test_BlockNamespaces() { diff --git a/src/Workspaces.Common/CSharp/Refactorings/InlineAliasExpressionRefactoring.cs b/src/Workspaces.Common/CSharp/Refactorings/InlineAliasExpressionRefactoring.cs index f3c9f90d3a..8a1ebc1b78 100644 --- a/src/Workspaces.Common/CSharp/Refactorings/InlineAliasExpressionRefactoring.cs +++ b/src/Workspaces.Common/CSharp/Refactorings/InlineAliasExpressionRefactoring.cs @@ -68,6 +68,19 @@ public Rewriter(IAliasSymbol aliasSymbol, TypeSyntax replacement, SemanticModel public CancellationToken CancellationToken { get; } + public override SyntaxNode VisitAliasQualifiedName(AliasQualifiedNameSyntax node) + { + IAliasSymbol aliasSymbol = SemanticModel.GetAliasInfo(node.Alias, CancellationToken); + if (SymbolEqualityComparer.Default.Equals(aliasSymbol, AliasSymbol)) + { + return SyntaxFactory.QualifiedName((NameSyntax)Replacement, node.Name) + .WithTriviaFrom(node) + .WithSimplifierAnnotation(); + } + + return base.VisitAliasQualifiedName(node); + } + public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { IAliasSymbol aliasSymbol = SemanticModel.GetAliasInfo(node, CancellationToken);