Skip to content

Commit 4f1d09f

Browse files
committed
Reduce the number of allocations in HandleCompilationStart for documentation rules
1 parent f1cfec3 commit 4f1d09f

25 files changed

Lines changed: 154 additions & 71 deletions

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,28 @@ namespace StyleCop.Analyzers.DocumentationRules
1717
internal abstract class ElementDocumentationSummaryBase : DiagnosticAnalyzer
1818
{
1919
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
20+
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
21+
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
22+
private readonly Action<SyntaxNodeAnalysisContext> constructorDeclarationAction;
23+
private readonly Action<SyntaxNodeAnalysisContext> destructorDeclarationAction;
24+
private readonly Action<SyntaxNodeAnalysisContext> propertyDeclarationAction;
25+
private readonly Action<SyntaxNodeAnalysisContext> indexerDeclarationAction;
26+
private readonly Action<SyntaxNodeAnalysisContext> fieldDeclarationAction;
27+
private readonly Action<SyntaxNodeAnalysisContext> delegateDeclarationAction;
28+
private readonly Action<SyntaxNodeAnalysisContext> eventDeclarationAction;
2029

2130
protected ElementDocumentationSummaryBase()
2231
{
2332
this.compilationStartAction = this.HandleCompilationStart;
33+
this.typeDeclarationAction = this.HandleTypeDeclaration;
34+
this.methodDeclarationAction = this.HandleMethodDeclaration;
35+
this.constructorDeclarationAction = this.HandleConstructorDeclaration;
36+
this.destructorDeclarationAction = this.HandleDestructorDeclaration;
37+
this.propertyDeclarationAction = this.HandlePropertyDeclaration;
38+
this.indexerDeclarationAction = this.HandleIndexerDeclaration;
39+
this.fieldDeclarationAction = this.HandleFieldDeclaration;
40+
this.delegateDeclarationAction = this.HandleDelegateDeclaration;
41+
this.eventDeclarationAction = this.HandleEventDeclaration;
2442
}
2543

2644
/// <inheritdoc/>
@@ -40,19 +58,23 @@ public override void Initialize(AnalysisContext context)
4058

4159
private void HandleCompilationStart(CompilationStartAnalysisContext context)
4260
{
43-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
44-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.StructDeclaration);
45-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration);
46-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.EnumDeclaration);
47-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
48-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration);
49-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration);
50-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandlePropertyDeclaration, SyntaxKind.PropertyDeclaration);
51-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
52-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleFieldDeclaration, SyntaxKind.FieldDeclaration);
53-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
54-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleEventDeclaration, SyntaxKind.EventDeclaration);
55-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleFieldDeclaration, SyntaxKind.EventFieldDeclaration);
61+
context.RegisterSyntaxNodeActionHonorExclusions(
62+
this.typeDeclarationAction,
63+
SyntaxKind.ClassDeclaration,
64+
SyntaxKind.StructDeclaration,
65+
SyntaxKind.InterfaceDeclaration,
66+
SyntaxKind.EnumDeclaration);
67+
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
68+
context.RegisterSyntaxNodeActionHonorExclusions(this.constructorDeclarationAction, SyntaxKind.ConstructorDeclaration);
69+
context.RegisterSyntaxNodeActionHonorExclusions(this.destructorDeclarationAction, SyntaxKind.DestructorDeclaration);
70+
context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration);
71+
context.RegisterSyntaxNodeActionHonorExclusions(this.indexerDeclarationAction, SyntaxKind.IndexerDeclaration);
72+
context.RegisterSyntaxNodeActionHonorExclusions(
73+
this.fieldDeclarationAction,
74+
SyntaxKind.FieldDeclaration,
75+
SyntaxKind.EventFieldDeclaration);
76+
context.RegisterSyntaxNodeActionHonorExclusions(this.delegateDeclarationAction, SyntaxKind.DelegateDeclaration);
77+
context.RegisterSyntaxNodeActionHonorExclusions(this.eventDeclarationAction, SyntaxKind.EventDeclaration);
5678
}
5779

5880
private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@ namespace StyleCop.Analyzers.DocumentationRules
1818
internal abstract class PartialElementDocumentationSummaryBase : DiagnosticAnalyzer
1919
{
2020
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
21+
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
22+
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
2123

2224
protected PartialElementDocumentationSummaryBase()
2325
{
2426
this.compilationStartAction = this.HandleCompilationStart;
27+
this.typeDeclarationAction = this.HandleTypeDeclaration;
28+
this.methodDeclarationAction = this.HandleMethodDeclaration;
2529
}
2630

2731
/// <inheritdoc/>
@@ -41,10 +45,12 @@ public override void Initialize(AnalysisContext context)
4145

4246
private void HandleCompilationStart(CompilationStartAnalysisContext context)
4347
{
44-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
45-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.StructDeclaration);
46-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration);
47-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
48+
context.RegisterSyntaxNodeActionHonorExclusions(
49+
this.typeDeclarationAction,
50+
SyntaxKind.ClassDeclaration,
51+
SyntaxKind.StructDeclaration,
52+
SyntaxKind.InterfaceDeclaration);
53+
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
4854
}
4955

5056
private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PropertyDocumentationSummaryBase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ namespace StyleCop.Analyzers.DocumentationRules
1616
internal abstract class PropertyDocumentationSummaryBase : DiagnosticAnalyzer
1717
{
1818
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
19+
private readonly Action<SyntaxNodeAnalysisContext> propertyDeclarationAction;
1920

2021
protected PropertyDocumentationSummaryBase()
2122
{
2223
this.compilationStartAction = this.HandleCompilationStart;
24+
this.propertyDeclarationAction = this.HandlePropertyDeclaration;
2325
}
2426

2527
/// <inheritdoc/>
@@ -39,7 +41,7 @@ public override void Initialize(AnalysisContext context)
3941

4042
private void HandleCompilationStart(CompilationStartAnalysisContext context)
4143
{
42-
context.RegisterSyntaxNodeActionHonorExclusions(this.HandlePropertyDeclaration, SyntaxKind.PropertyDeclaration);
44+
context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration);
4345
}
4446

4547
private void HandlePropertyDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@ public override void Initialize(AnalysisContext context)
5656
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5757
{
5858
Analyzer analyzer = new Analyzer(context.Options);
59-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
60-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.StructDeclaration);
61-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration);
62-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.EnumDeclaration);
59+
context.RegisterSyntaxNodeActionHonorExclusions(
60+
analyzer.HandleTypeDeclaration,
61+
SyntaxKind.ClassDeclaration,
62+
SyntaxKind.StructDeclaration,
63+
SyntaxKind.InterfaceDeclaration,
64+
SyntaxKind.EnumDeclaration);
6365
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
6466
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration);
6567
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration);

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,11 @@ public override void Initialize(AnalysisContext context)
9797
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
9898
{
9999
Analyzer analyzer = new Analyzer(context.Options);
100-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
101-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration);
102-
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleTypeDeclaration, SyntaxKind.StructDeclaration);
100+
context.RegisterSyntaxNodeActionHonorExclusions(
101+
analyzer.HandleTypeDeclaration,
102+
SyntaxKind.ClassDeclaration,
103+
SyntaxKind.InterfaceDeclaration,
104+
SyntaxKind.StructDeclaration);
103105
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
104106
}
105107

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ internal class SA1608ElementDocumentationMustNotHaveDefaultSummary : DiagnosticA
4848
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4949

5050
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
51+
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationAction = HandleDocumentation;
5152

5253
/// <inheritdoc/>
5354
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -61,7 +62,10 @@ public override void Initialize(AnalysisContext context)
6162

6263
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6364
{
64-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentation, SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
65+
context.RegisterSyntaxNodeActionHonorExclusions(
66+
DocumentationAction,
67+
SyntaxKind.SingleLineDocumentationCommentTrivia,
68+
SyntaxKind.MultiLineDocumentationCommentTrivia);
6569
}
6670

6771
private static void HandleDocumentation(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1611ElementParametersMustBeDocumented.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ internal class SA1611ElementParametersMustBeDocumented : DiagnosticAnalyzer
4343
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4444

4545
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
46+
private static readonly Action<SyntaxNodeAnalysisContext> SyntaxNodeAction = HandleSyntaxNode;
4647

4748
/// <inheritdoc/>
4849
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -56,10 +57,12 @@ public override void Initialize(AnalysisContext context)
5657

5758
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5859
{
59-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.MethodDeclaration);
60-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.ConstructorDeclaration);
61-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.DelegateDeclaration);
62-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSyntaxNode, SyntaxKind.IndexerDeclaration);
60+
context.RegisterSyntaxNodeActionHonorExclusions(
61+
SyntaxNodeAction,
62+
SyntaxKind.MethodDeclaration,
63+
SyntaxKind.ConstructorDeclaration,
64+
SyntaxKind.DelegateDeclaration,
65+
SyntaxKind.IndexerDeclaration);
6366
}
6467

6568
private static void HandleSyntaxNode(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1612ElementParameterDocumentationMustMatchElementParameters.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ internal class SA1612ElementParameterDocumentationMustMatchElementParameters : D
4949
new DiagnosticDescriptor(DiagnosticId, Title, ParamWrongOrderMessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5050

5151
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
52+
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationTriviaAction = HandleDocumentationTrivia;
5253

5354
/// <inheritdoc/>
5455
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -62,7 +63,7 @@ public override void Initialize(AnalysisContext context)
6263

6364
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6465
{
65-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDocumentationTrivia, SyntaxKind.SingleLineDocumentationCommentTrivia);
66+
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, SyntaxKind.SingleLineDocumentationCommentTrivia);
6667
}
6768

6869
private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1613ElementParameterDocumentationMustDeclareParameterName.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ internal class SA1613ElementParameterDocumentationMustDeclareParameterName : Dia
4242
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4343

4444
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
45+
private static readonly Action<SyntaxNodeAnalysisContext> XmlElementAction = HandleXmlElement;
46+
private static readonly Action<SyntaxNodeAnalysisContext> XmlEmptyElementAction = HandleXmlEmptyElement;
4547

4648
/// <inheritdoc/>
4749
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -55,8 +57,8 @@ public override void Initialize(AnalysisContext context)
5557

5658
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5759
{
58-
context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement);
59-
context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement);
60+
context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement);
61+
context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement);
6062
}
6163

6264
private static void HandleXmlElement(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1614ElementParameterDocumentationMustHaveText.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ internal class SA1614ElementParameterDocumentationMustHaveText : DiagnosticAnaly
4242
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4343

4444
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
45+
private static readonly Action<SyntaxNodeAnalysisContext> XmlElementAction = HandleXmlElement;
46+
private static readonly Action<SyntaxNodeAnalysisContext> XmlEmptyElementAction = HandleXmlEmptyElement;
4547

4648
/// <inheritdoc/>
4749
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -55,8 +57,8 @@ public override void Initialize(AnalysisContext context)
5557

5658
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5759
{
58-
context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlElement, SyntaxKind.XmlElement);
59-
context.RegisterSyntaxNodeActionHonorExclusions(HandleXmlEmptyElement, SyntaxKind.XmlEmptyElement);
60+
context.RegisterSyntaxNodeActionHonorExclusions(XmlElementAction, SyntaxKind.XmlElement);
61+
context.RegisterSyntaxNodeActionHonorExclusions(XmlEmptyElementAction, SyntaxKind.XmlEmptyElement);
6062
}
6163

6264
private static void HandleXmlElement(SyntaxNodeAnalysisContext context)

0 commit comments

Comments
 (0)