Skip to content

Commit 034cc62

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

13 files changed

Lines changed: 129 additions & 48 deletions

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

Lines changed: 9 additions & 10 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;
@@ -16,6 +17,12 @@ namespace StyleCop.Analyzers.DocumentationRules
1617
/// </summary>
1718
internal abstract class ElementDocumentationSummaryBase : DiagnosticAnalyzer
1819
{
20+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
21+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
22+
23+
private static readonly ImmutableArray<SyntaxKind> BaseFieldDeclarationKinds =
24+
ImmutableArray.Create(SyntaxKind.FieldDeclaration, SyntaxKind.EventFieldDeclaration);
25+
1926
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
2027
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
2128
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
@@ -58,21 +65,13 @@ public override void Initialize(AnalysisContext context)
5865

5966
private void HandleCompilationStart(CompilationStartAnalysisContext context)
6067
{
61-
context.RegisterSyntaxNodeActionHonorExclusions(
62-
this.typeDeclarationAction,
63-
SyntaxKind.ClassDeclaration,
64-
SyntaxKind.StructDeclaration,
65-
SyntaxKind.InterfaceDeclaration,
66-
SyntaxKind.EnumDeclaration);
68+
context.RegisterSyntaxNodeActionHonorExclusions(this.typeDeclarationAction, BaseTypeDeclarationKinds);
6769
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
6870
context.RegisterSyntaxNodeActionHonorExclusions(this.constructorDeclarationAction, SyntaxKind.ConstructorDeclaration);
6971
context.RegisterSyntaxNodeActionHonorExclusions(this.destructorDeclarationAction, SyntaxKind.DestructorDeclaration);
7072
context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration);
7173
context.RegisterSyntaxNodeActionHonorExclusions(this.indexerDeclarationAction, SyntaxKind.IndexerDeclaration);
72-
context.RegisterSyntaxNodeActionHonorExclusions(
73-
this.fieldDeclarationAction,
74-
SyntaxKind.FieldDeclaration,
75-
SyntaxKind.EventFieldDeclaration);
74+
context.RegisterSyntaxNodeActionHonorExclusions(this.fieldDeclarationAction, BaseFieldDeclarationKinds);
7675
context.RegisterSyntaxNodeActionHonorExclusions(this.delegateDeclarationAction, SyntaxKind.DelegateDeclaration);
7776
context.RegisterSyntaxNodeActionHonorExclusions(this.eventDeclarationAction, SyntaxKind.EventDeclaration);
7877
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ internal class SA1608ElementDocumentationMustNotHaveDefaultSummary : DiagnosticA
4747
private static readonly DiagnosticDescriptor Descriptor =
4848
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4949

50+
private static readonly ImmutableArray<SyntaxKind> DocumentationCommentKinds =
51+
ImmutableArray.Create(SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
52+
5053
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5154
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationAction = HandleDocumentation;
5255

@@ -62,10 +65,7 @@ public override void Initialize(AnalysisContext context)
6265

6366
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6467
{
65-
context.RegisterSyntaxNodeActionHonorExclusions(
66-
DocumentationAction,
67-
SyntaxKind.SingleLineDocumentationCommentTrivia,
68-
SyntaxKind.MultiLineDocumentationCommentTrivia);
68+
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationAction, DocumentationCommentKinds);
6969
}
7070

7171
private static void HandleDocumentation(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1202ElementsMustBeOrderedByAccess.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ internal class SA1202ElementsMustBeOrderedByAccess : DiagnosticAnalyzer
5050
private static readonly DiagnosticDescriptor Descriptor =
5151
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5252

53+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
54+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
55+
5356
private static readonly Dictionary<SyntaxKind, string> MemberNames = new Dictionary<SyntaxKind, string>
5457
{
5558
[SyntaxKind.DelegateDeclaration] = "delegates",
@@ -83,7 +86,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
8386
{
8487
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
8588
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
86-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
89+
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
8790
}
8891

8992
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1204StaticElementsMustAppearBeforeInstanceElements.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ internal class SA1204StaticElementsMustAppearBeforeInstanceElements : Diagnostic
3737
private static readonly DiagnosticDescriptor Descriptor =
3838
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3939

40+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
41+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
42+
4043
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4144

4245
private static readonly Dictionary<SyntaxKind, string> MemberNames = new Dictionary<SyntaxKind, string>
@@ -70,7 +73,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
7073
{
7174
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
7275
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
73-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDelcaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
76+
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDelcaration, TypeDeclarationKinds);
7477
}
7578

7679
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements.cs

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

38+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
39+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
40+
3841
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
3942

4043
/// <inheritdoc/>
@@ -49,10 +52,10 @@ public override void Initialize(AnalysisContext context)
4952

5053
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5154
{
52-
context.RegisterSyntaxNodeActionHonorExclusions(AnalyzeTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
55+
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
5356
}
5457

55-
private static void AnalyzeTypeDeclaration(SyntaxNodeAnalysisContext context)
58+
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
5659
{
5760
var typeDeclaration = (TypeDeclarationSyntax)context.Node;
5861

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ internal class SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonly
3434
private static readonly DiagnosticDescriptor Descriptor =
3535
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3636

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

3942
/// <inheritdoc/>
@@ -48,7 +51,7 @@ public override void Initialize(AnalysisContext context)
4851

4952
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5053
{
51-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
54+
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
5255
}
5356

5457
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1101PrefixLocalCallsWithThis.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ internal class SA1101PrefixLocalCallsWithThis : DiagnosticAnalyzer
4545
private static readonly DiagnosticDescriptor Descriptor =
4646
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4747

48+
private static readonly ImmutableArray<SyntaxKind> SimpleNameKinds =
49+
ImmutableArray.Create(SyntaxKind.IdentifierName, SyntaxKind.GenericName);
50+
4851
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4952

5053
/// <inheritdoc/>
@@ -60,7 +63,7 @@ public override void Initialize(AnalysisContext context)
6063
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6164
{
6265
context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberAccessExpression, SyntaxKind.SimpleMemberAccessExpression);
63-
context.RegisterSyntaxNodeActionHonorExclusions(HandleIdentifierName, SyntaxKind.IdentifierName, SyntaxKind.GenericName);
66+
context.RegisterSyntaxNodeActionHonorExclusions(HandleSimpleName, SimpleNameKinds);
6467
}
6568

6669
/// <summary>
@@ -75,7 +78,7 @@ private static void HandleMemberAccessExpression(SyntaxNodeAnalysisContext conte
7578
HandleIdentifierNameImpl(context, nameExpression);
7679
}
7780

78-
private static void HandleIdentifierName(SyntaxNodeAnalysisContext context)
81+
private static void HandleSimpleName(SyntaxNodeAnalysisContext context)
7982
{
8083
switch (context.Node?.Parent?.Kind() ?? SyntaxKind.None)
8184
{

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1115ParameterMustFollowComma.cs

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

58+
private static readonly ImmutableArray<SyntaxKind> BaseMethodDeclarationKinds =
59+
ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration);
60+
61+
private static readonly ImmutableArray<SyntaxKind> ConstructorInitializerKinds =
62+
ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer);
63+
5864
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5965

6066
/// <inheritdoc/>
@@ -69,7 +75,7 @@ public override void Initialize(AnalysisContext context)
6975

7076
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7177
{
72-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration);
78+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
7379
context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression);
7480
context.RegisterSyntaxNodeActionHonorExclusions(HandleObjectCreation, SyntaxKind.ObjectCreationExpression);
7581
context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
@@ -80,7 +86,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
8086
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousMethod, SyntaxKind.AnonymousMethodExpression);
8187
context.RegisterSyntaxNodeActionHonorExclusions(HandleLambda, SyntaxKind.ParenthesizedLambdaExpression);
8288
context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
83-
context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer);
89+
context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds);
8490
context.RegisterSyntaxNodeActionHonorExclusions(HandleElementBinding, SyntaxKind.ElementBindingExpression);
8591
context.RegisterSyntaxNodeActionHonorExclusions(HandleImpliticElementAccess, SyntaxKind.ImplicitElementAccess);
8692
}

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1116SplitParametersMustStartOnLineAfterDeclaration.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ internal class SA1116SplitParametersMustStartOnLineAfterDeclaration : Diagnostic
5050
private static readonly DiagnosticDescriptor Descriptor =
5151
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5252

53+
private static readonly ImmutableArray<SyntaxKind> BaseMethodDeclarationKinds =
54+
ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration);
55+
56+
private static readonly ImmutableArray<SyntaxKind> ConstructorInitializerKinds =
57+
ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer);
58+
5359
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5460

5561
/// <inheritdoc/>
@@ -64,14 +70,8 @@ public override void Initialize(AnalysisContext context)
6470

6571
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6672
{
67-
context.RegisterSyntaxNodeActionHonorExclusions(
68-
HandleBaseMethodDeclaration,
69-
new[] { SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration, SyntaxKind.OperatorDeclaration });
70-
71-
context.RegisterSyntaxNodeActionHonorExclusions(
72-
HandleConstructorInitializer,
73-
new[] { SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer });
74-
73+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
74+
context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds);
7575
context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
7676
context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
7777
context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression);

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1117ParametersMustBeOnSameLineOrSeparateLines.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ internal class SA1117ParametersMustBeOnSameLineOrSeparateLines : DiagnosticAnaly
6161
private static readonly DiagnosticDescriptor Descriptor =
6262
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
6363

64+
private static readonly ImmutableArray<SyntaxKind> BaseMethodDeclarationKinds =
65+
ImmutableArray.Create(SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration);
66+
67+
private static readonly ImmutableArray<SyntaxKind> ConstructorInitializerKinds =
68+
ImmutableArray.Create(SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer);
69+
6470
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
6571

6672
/// <inheritdoc/>
@@ -75,14 +81,8 @@ public override void Initialize(AnalysisContext context)
7581

7682
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7783
{
78-
context.RegisterSyntaxNodeActionHonorExclusions(
79-
HandleBaseMethodDeclaration,
80-
new[] { SyntaxKind.ConstructorDeclaration, SyntaxKind.MethodDeclaration });
81-
82-
context.RegisterSyntaxNodeActionHonorExclusions(
83-
HandleConstructorInitializer,
84-
new[] { SyntaxKind.BaseConstructorInitializer, SyntaxKind.ThisConstructorInitializer });
85-
84+
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
85+
context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorInitializer, ConstructorInitializerKinds);
8686
context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
8787
context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
8888
context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocation, SyntaxKind.InvocationExpression);

0 commit comments

Comments
 (0)