Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reduce allocations #1683

Merged
merged 7 commits into from
Oct 24, 2015
Prev Previous commit
Next Next commit
Reduce the number of allocations required to register four syntax kinds
  • Loading branch information
sharwell committed Oct 24, 2015
commit 7487306efdd97896edce786bd96eecdaa2a153d9
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ internal class SA1600ElementsMustBeDocumented : DiagnosticAnalyzer
private static readonly DiagnosticDescriptor Descriptor =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);

private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);

private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;

/// <inheritdoc/>
Expand All @@ -56,12 +59,7 @@ public override void Initialize(AnalysisContext context)
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
Analyzer analyzer = new Analyzer(context.Options);
context.RegisterSyntaxNodeActionHonorExclusions(
analyzer.HandleTypeDeclaration,
SyntaxKind.ClassDeclaration,
SyntaxKind.StructDeclaration,
SyntaxKind.InterfaceDeclaration,
SyntaxKind.EnumDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleMethodDeclaration, SyntaxKind.MethodDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleConstructorDeclaration, SyntaxKind.ConstructorDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(analyzer.HandleDestructorDeclaration, SyntaxKind.DestructorDeclaration);
Expand All @@ -83,7 +81,7 @@ public Analyzer(AnalyzerOptions options)
this.documentationSettings = settings.DocumentationRules;
}

public void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
public void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
{
if (context.GetDocumentationMode() != DocumentationMode.Diagnose)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ internal class SA1611ElementParametersMustBeDocumented : DiagnosticAnalyzer
private static readonly DiagnosticDescriptor Descriptor =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);

private static readonly ImmutableArray<SyntaxKind> HandledSyntaxKinds =
ImmutableArray.Create(SyntaxKind.MethodDeclaration, SyntaxKind.ConstructorDeclaration, SyntaxKind.DelegateDeclaration, SyntaxKind.IndexerDeclaration);

private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
private static readonly Action<SyntaxNodeAnalysisContext> SyntaxNodeAction = HandleSyntaxNode;

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

private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
context.RegisterSyntaxNodeActionHonorExclusions(
SyntaxNodeAction,
SyntaxKind.MethodDeclaration,
SyntaxKind.ConstructorDeclaration,
SyntaxKind.DelegateDeclaration,
SyntaxKind.IndexerDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(SyntaxNodeAction, HandledSyntaxKinds);
}

private static void HandleSyntaxNode(SyntaxNodeAnalysisContext context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ internal class SA1505OpeningCurlyBracketsMustNotBeFollowedByBlankLine : Diagnost
private static readonly DiagnosticDescriptor Descriptor =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);

private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);

private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);

private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;

/// <inheritdoc/>
Expand All @@ -69,11 +75,11 @@ public override void Initialize(AnalysisContext context)
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
}

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

private static void HandleInitializers(SyntaxNodeAnalysisContext context)
private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context)
{
var expression = (InitializerExpressionSyntax)context.Node;
AnalyzeOpenBrace(context, expression.OpenBraceToken);
Expand All @@ -107,7 +113,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context
AnalyzeOpenBrace(context, namespaceDeclaration.OpenBraceToken);
}

private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
{
var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node;
AnalyzeOpenBrace(context, typeDeclaration.OpenBraceToken);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ internal class SA1508ClosingCurlyBracketsMustNotBePrecededByBlankLine : Diagnost
private static readonly DiagnosticDescriptor Descriptor =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.LayoutRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);

private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);

private static readonly ImmutableArray<SyntaxKind> InitializerExpressionKinds =
ImmutableArray.Create(SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);

private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;

/// <inheritdoc/>
Expand All @@ -68,11 +74,11 @@ public override void Initialize(AnalysisContext context)
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
{
context.RegisterSyntaxNodeActionHonorExclusions(HandleBlock, SyntaxKind.Block);
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializers, SyntaxKind.ObjectInitializerExpression, SyntaxKind.CollectionInitializerExpression, SyntaxKind.ArrayInitializerExpression, SyntaxKind.ComplexElementInitializerExpression);
context.RegisterSyntaxNodeActionHonorExclusions(HandleInitializerExpression, InitializerExpressionKinds);
context.RegisterSyntaxNodeActionHonorExclusions(HandleAnonymousObjectCreation, SyntaxKind.AnonymousObjectCreationExpression);
context.RegisterSyntaxNodeActionHonorExclusions(HandleSwitchStatement, SyntaxKind.SwitchStatement);
context.RegisterSyntaxNodeActionHonorExclusions(HandleNamespaceDeclaration, SyntaxKind.NamespaceDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(HandleTypeDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
context.RegisterSyntaxNodeActionHonorExclusions(HandleBaseTypeDeclaration, BaseTypeDeclarationKinds);
context.RegisterSyntaxNodeActionHonorExclusions(HandleAccessorList, SyntaxKind.AccessorList);
}

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

private static void HandleInitializers(SyntaxNodeAnalysisContext context)
private static void HandleInitializerExpression(SyntaxNodeAnalysisContext context)
{
var expression = (InitializerExpressionSyntax)context.Node;
AnalyzeCloseBrace(context, expression.CloseBraceToken);
Expand All @@ -106,7 +112,7 @@ private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context
AnalyzeCloseBrace(context, namespaceDeclaration.CloseBraceToken);
}

private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
private static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
{
var typeDeclaration = (BaseTypeDeclarationSyntax)context.Node;
AnalyzeCloseBrace(context, typeDeclaration.CloseBraceToken);
Expand Down