Skip to content

Commit d8e858b

Browse files
committed
Reduce the number of allocations required to register three syntax kinds
1 parent 034cc62 commit d8e858b

8 files changed

Lines changed: 51 additions & 44 deletions

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace StyleCop.Analyzers.DocumentationRules
55
{
66
using System;
7+
using System.Collections.Immutable;
78
using System.Linq;
89
using Microsoft.CodeAnalysis;
910
using Microsoft.CodeAnalysis.CSharp;
@@ -17,14 +18,17 @@ namespace StyleCop.Analyzers.DocumentationRules
1718
/// </summary>
1819
internal abstract class PartialElementDocumentationSummaryBase : DiagnosticAnalyzer
1920
{
21+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
22+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
23+
2024
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
21-
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
25+
private readonly Action<SyntaxNodeAnalysisContext> baseTypeDeclarationAction;
2226
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
2327

2428
protected PartialElementDocumentationSummaryBase()
2529
{
2630
this.compilationStartAction = this.HandleCompilationStart;
27-
this.typeDeclarationAction = this.HandleTypeDeclaration;
31+
this.baseTypeDeclarationAction = this.HandleBaseTypeDeclaration;
2832
this.methodDeclarationAction = this.HandleMethodDeclaration;
2933
}
3034

@@ -45,15 +49,11 @@ public override void Initialize(AnalysisContext context)
4549

4650
private void HandleCompilationStart(CompilationStartAnalysisContext context)
4751
{
48-
context.RegisterSyntaxNodeActionHonorExclusions(
49-
this.typeDeclarationAction,
50-
SyntaxKind.ClassDeclaration,
51-
SyntaxKind.StructDeclaration,
52-
SyntaxKind.InterfaceDeclaration);
52+
context.RegisterSyntaxNodeActionHonorExclusions(this.baseTypeDeclarationAction, BaseTypeDeclarationKinds);
5353
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
5454
}
5555

56-
private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
56+
private void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
5757
{
5858
var node = (BaseTypeDeclarationSyntax)context.Node;
5959
if (node.Identifier.IsMissing)

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ internal class SA1601PartialElementsMustBeDocumented : DiagnosticAnalyzer
8282
private static readonly DiagnosticDescriptor Descriptor =
8383
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
8484

85+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
86+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
87+
8588
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
8689

8790
/// <inheritdoc/>
@@ -97,11 +100,7 @@ public override void Initialize(AnalysisContext context)
97100
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
98101
{
99102
Analyzer analyzer = new Analyzer(context.Options);
100-
context.RegisterSyntaxNodeActionHonorExclusions(
101-
analyzer.HandleTypeDeclaration,
102-
SyntaxKind.ClassDeclaration,
103-
SyntaxKind.InterfaceDeclaration,
104-
SyntaxKind.StructDeclaration);
103+
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
105104
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
106105
}
107106

@@ -115,7 +114,7 @@ public Analyzer(AnalyzerOptions options)
115114
this.documentationSettings = settings.DocumentationRules;
116115
}
117116

118-
public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
117+
public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
119118
{
120119
if (context.GetDocumentationMode() != DocumentationMode.Diagnose)
121120
{

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ internal class SA1618GenericTypeParametersMustBeDocumented : DiagnosticAnalyzer
4040
private static readonly DiagnosticDescriptor Descriptor =
4141
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4242

43+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
44+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
45+
4346
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4447
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
4548
private static readonly Action<SyntaxNodeAnalysisContext> MethodDeclarationAction = HandleMethodDeclaration;
@@ -57,12 +60,7 @@ public override void Initialize(AnalysisContext context)
5760

5861
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5962
{
60-
context.RegisterSyntaxNodeActionHonorExclusions(
61-
TypeDeclarationAction,
62-
SyntaxKind.ClassDeclaration,
63-
SyntaxKind.StructDeclaration,
64-
SyntaxKind.InterfaceDeclaration);
65-
63+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
6664
context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration);
6765
context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration);
6866
}

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ internal class SA1619GenericTypeParametersMustBeDocumentedPartialClass : Diagnos
9090
private static readonly DiagnosticDescriptor Descriptor =
9191
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
9292

93+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
94+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
95+
9396
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
9497
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
9598

@@ -105,11 +108,7 @@ public override void Initialize(AnalysisContext context)
105108

106109
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
107110
{
108-
context.RegisterSyntaxNodeActionHonorExclusions(
109-
TypeDeclarationAction,
110-
SyntaxKind.ClassDeclaration,
111-
SyntaxKind.StructDeclaration,
112-
SyntaxKind.InterfaceDeclaration);
111+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
113112
}
114113

115114
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ internal class SA1500CurlyBracketsForMultiLineStatementsMustNotShareLine : Diagn
7070
private static readonly DiagnosticDescriptor Descriptor =
7171
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
7272

73+
private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
74+
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.CollectionInitializerExpression);
75+
7376
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
7477

7578
/// <inheritdoc/>
@@ -92,7 +95,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
9295
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorListSyntax, SyntaxKind.AccessorList);
9396
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlockSyntax, SyntaxKind.Block);
9497
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatementSyntax, SyntaxKind.SwitchStatement);
95-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpressionSyntax, SyntaxKind.ObjectInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.CollectionInitializerExpression);
98+
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpressionSyntax, InitializerExpressionKinds);
9699
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreationExpressionSyntax, SyntaxKind.AnonymousObjectCreationExpression);
97100
}
98101

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1502ElementMustNotBeOnASingleLine.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ internal class SA1502ElementMustNotBeOnASingleLine : DiagnosticAnalyzer
5151
private static readonly DiagnosticDescriptor Descriptor =
5252
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5353

54+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
55+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
56+
57+
private static readonly ImmutableArray<SyntaxKind> BasePropertyDeclarationKinds =
58+
ImmutableArray.Create(SyntaxKind.PropertyDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.IndexerDeclaration);
59+
60+
private static readonly ImmutableArray<SyntaxKind> BaseMethodDeclarationKinds =
61+
ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DestructorDeclaration);
62+
5463
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5564

5665
/// <inheritdoc/>
@@ -65,19 +74,19 @@ public override void Initialize(AnalysisContext context)
6574

6675
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6776
{
68-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarations, SyntaxKind.ClassDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.EnumDeclaration);
69-
context.RegisterSyntaxNodeActionHonorExclusions(HandlePropertyLikeDeclarations, SyntaxKind.PropertyDeclaration, SyntaxKind.EventDeclaration, SyntaxKind.IndexerDeclaration);
70-
context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodLikeDeclarations, SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DestructorDeclaration);
71-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclarations, SyntaxKind.NamespaceDeclaration);
77+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
78+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBasePropertyDeclaration, BasePropertyDeclarationKinds);
79+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
80+
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
7281
}
7382

74-
private static void HandleBaseTypeDeclarations(SyntaxNodeAnalysisContext context)
83+
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
7584
{
7685
var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node;
7786
CheckViolation(context, typeDeclaration.OpenBraceToken, typeDeclaration.CloseBraceToken);
7887
}
7988

80-
private static void HandlePropertyLikeDeclarations(SyntaxNodeAnalysisContext context)
89+
private static void HandleBasePropertyDeclaration(SyntaxNodeAnalysisContext context)
8190
{
8291
var basePropertyDeclaration = (BasePropertyDeclarationSyntax)context.Node;
8392

@@ -92,7 +101,7 @@ private static void HandlePropertyLikeDeclarations(SyntaxNodeAnalysisContext con
92101
}
93102
}
94103

95-
private static void HandleMethodLikeDeclarations(SyntaxNodeAnalysisContext context)
104+
private static void HandleBaseMethodDeclaration(SyntaxNodeAnalysisContext context)
96105
{
97106
var baseMethodDeclaration = (BaseMethodDeclarationSyntax)context.Node;
98107

@@ -103,7 +112,7 @@ private static void HandleMethodLikeDeclarations(SyntaxNodeAnalysisContext conte
103112
}
104113
}
105114

106-
private static void HandleNamespaceDeclarations(SyntaxNodeAnalysisContext context)
115+
private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context)
107116
{
108117
var namespaceDeclaration = (NamespaceDeclarationSyntax)context.Node;
109118
CheckViolation(context, namespaceDeclaration.OpenBraceToken, namespaceDeclaration.CloseBraceToken);

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1205PartialElementsMustDeclareAccess.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ internal class SA1205PartialElementsMustDeclareAccess : DiagnosticAnalyzer
3333
private static readonly DiagnosticDescriptor Descriptor =
3434
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3535

36+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
37+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
38+
3639
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
3740

3841
/// <inheritdoc/>
@@ -47,10 +50,10 @@ public override void Initialize(AnalysisContext context)
4750

4851
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
4952
{
50-
context.RegisterSyntaxNodeActionHonorExclusions(HandleElementDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
53+
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
5154
}
5255

53-
private static void HandleElementDeclaration(SyntaxNodeAnalysisContext context)
56+
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
5457
{
5558
var typeDeclarationNode = (TypeDeclarationSyntax)context.Node;
5659

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1114ParameterListMustFollowDeclaration.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ internal class SA1114ParameterListMustFollowDeclaration : DiagnosticAnalyzer
5454
private static readonly DiagnosticDescriptor Descriptor =
5555
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5656

57+
private static readonly ImmutableArray<SyntaxKind> BaseMethodDeclarationKinds =
58+
ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.OperatorDeclaration, SyntaxKind.ConversionOperatorDeclaration);
59+
5760
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5861

5962
/// <inheritdoc/>
@@ -68,7 +71,7 @@ public override void Initialize(AnalysisContext context)
6871

6972
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7073
{
71-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.OperatorDeclaration);
74+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
7275
context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodInvocation, SyntaxKind.InvocationExpression);
7376
context.RegisterSyntaxNodeActionHonorExclusions(HandleObjectCreation, SyntaxKind.ObjectCreationExpression);
7477
context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
@@ -79,13 +82,6 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
7982
context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
8083
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousMethod, SyntaxKind.AnonymousMethodExpression);
8184
context.RegisterSyntaxNodeActionHonorExclusions(HandleLambdaExpression, SyntaxKind.ParenthesizedLambdaExpression);
82-
context.RegisterSyntaxNodeActionHonorExclusions(HandleConversionOperatorDeclaration, SyntaxKind.ConversionOperatorDeclaration);
83-
}
84-
85-
private static void HandleConversionOperatorDeclaration(SyntaxNodeAnalysisContext context)
86-
{
87-
var conversionOperatorDeclaration = (ConversionOperatorDeclarationSyntax)context.Node;
88-
AnalyzeParametersList(context, conversionOperatorDeclaration.ParameterList);
8985
}
9086

9187
private static void HandleLambdaExpression(SyntaxNodeAnalysisContext context)

0 commit comments

Comments
 (0)