Skip to content

Commit 3bef7eb

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

18 files changed

Lines changed: 70 additions & 36 deletions

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1200UsingDirectivesMustBePlacedWithinNamespace.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ internal class SA1200UsingDirectivesMustBePlacedWithinNamespace : DiagnosticAnal
164164
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
165165

166166
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
167+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
167168

168169
/// <inheritdoc/>
169170
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -177,10 +178,10 @@ public override void Initialize(AnalysisContext context)
177178

178179
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
179180
{
180-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnitSyntax, SyntaxKind.CompilationUnit);
181+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
181182
}
182183

183-
private static void HandleCompilationUnitSyntax(SyntaxNodeAnalysisContext context)
184+
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
184185
{
185186
CompilationUnitSyntax syntax = (CompilationUnitSyntax)context.Node;
186187

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1201ElementsMustAppearInTheCorrectOrder.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ internal class SA1201ElementsMustAppearInTheCorrectOrder : DiagnosticAnalyzer
118118
private static readonly DiagnosticDescriptor Descriptor =
119119
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
120120

121+
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
122+
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
123+
121124
// extern alias and usings are missing here because the compiler itself is enforcing the right order.
122125
private static readonly ImmutableArray<SyntaxKind> OuterOrder = ImmutableArray.Create(
123126
SyntaxKind.NamespaceDeclaration,
@@ -166,6 +169,9 @@ internal class SA1201ElementsMustAppearInTheCorrectOrder : DiagnosticAnalyzer
166169
};
167170

168171
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
172+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
173+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
174+
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
169175

170176
/// <inheritdoc/>
171177
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -179,11 +185,9 @@ public override void Initialize(AnalysisContext context)
179185

180186
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
181187
{
182-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
183-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
184-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
185-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.StructDeclaration);
186-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.InterfaceDeclaration);
188+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
189+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
190+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
187191
}
188192

189193
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ internal class SA1202ElementsMustBeOrderedByAccess : DiagnosticAnalyzer
7171
};
7272

7373
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
74+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
75+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
76+
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
7477

7578
/// <inheritdoc/>
7679
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -84,9 +87,9 @@ public override void Initialize(AnalysisContext context)
8487

8588
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
8689
{
87-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
88-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
89-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
90+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
91+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
92+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
9093
}
9194

9295
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1203ConstantsMustAppearBeforeFields.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ internal class SA1203ConstantsMustAppearBeforeFields : DiagnosticAnalyzer
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;
41+
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
3842

3943
/// <inheritdoc/>
4044
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -48,8 +52,7 @@ public override void Initialize(AnalysisContext context)
4852

4953
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5054
{
51-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration);
52-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.StructDeclaration);
55+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
5356
}
5457

5558
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ internal class SA1204StaticElementsMustAppearBeforeInstanceElements : Diagnostic
4141
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration);
4242

4343
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
44+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
45+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
46+
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
4447

4548
private static readonly Dictionary<SyntaxKind, string> MemberNames = new Dictionary<SyntaxKind, string>
4649
{
@@ -71,9 +74,9 @@ public override void Initialize(AnalysisContext context)
7174

7275
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
7376
{
74-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
75-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
76-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDelcaration, TypeDeclarationKinds);
77+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
78+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
79+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
7780
}
7881

7982
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
@@ -90,7 +93,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context
9093
HandleMemberList(context, compilationUnit.Members, AccessLevel.Internal);
9194
}
9295

93-
private static void HandleTypeDelcaration(SyntaxNodeAnalysisContext context)
96+
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
9497
{
9598
var typeDeclaration = (TypeDeclarationSyntax)context.Node;
9699

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal class SA1205PartialElementsMustDeclareAccess : DiagnosticAnalyzer
3737
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
3838

3939
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
40+
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
4041

4142
/// <inheritdoc/>
4243
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -50,7 +51,7 @@ public override void Initialize(AnalysisContext context)
5051

5152
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5253
{
53-
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, TypeDeclarationKinds);
54+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
5455
}
5556

5657
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1206DeclarationKeywordsMustFollowOrder.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ internal class SA1206DeclarationKeywordsMustFollowOrder : DiagnosticAnalyzer
6262
SyntaxKind.ConstructorDeclaration);
6363

6464
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
65+
private static readonly Action<SyntaxNodeAnalysisContext> DeclarationAction = HandleDeclaration;
6566

6667
/// <summary>
6768
/// Represents modifier type for implementing SA1206 rule
@@ -101,7 +102,7 @@ public override void Initialize(AnalysisContext context)
101102

102103
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
103104
{
104-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, HandledSyntaxKinds);
105+
context.RegisterSyntaxNodeActionHonorExclusions(DeclarationAction, HandledSyntaxKinds);
105106
}
106107

107108
private static void HandleDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1207ProtectedMustComeBeforeInternal.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ internal class SA1207ProtectedMustComeBeforeInternal : DiagnosticAnalyzer
5050
SyntaxKind.StructDeclaration);
5151

5252
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
53+
private static readonly Action<SyntaxNodeAnalysisContext> DeclarationAction = HandleDeclaration;
5354

5455
/// <inheritdoc/>
5556
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -63,7 +64,7 @@ public override void Initialize(AnalysisContext context)
6364

6465
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6566
{
66-
context.RegisterSyntaxNodeActionHonorExclusions(HandleDeclaration, HandledSyntaxKinds);
67+
context.RegisterSyntaxNodeActionHonorExclusions(DeclarationAction, HandledSyntaxKinds);
6768
}
6869

6970
private static void HandleDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1208SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ internal class SA1208SystemUsingDirectivesMustBePlacedBeforeOtherUsingDirectives
3838
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3939

4040
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
41+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
42+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
4143

4244
/// <inheritdoc/>
4345
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -51,8 +53,8 @@ public override void Initialize(AnalysisContext context)
5153

5254
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5355
{
54-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
55-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
56+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
57+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
5658
}
5759

5860
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1209UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ internal class SA1209UsingAliasDirectivesMustBePlacedAfterOtherUsingDirectives :
3737
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
3838

3939
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
40+
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
41+
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
4042

4143
/// <inheritdoc/>
4244
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -50,8 +52,8 @@ public override void Initialize(AnalysisContext context)
5052

5153
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
5254
{
53-
context.RegisterSyntaxNodeActionHonorExclusions(HandleCompilationUnit, SyntaxKind.CompilationUnit);
54-
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
55+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
56+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
5557
}
5658

5759
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)

0 commit comments

Comments
 (0)