diff --git a/StyleCop.Analyzers/StyleCop.Analyzers.Test/MaintainabilityRules/SA1404UnitTests.cs b/StyleCop.Analyzers/StyleCop.Analyzers.Test/MaintainabilityRules/SA1404UnitTests.cs index fa93d26ae..1b32c9ae3 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers.Test/MaintainabilityRules/SA1404UnitTests.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers.Test/MaintainabilityRules/SA1404UnitTests.cs @@ -426,5 +426,23 @@ public void Bar() await VerifyCSharpDiagnosticAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false); } + + [Theory] + [InlineData("global::System.Obsolete")] + [InlineData("global::My")] + [WorkItem(3829, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3829")] + public async Task TestGlobalOtherAttributeAsync(string name) + { + var testCode = $@"public class MyAttribute : System.Attribute +{{ +}} + +[{name}] +public class Foo +{{ +}}"; + + await VerifyCSharpDiagnosticAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false); + } } } diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/MaintainabilityRules/SA1404CodeAnalysisSuppressionMustHaveJustification.cs b/StyleCop.Analyzers/StyleCop.Analyzers/MaintainabilityRules/SA1404CodeAnalysisSuppressionMustHaveJustification.cs index 10b7e65d2..6933d86cd 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/MaintainabilityRules/SA1404CodeAnalysisSuppressionMustHaveJustification.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/MaintainabilityRules/SA1404CodeAnalysisSuppressionMustHaveJustification.cs @@ -100,8 +100,15 @@ public void HandleAttributeNode(SyntaxNodeAnalysisContext context) { if (!(attribute.Name is SimpleNameSyntax simpleNameSyntax)) { - QualifiedNameSyntax qualifiedNameSyntax = attribute.Name as QualifiedNameSyntax; - simpleNameSyntax = qualifiedNameSyntax.Right; + if (attribute.Name is AliasQualifiedNameSyntax aliasQualifiedNameSyntax) + { + simpleNameSyntax = aliasQualifiedNameSyntax.Name; + } + else + { + QualifiedNameSyntax qualifiedNameSyntax = attribute.Name as QualifiedNameSyntax; + simpleNameSyntax = qualifiedNameSyntax.Right; + } } if (simpleNameSyntax.Identifier.ValueText != nameof(SuppressMessageAttribute)