Skip to content

Commit ccc7685

Browse files
committed
Implement CR feedback
1 parent a2cea81 commit ccc7685

2 files changed

Lines changed: 28 additions & 6 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.Test/DocumentationRules/SA1625UnitTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ public class TestClass
4848
await this.VerifyCSharpDiagnosticAsync(testCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
4949
}
5050

51+
[Theory]
52+
[MemberData(nameof(Members))]
53+
public async Task VerifyThatTheAnalyzerDoesNotCrashOnInheritDocAsync(string member)
54+
{
55+
var testCode = $@"
56+
public class TestClass
57+
{{
58+
/// <inheritdoc/>
59+
{member}
60+
}}
61+
";
62+
await this.VerifyCSharpDiagnosticAsync(testCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
63+
}
64+
5165
[Theory]
5266
[MemberData(nameof(Members))]
5367
public async Task VerifyThatDublicatedDocumentationDoesReportADiagnosticAsync(string member)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1625ElementDocumentationMustNotBeCopiedAndPasted.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33

44
namespace StyleCop.Analyzers.DocumentationRules
55
{
6+
using System;
67
using System.Collections.Generic;
78
using System.Collections.Immutable;
89
using Helpers;
10+
using Helpers.ObjectPools;
911
using Microsoft.CodeAnalysis;
1012
using Microsoft.CodeAnalysis.CSharp;
1113
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -73,33 +75,37 @@ internal class SA1625ElementDocumentationMustNotBeCopiedAndPasted : DiagnosticAn
7375
private static readonly DiagnosticDescriptor Descriptor =
7476
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
7577

78+
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
79+
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationTriviaAction = HandleDocumentationTrivia;
80+
private static readonly ImmutableArray<SyntaxKind> DocumentationSyntaxKinds = ImmutableArray.Create(SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
81+
7682
/// <inheritdoc/>
7783
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
7884
ImmutableArray.Create(Descriptor);
7985

8086
/// <inheritdoc/>
8187
public override void Initialize(AnalysisContext context)
8288
{
83-
context.RegisterCompilationStartAction(HandleCompilationStart);
89+
context.RegisterCompilationStartAction(CompilationStartAction);
8490
}
8591

8692
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
8793
{
88-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentationTrivia, SyntaxKind.SingleLineDocumentationCommentTrivia);
89-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentationTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
94+
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, DocumentationSyntaxKinds);
9095
}
9196

9297
private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context)
9398
{
9499
DocumentationCommentTriviaSyntax syntax = context.Node as DocumentationCommentTriviaSyntax;
95100

96-
HashSet<string> documentationTexts = new HashSet<string>();
101+
var objectPool = SharedPools.Default<HashSet<string>>();
102+
HashSet<string> documentationTexts = objectPool.Allocate();
97103

98104
foreach (var content in syntax.Content)
99105
{
100-
string text = XmlCommentHelper.GetText(content, true).Trim();
106+
string text = XmlCommentHelper.GetText(content, true)?.Trim();
101107

102-
if (string.IsNullOrWhiteSpace(text) || string.Equals(text, ParameterNotUsed, System.StringComparison.Ordinal))
108+
if (string.IsNullOrWhiteSpace(text) || string.Equals(text, ParameterNotUsed, StringComparison.Ordinal))
103109
{
104110
continue;
105111
}
@@ -114,6 +120,8 @@ private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context)
114120
documentationTexts.Add(text);
115121
}
116122
}
123+
124+
objectPool.ClearAndFree(documentationTexts);
117125
}
118126
}
119127
}

0 commit comments

Comments
 (0)