Skip to content

Commit a87b28f

Browse files
committed
Reduce the number of allocations in HandleCompilationStart for readability rules
1 parent 3bef7eb commit a87b28f

27 files changed

Lines changed: 288 additions & 170 deletions

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ internal class SA1100DoNotPrefixCallsWithBaseUnlessLocalImplementationExists : D
6767
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
6868

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

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

8182
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
8283
{
83-
context.RegisterSyntaxNodeActionHonorExclusions(AnalyzeBaseExpression, SyntaxKind.BaseExpression);
84+
context.RegisterSyntaxNodeActionHonorExclusions(BaseExpressionAction, SyntaxKind.BaseExpression);
8485
}
8586

86-
private static void AnalyzeBaseExpression(SyntaxNodeAnalysisContext context)
87+
private static void HandleBaseExpression(SyntaxNodeAnalysisContext context)
8788
{
8889
var baseExpressionSyntax = (BaseExpressionSyntax)context.Node;
8990
var parent = baseExpressionSyntax.Parent;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ internal class SA1101PrefixLocalCallsWithThis : DiagnosticAnalyzer
4949
ImmutableArray.Create(SyntaxKind.IdentifierName, SyntaxKind.GenericName);
5050

5151
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
52+
private static readonly Action<SyntaxNodeAnalysisContext> MemberAccessExpressionAction = HandleMemberAccessExpression;
53+
private static readonly Action<SyntaxNodeAnalysisContext> SimpleNameAction = HandleSimpleName;
5254

5355
/// <inheritdoc/>
5456
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -62,8 +64,8 @@ public override void Initialize(AnalysisContext context)
6264

6365
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6466
{
65-
context.RegisterSyntaxNodeActionHonorExclusions(HandleMemberAccessExpression, SyntaxKind.SimpleMemberAccessExpression);
66-
context.RegisterSyntaxNodeActionHonorExclusions(HandleSimpleName, SimpleNameKinds);
67+
context.RegisterSyntaxNodeActionHonorExclusions(MemberAccessExpressionAction, SyntaxKind.SimpleMemberAccessExpression);
68+
context.RegisterSyntaxNodeActionHonorExclusions(SimpleNameAction, SimpleNameKinds);
6769
}
6870

6971
/// <summary>

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1106CodeMustNotContainEmptyStatements.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ internal class SA1106CodeMustNotContainEmptyStatements : DiagnosticAnalyzer
3232
private static readonly DiagnosticDescriptor Descriptor =
3333
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink, WellKnownDiagnosticTags.Unnecessary);
3434

35+
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
36+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
37+
3538
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
39+
private static readonly Action<SyntaxNodeAnalysisContext> EmptyStatementAction = HandleEmptyStatement;
40+
private static readonly Action<SyntaxNodeAnalysisContext> BaseTypeDeclarationAction = HandleBaseTypeDeclaration;
41+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
3642

3743
/// <inheritdoc/>
3844
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -46,15 +52,12 @@ public override void Initialize(AnalysisContext context)
4652

4753
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
4854
{
49-
context.RegisterSyntaxNodeActionHonorExclusions(HandleEmptyStatementSyntax, SyntaxKind.EmptyStatement);
50-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeSyntax, SyntaxKind.ClassDeclaration);
51-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeSyntax, SyntaxKind.StructDeclaration);
52-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeSyntax, SyntaxKind.InterfaceDeclaration);
53-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeSyntax, SyntaxKind.EnumDeclaration);
54-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceSyntax, SyntaxKind.NamespaceDeclaration);
55+
context.RegisterSyntaxNodeActionHonorExclusions(EmptyStatementAction, SyntaxKind.EmptyStatement);
56+
context.RegisterSyntaxNodeActionHonorExclusions(BaseTypeDeclarationAction, BaseTypeDeclarationKinds);
57+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
5558
}
5659

57-
private static void HandleTypeSyntax(SyntaxNodeAnalysisContext context)
60+
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
5861
{
5962
var declaration = (BaseTypeDeclarationSyntax)context.Node;
6063

@@ -64,7 +67,7 @@ private static void HandleTypeSyntax(SyntaxNodeAnalysisContext context)
6467
}
6568
}
6669

67-
private static void HandleNamespaceSyntax(SyntaxNodeAnalysisContext context)
70+
private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context)
6871
{
6972
var declaration = (NamespaceDeclarationSyntax)context.Node;
7073

@@ -74,7 +77,7 @@ private static void HandleNamespaceSyntax(SyntaxNodeAnalysisContext context)
7477
}
7578
}
7679

77-
private static void HandleEmptyStatementSyntax(SyntaxNodeAnalysisContext context)
80+
private static void HandleEmptyStatement(SyntaxNodeAnalysisContext context)
7881
{
7982
EmptyStatementSyntax syntax = (EmptyStatementSyntax)context.Node;
8083

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1107CodeMustNotContainMultipleStatementsOnOneLine.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ internal class SA1107CodeMustNotContainMultipleStatementsOnOneLine : DiagnosticA
3535
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3636

3737
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
38+
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
3839

3940
/// <inheritdoc/>
4041
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -48,7 +49,7 @@ public override void Initialize(AnalysisContext context)
4849

4950
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5051
{
51-
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
52+
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
5253
}
5354

5455
private static void HandleBlock(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1108BlockStatementsMustNotContainEmbeddedComments.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ internal class SA1108BlockStatementsMustNotContainEmbeddedComments : DiagnosticA
6262
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
6363

6464
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
65+
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
66+
private static readonly Action<SyntaxNodeAnalysisContext> SwitchStatementAction = HandleSwitchStatement;
6567

6668
private static readonly SyntaxKind[] SupportedKinds =
6769
{
@@ -92,11 +94,11 @@ public override void Initialize(AnalysisContext context)
9294

9395
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
9496
{
95-
context.RegisterSyntaxNodeActionHonorExclusions(AnalyzeBlock, SyntaxKind.Block);
96-
context.RegisterSyntaxNodeActionHonorExclusions(AnalyzeSwitch, SyntaxKind.SwitchStatement);
97+
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
98+
context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement);
9799
}
98100

99-
private static void AnalyzeSwitch(SyntaxNodeAnalysisContext context)
101+
private static void HandleSwitchStatement(SyntaxNodeAnalysisContext context)
100102
{
101103
var switchStatement = (SwitchStatementSyntax)context.Node;
102104
var openBraceToken = switchStatement.OpenBraceToken;
@@ -110,7 +112,7 @@ private static void AnalyzeSwitch(SyntaxNodeAnalysisContext context)
110112
FindAllComments(context, previousToken, openBraceToken);
111113
}
112114

113-
private static void AnalyzeBlock(SyntaxNodeAnalysisContext context)
115+
private static void HandleBlock(SyntaxNodeAnalysisContext context)
114116
{
115117
var block = (BlockSyntax)context.Node;
116118
if (!SupportedKinds.Any(block.Parent.IsKind))

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA110xQueryClauses.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ internal class SA110xQueryClauses : DiagnosticAnalyzer
4949
private static readonly string SA1105HelpLink = "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/SA1105.md";
5050

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

5354
/// <summary>
5455
/// Gets the diagnostic descriptor for SA1102.
@@ -94,7 +95,7 @@ public override void Initialize(AnalysisContext context)
9495

9596
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
9697
{
97-
context.RegisterSyntaxNodeActionHonorExclusions(HandleQueryExpression, SyntaxKind.QueryExpression);
98+
context.RegisterSyntaxNodeActionHonorExclusions(QueryExpressionAction, SyntaxKind.QueryExpression);
9899
}
99100

100101
private static void HandleQueryExpression(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1110OpeningParenthesisMustBeOnDeclarationLine.cs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ internal class SA1110OpeningParenthesisMustBeOnDeclarationLine : DiagnosticAnaly
5151
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.ReadabilityRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
5252

5353
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
54+
private static readonly Action<SyntaxNodeAnalysisContext> MethodDeclarationAction = HandleMethodDeclaration;
55+
private static readonly Action<SyntaxNodeAnalysisContext> ConstructorDeclarationAction = HandleConstructorDeclaration;
56+
private static readonly Action<SyntaxNodeAnalysisContext> InvocationExpressionAction = HandleInvocationExpression;
57+
private static readonly Action<SyntaxNodeAnalysisContext> ObjectCreationExpressionAction = HandleObjectCreationExpression;
58+
private static readonly Action<SyntaxNodeAnalysisContext> IndexerDeclarationAction = HandleIndexerDeclaration;
59+
private static readonly Action<SyntaxNodeAnalysisContext> ElementAccessExpressionAction = HandleElementAccessExpression;
60+
private static readonly Action<SyntaxNodeAnalysisContext> AttributeAction = HandleAttribute;
61+
private static readonly Action<SyntaxNodeAnalysisContext> DelegateDeclarationAction = HandleDelegateDeclaration;
62+
private static readonly Action<SyntaxNodeAnalysisContext> AnonymousMethodExpressionAction = HandleAnonymousMethodExpression;
63+
private static readonly Action<SyntaxNodeAnalysisContext> ArrayCreationExpressionAction = HandleArrayCreationExpression;
64+
private static readonly Action<SyntaxNodeAnalysisContext> OperatorDeclarationAction = HandleOperatorDeclaration;
65+
private static readonly Action<SyntaxNodeAnalysisContext> ConversionOperatorDeclarationAction = HandleConversionOperatorDeclaration;
5466

5567
/// <inheritdoc/>
5668
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -64,18 +76,18 @@ public override void Initialize(AnalysisContext context)
6476

6577
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6678
{
67-
context.RegisterSyntaxNodeActionHonorExclusions(HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
68-
context.RegisterSyntaxNodeActionHonorExclusions(HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration);
69-
context.RegisterSyntaxNodeActionHonorExclusions(HandleInvocationExpression, SyntaxKind.InvocationExpression);
70-
context.RegisterSyntaxNodeActionHonorExclusions(HandleObjectCreationExpression, SyntaxKind.ObjectCreationExpression);
71-
context.RegisterSyntaxNodeActionHonorExclusions(HandleIndexerDeclaration, SyntaxKind.IndexerDeclaration);
72-
context.RegisterSyntaxNodeActionHonorExclusions(HandleElementAccessExpression, SyntaxKind.ElementAccessExpression);
73-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAttribute, SyntaxKind.Attribute);
74-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDelegateDeclaration, SyntaxKind.DelegateDeclaration);
75-
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousMethod, SyntaxKind.AnonymousMethodExpression);
76-
context.RegisterSyntaxNodeActionHonorExclusions(HandleArrayCreation, SyntaxKind.ArrayCreationExpression);
77-
context.RegisterSyntaxNodeActionHonorExclusions(HandleOperatorDeclaration, SyntaxKind.OperatorDeclaration);
78-
context.RegisterSyntaxNodeActionHonorExclusions(HandleConversionOperatorDeclaration, SyntaxKind.ConversionOperatorDeclaration);
79+
context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration);
80+
context.RegisterSyntaxNodeActionHonorExclusions(ConstructorDeclarationAction, SyntaxKind.ConstructorDeclaration);
81+
context.RegisterSyntaxNodeActionHonorExclusions(InvocationExpressionAction, SyntaxKind.InvocationExpression);
82+
context.RegisterSyntaxNodeActionHonorExclusions(ObjectCreationExpressionAction, SyntaxKind.ObjectCreationExpression);
83+
context.RegisterSyntaxNodeActionHonorExclusions(IndexerDeclarationAction, SyntaxKind.IndexerDeclaration);
84+
context.RegisterSyntaxNodeActionHonorExclusions(ElementAccessExpressionAction, SyntaxKind.ElementAccessExpression);
85+
context.RegisterSyntaxNodeActionHonorExclusions(AttributeAction, SyntaxKind.Attribute);
86+
context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration);
87+
context.RegisterSyntaxNodeActionHonorExclusions(AnonymousMethodExpressionAction, SyntaxKind.AnonymousMethodExpression);
88+
context.RegisterSyntaxNodeActionHonorExclusions(ArrayCreationExpressionAction, SyntaxKind.ArrayCreationExpression);
89+
context.RegisterSyntaxNodeActionHonorExclusions(OperatorDeclarationAction, SyntaxKind.OperatorDeclaration);
90+
context.RegisterSyntaxNodeActionHonorExclusions(ConversionOperatorDeclarationAction, SyntaxKind.ConversionOperatorDeclaration);
7991
}
8092

8193
private static void HandleConversionOperatorDeclaration(SyntaxNodeAnalysisContext context)
@@ -117,7 +129,7 @@ private static void HandleOperatorDeclaration(SyntaxNodeAnalysisContext context)
117129
}
118130
}
119131

120-
private static void HandleArrayCreation(SyntaxNodeAnalysisContext context)
132+
private static void HandleArrayCreationExpression(SyntaxNodeAnalysisContext context)
121133
{
122134
var array = (ArrayCreationExpressionSyntax)context.Node;
123135

@@ -137,7 +149,7 @@ private static void HandleArrayCreation(SyntaxNodeAnalysisContext context)
137149
}
138150
}
139151

140-
private static void HandleAnonymousMethod(SyntaxNodeAnalysisContext context)
152+
private static void HandleAnonymousMethodExpression(SyntaxNodeAnalysisContext context)
141153
{
142154
var anonymousMethod = (AnonymousMethodExpressionSyntax)context.Node;
143155

0 commit comments

Comments
 (0)