Skip to content

Commit 7487306

Browse files
committed
Reduce the number of allocations required to register four syntax kinds
1 parent d8e858b commit 7487306

4 files changed

Lines changed: 29 additions & 21 deletions

File tree

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

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

44+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
45+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
46+
4447
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4548

4649
/// <inheritdoc/>
@@ -56,12 +59,7 @@ public override void Initialize(AnalysisContext context)
5659
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5760
{
5861
Analyzer analyzer = new Analyzer(context.Options);
59-
context.RegisterSyntaxNodeActionHonorExclusions(
60-
analyzer.HandleTypeDeclaration,
61-
SyntaxKind.ClassDeclaration,
62-
SyntaxKind.StructDeclaration,
63-
SyntaxKind.InterfaceDeclaration,
64-
SyntaxKind.EnumDeclaration);
62+
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
6563
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
6664
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration);
6765
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration);
@@ -83,7 +81,7 @@ public Analyzer(AnalyzerOptions options)
8381
this.documentationSettings = settings.DocumentationRules;
8482
}
8583

86-
public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
84+
public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
8785
{
8886
if (context.GetDocumentationMode() != DocumentationMode.Diagnose)
8987
{

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

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

45+
private static readonly ImmutableArray<SyntaxKind> HandledSyntaxKinds =
46+
ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DelegateDeclaration, SyntaxKind.IndexerDeclaration);
47+
4548
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4649
private static readonly Action<SyntaxNodeAnalysisContext> SyntaxNodeAction = HandleSyntaxNode;
4750

@@ -57,12 +60,7 @@ public override void Initialize(AnalysisContext context)
5760

5861
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5962
{
60-
context.RegisterSyntaxNodeActionHonorExclusions(
61-
SyntaxNodeAction,
62-
SyntaxKind.MethodDeclaration,
63-
SyntaxKind.ConstructorDeclaration,
64-
SyntaxKind.DelegateDeclaration,
65-
SyntaxKind.IndexerDeclaration);
63+
context.RegisterSyntaxNodeActionHonorExclusions(SyntaxNodeAction, HandledSyntaxKinds);
6664
}
6765

6866
private static void HandleSyntaxNode(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine.cs

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

57+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
58+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
59+
60+
private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
61+
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
62+
5763
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5864

5965
/// <inheritdoc/>
@@ -69,11 +75,11 @@ public override void Initialize(AnalysisContext context)
6975
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7076
{
7177
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
72-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
78+
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
7379
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
7480
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
7581
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
76-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
82+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
7783
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
7884
}
7985

@@ -83,7 +89,7 @@ private static void HandleBlock(SyntaxNodeAnalysisContext context)
8389
AnalyzeOpenBrace(context, block.OpenBraceToken);
8490
}
8591

86-
private static void HandleInitializers(SyntaxNodeAnalysisContext context)
92+
private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context)
8793
{
8894
var expression = (InitializerExpressionSyntax)context.Node;
8995
AnalyzeOpenBrace(context, expression.OpenBraceToken);
@@ -107,7 +113,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context
107113
AnalyzeOpenBrace(context, namespaceDeclaration.OpenBraceToken);
108114
}
109115

110-
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
116+
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
111117
{
112118
var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node;
113119
AnalyzeOpenBrace(context, typeDeclaration.OpenBraceToken);

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ internal class SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine : Diagnost
5353
private static readonly DiagnosticDescriptor Descriptor =
5454
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5555

56+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
57+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
58+
59+
private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
60+
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
61+
5662
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5763

5864
/// <inheritdoc/>
@@ -68,11 +74,11 @@ public override void Initialize(AnalysisContext context)
6874
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6975
{
7076
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
71-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
77+
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
7278
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
7379
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
7480
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
75-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
81+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
7682
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
7783
}
7884

@@ -82,7 +88,7 @@ private static void HandleBlock(SyntaxNodeAnalysisContext context)
8288
AnalyzeCloseBrace(context, block.CloseBraceToken);
8389
}
8490

85-
private static void HandleInitializers(SyntaxNodeAnalysisContext context)
91+
private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context)
8692
{
8793
var expression = (InitializerExpressionSyntax)context.Node;
8894
AnalyzeCloseBrace(context, expression.CloseBraceToken);
@@ -106,7 +112,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context
106112
AnalyzeCloseBrace(context, namespaceDeclaration.CloseBraceToken);
107113
}
108114

109-
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
115+
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
110116
{
111117
var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node;
112118
AnalyzeCloseBrace(context, typeDeclaration.CloseBraceToken);

0 commit comments

Comments
 (0)