Skip to content

Commit 598c3ea

Browse files
committed
Reduce the number of allocations in HandleCompilationStart for layout rules
1 parent 5c8bce1 commit 598c3ea

18 files changed

Lines changed: 124 additions & 76 deletions

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

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,20 @@ 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> BaseTypeDeclarationKinds =
74+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
75+
7376
private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
7477
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.CollectionInitializerExpression);
7578

7679
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
80+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
81+
private static readonly Action<SyntaxNodeAnalysisContext> BaseTypeDeclarationAction = HandleBaseTypeDeclaration;
82+
private static readonly Action<SyntaxNodeAnalysisContext> AccessorListAction = HandleAccessorList;
83+
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
84+
private static readonly Action<SyntaxNodeAnalysisContext> SwitchStatementAction = HandleSwitchStatement;
85+
private static readonly Action<SyntaxNodeAnalysisContext> InitializerExpressionAction = HandleInitializerExpression;
86+
private static readonly Action<SyntaxNodeAnalysisContext> AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression;
7787

7888
/// <inheritdoc/>
7989
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -87,55 +97,52 @@ public override void Initialize(AnalysisContext context)
8797

8898
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
8999
{
90-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclarationSyntax, SyntaxKind.NamespaceDeclaration);
91-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.ClassDeclaration);
92-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.EnumDeclaration);
93-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.InterfaceDeclaration);
94-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclarationSyntax, SyntaxKind.StructDeclaration);
95-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorListSyntax, SyntaxKind.AccessorList);
96-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlockSyntax, SyntaxKind.Block);
97-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatementSyntax, SyntaxKind.SwitchStatement);
98-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpressionSyntax, InitializerExpressionKinds);
99-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreationExpressionSyntax, SyntaxKind.AnonymousObjectCreationExpression);
100+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
101+
context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds);
102+
context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList);
103+
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
104+
context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement);
105+
context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds);
106+
context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression);
100107
}
101108

102-
private static void HandleNamespaceDeclarationSyntax(SyntaxNodeAnalysisContext context)
109+
private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context)
103110
{
104111
var syntax = (NamespaceDeclarationSyntax)context.Node;
105112
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
106113
}
107114

108-
private static void HandleBaseTypeDeclarationSyntax(SyntaxNodeAnalysisContext context)
115+
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
109116
{
110117
var syntax = (BaseTypeDeclarationSyntax)context.Node;
111118
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
112119
}
113120

114-
private static void HandleAccessorListSyntax(SyntaxNodeAnalysisContext context)
121+
private static void HandleAccessorList(SyntaxNodeAnalysisContext context)
115122
{
116123
var syntax = (AccessorListSyntax)context.Node;
117124
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
118125
}
119126

120-
private static void HandleBlockSyntax(SyntaxNodeAnalysisContext context)
127+
private static void HandleBlock(SyntaxNodeAnalysisContext context)
121128
{
122129
var syntax = (BlockSyntax)context.Node;
123130
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
124131
}
125132

126-
private static void HandleSwitchStatementSyntax(SyntaxNodeAnalysisContext context)
133+
private static void HandleSwitchStatement(SyntaxNodeAnalysisContext context)
127134
{
128135
var syntax = (SwitchStatementSyntax)context.Node;
129136
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
130137
}
131138

132-
private static void HandleInitializerExpressionSyntax(SyntaxNodeAnalysisContext context)
139+
private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context)
133140
{
134141
var syntax = (InitializerExpressionSyntax)context.Node;
135142
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);
136143
}
137144

138-
private static void HandleAnonymousObjectCreationExpressionSyntax(SyntaxNodeAnalysisContext context)
145+
private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context)
139146
{
140147
var syntax = (AnonymousObjectCreationExpressionSyntax)context.Node;
141148
CheckCurlyBraces(context, syntax.OpenBraceToken, syntax.CloseBraceToken);

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ internal class SA1502ElementMustNotBeOnASingleLine : DiagnosticAnalyzer
6161
ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DestructorDeclaration);
6262

6363
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
64+
private static readonly Action<SyntaxNodeAnalysisContext> BaseTypeDeclarationAction = HandleBaseTypeDeclaration;
65+
private static readonly Action<SyntaxNodeAnalysisContext> BasePropertyDeclarationAction = HandleBasePropertyDeclaration;
66+
private static readonly Action<SyntaxNodeAnalysisContext> BaseMethodDeclarationAction = HandleBaseMethodDeclaration;
67+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
6468

6569
/// <inheritdoc/>
6670
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -74,10 +78,10 @@ public override void Initialize(AnalysisContext context)
7478

7579
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7680
{
77-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
78-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBasePropertyDeclaration, BasePropertyDeclarationKinds);
79-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseMethodDeclaration, BaseMethodDeclarationKinds);
80-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
81+
context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds);
82+
context.RegisterSyntaxNodeActionHonorExclusions(BasePropertyDeclarationAction, BasePropertyDeclarationKinds);
83+
context.RegisterSyntaxNodeActionHonorExclusions(BaseMethodDeclarationAction, BaseMethodDeclarationKinds);
84+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
8185
}
8286

8387
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1504AllAccessorsMustBeSingleLineOrMultiLine.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ internal class SA1504AllAccessorsMustBeSingleLineOrMultiLine : DiagnosticAnalyze
7676
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
7777

7878
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
79+
private static readonly Action<SyntaxNodeAnalysisContext> AccessorListAction = HandleAccessorList;
7980

8081
/// <inheritdoc/>
8182
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -89,10 +90,10 @@ public override void Initialize(AnalysisContext context)
8990

9091
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
9192
{
92-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorListDeclaration, SyntaxKind.AccessorList);
93+
context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList);
9394
}
9495

95-
private static void HandleAccessorListDeclaration(SyntaxNodeAnalysisContext context)
96+
private static void HandleAccessorList(SyntaxNodeAnalysisContext context)
9697
{
9798
var accessorList = (AccessorListSyntax)context.Node;
9899

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ internal class SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine : Diagnost
6161
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
6262

6363
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
64+
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
65+
private static readonly Action<SyntaxNodeAnalysisContext> InitializerExpressionAction = HandleInitializerExpression;
66+
private static readonly Action<SyntaxNodeAnalysisContext> AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression;
67+
private static readonly Action<SyntaxNodeAnalysisContext> SwitchStatementAction = HandleSwitchStatement;
68+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
69+
private static readonly Action<SyntaxNodeAnalysisContext> BaseTypeDeclarationAction = HandleBaseTypeDeclaration;
70+
private static readonly Action<SyntaxNodeAnalysisContext> AccessorListAction = HandleAccessorList;
6471

6572
/// <inheritdoc/>
6673
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -74,13 +81,13 @@ public override void Initialize(AnalysisContext context)
7481

7582
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7683
{
77-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
78-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
79-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
80-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
81-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
82-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
83-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
84+
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
85+
context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds);
86+
context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression);
87+
context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement);
88+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
89+
context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds);
90+
context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList);
8491
}
8592

8693
private static void HandleBlock(SyntaxNodeAnalysisContext context)
@@ -95,7 +102,7 @@ private static void HandleInitializerExpression(SyntaxNodeAnalysisContext contex
95102
AnalyzeOpenBrace(context, expression.OpenBraceToken);
96103
}
97104

98-
private static void HandleAnonymousObjectCreation(SyntaxNodeAnalysisContext context)
105+
private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context)
99106
{
100107
var expression = (AnonymousObjectCreationExpressionSyntax)context.Node;
101108
AnalyzeOpenBrace(context, expression.OpenBraceToken);

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ internal class SA1506ElementDocumentationHeadersMustNotBeFollowedByBlankLine : D
6767
SyntaxKind.EventFieldDeclaration);
6868

6969
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
70+
private static readonly Action<SyntaxNodeAnalysisContext> DeclarationAction = HandleDeclaration;
7071

7172
/// <inheritdoc/>
7273
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -80,7 +81,7 @@ public override void Initialize(AnalysisContext context)
8081

8182
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
8283
{
83-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, HandledSyntaxKinds);
84+
context.RegisterSyntaxNodeActionHonorExclusions(DeclarationAction, HandledSyntaxKinds);
8485
}
8586

8687
private static void HandleDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/LayoutRules/SA1507CodeMustNotContainMultipleBlankLinesInARow.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ internal class SA1507CodeMustNotContainMultipleBlankLinesInARow : DiagnosticAnal
5454
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5555

5656
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
57+
private static readonly Action<SyntaxTreeAnalysisContext> SyntaxTreeAction = HandleSyntaxTree;
5758

5859
/// <inheritdoc/>
5960
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -67,10 +68,10 @@ public override void Initialize(AnalysisContext context)
6768

6869
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6970
{
70-
context.RegisterSyntaxTreeActionHonorExclusions(HandleSyntaxTreeAnalysis);
71+
context.RegisterSyntaxTreeActionHonorExclusions(SyntaxTreeAction);
7172
}
7273

73-
private static void HandleSyntaxTreeAnalysis(SyntaxTreeAnalysisContext context)
74+
private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
7475
{
7576
SyntaxNode root = context.Tree.GetRoot(context.CancellationToken);
7677
foreach (var token in root.DescendantTokens(descendIntoTrivia: false))

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ internal class SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine : Diagnost
6060
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
6161

6262
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
63+
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
64+
private static readonly Action<SyntaxNodeAnalysisContext> InitializerExpressionAction = HandleInitializerExpression;
65+
private static readonly Action<SyntaxNodeAnalysisContext> AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression;
66+
private static readonly Action<SyntaxNodeAnalysisContext> SwitchStatementAction = HandleSwitchStatement;
67+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
68+
private static readonly Action<SyntaxNodeAnalysisContext> BaseTypeDeclarationAction = HandleBaseTypeDeclaration;
69+
private static readonly Action<SyntaxNodeAnalysisContext> AccessorListAction = HandleAccessorList;
6370

6471
/// <inheritdoc/>
6572
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -73,13 +80,13 @@ public override void Initialize(AnalysisContext context)
7380

7481
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7582
{
76-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
77-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
78-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
79-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
80-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
81-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
82-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
83+
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
84+
context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, InitializerExpressionKinds);
85+
context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression);
86+
context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement);
87+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
88+
context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds);
89+
context.RegisterSyntaxNodeActionHonorExclusions(AccessorListAction, SyntaxKind.AccessorList);
8390
}
8491

8592
private static void HandleBlock(SyntaxNodeAnalysisContext context)
@@ -94,7 +101,7 @@ private static void HandleInitializerExpression(SyntaxNodeAnalysisContext contex
94101
AnalyzeCloseBrace(context, expression.CloseBraceToken);
95102
}
96103

97-
private static void HandleAnonymousObjectCreation(SyntaxNodeAnalysisContext context)
104+
private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context)
98105
{
99106
var expression = (AnonymousObjectCreationExpressionSyntax)context.Node;
100107
AnalyzeCloseBrace(context, expression.CloseBraceToken);

0 commit comments

Comments
 (0)