Skip to content

Commit d83432e

Browse files
perf: use static Func to prevent unwanted closures
1 parent b3b3acb commit d83432e

File tree

2 files changed

+41
-14
lines changed

2 files changed

+41
-14
lines changed

Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BaseMethodDeclaration.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context)
2727
TypeSyntax? returnType = null;
2828
ExplicitInterfaceSpecifierSyntax? explicitInterfaceSpecifier = null;
2929
TypeParameterListSyntax? typeParameterList = null;
30-
Func<Doc>? identifier = null;
30+
Func<CSharpSyntaxNode, PrintingContext, Doc>? identifier = null;
3131
SyntaxList<TypeParameterConstraintClauseSyntax>? constraintClauses = null;
3232
ParameterListSyntax? parameterList = null;
3333
ConstructorInitializerSyntax? constructorInitializer = null;
@@ -46,21 +46,32 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context)
4646
{
4747
returnType = methodDeclarationSyntax.ReturnType;
4848
explicitInterfaceSpecifier = methodDeclarationSyntax.ExplicitInterfaceSpecifier;
49-
identifier = () => Token.Print(methodDeclarationSyntax.Identifier, context);
49+
identifier = static (node, context) =>
50+
{
51+
var methodDeclarationSyntax = node as MethodDeclarationSyntax;
52+
return Token.Print(methodDeclarationSyntax.Identifier, context);
53+
};
5054
typeParameterList = methodDeclarationSyntax.TypeParameterList;
5155
constraintClauses = methodDeclarationSyntax.ConstraintClauses;
5256
}
53-
else if (node is DestructorDeclarationSyntax destructorDeclarationSyntax)
57+
else if (node is DestructorDeclarationSyntax)
5458
{
55-
identifier = () =>
56-
Doc.Concat(
59+
identifier = static (node, context) =>
60+
{
61+
var destructorDeclarationSyntax = (DestructorDeclarationSyntax)node;
62+
return Doc.Concat(
5763
Token.Print(destructorDeclarationSyntax.TildeToken, context),
5864
Token.Print(destructorDeclarationSyntax.Identifier, context)
5965
);
66+
};
6067
}
6168
else if (node is ConstructorDeclarationSyntax constructorDeclarationSyntax)
6269
{
63-
identifier = () => Token.Print(constructorDeclarationSyntax.Identifier, context);
70+
identifier = static (node, context) =>
71+
{
72+
var constructorDeclarationSyntax = (ConstructorDeclarationSyntax)node;
73+
return Token.Print(constructorDeclarationSyntax.Identifier, context);
74+
};
6475
constructorInitializer = constructorDeclarationSyntax.Initializer;
6576
}
6677

@@ -71,7 +82,11 @@ public static Doc Print(CSharpSyntaxNode node, PrintingContext context)
7182
attributeLists = localFunctionStatementSyntax.AttributeLists;
7283
modifiers = localFunctionStatementSyntax.Modifiers;
7384
returnType = localFunctionStatementSyntax.ReturnType;
74-
identifier = () => Token.Print(localFunctionStatementSyntax.Identifier, context);
85+
identifier = static (node, context) =>
86+
{
87+
var localFunctionStatementSyntax = (LocalFunctionStatementSyntax)node;
88+
return Token.Print(localFunctionStatementSyntax.Identifier, context);
89+
};
7590
typeParameterList = localFunctionStatementSyntax.TypeParameterList;
7691
parameterList = localFunctionStatementSyntax.ParameterList;
7792
constraintClauses = localFunctionStatementSyntax.ConstraintClauses;
@@ -163,7 +178,7 @@ void PrintMethodUnformattedWithoutAttributes(SyntaxTriviaList syntaxTriviaList)
163178

164179
if (identifier != null)
165180
{
166-
declarationGroup.Add(identifier());
181+
declarationGroup.Add(identifier(node, context));
167182
}
168183

169184
if (node is ConversionOperatorDeclarationSyntax conversionOperatorDeclarationSyntax)

Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/BasePropertyDeclaration.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont
1111
{
1212
EqualsValueClauseSyntax? initializer = null;
1313
ExplicitInterfaceSpecifierSyntax? explicitInterfaceSpecifierSyntax = null;
14-
Func<Doc>? identifier = null;
14+
Func<SyntaxNode, PrintingContext, Doc>? identifier = null;
1515
Doc eventKeyword = Doc.Null;
1616
ArrowExpressionClauseSyntax? expressionBody = null;
1717
SyntaxToken? semicolonToken = null;
@@ -21,25 +21,37 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont
2121
expressionBody = propertyDeclarationSyntax.ExpressionBody;
2222
initializer = propertyDeclarationSyntax.Initializer;
2323
explicitInterfaceSpecifierSyntax = propertyDeclarationSyntax.ExplicitInterfaceSpecifier;
24-
identifier = () => Token.Print(propertyDeclarationSyntax.Identifier, context);
24+
identifier = static (node, context) =>
25+
{
26+
var propertyDeclarationSyntax = (PropertyDeclarationSyntax)node;
27+
return Token.Print(propertyDeclarationSyntax.Identifier, context);
28+
};
2529
semicolonToken = propertyDeclarationSyntax.SemicolonToken;
2630
}
2731
else if (node is IndexerDeclarationSyntax indexerDeclarationSyntax)
2832
{
2933
expressionBody = indexerDeclarationSyntax.ExpressionBody;
3034
explicitInterfaceSpecifierSyntax = indexerDeclarationSyntax.ExplicitInterfaceSpecifier;
31-
identifier = () =>
32-
Doc.Concat(
35+
identifier = static (node, context) =>
36+
{
37+
var indexerDeclarationSyntax = (IndexerDeclarationSyntax)node;
38+
return Doc.Concat(
3339
Token.Print(indexerDeclarationSyntax.ThisKeyword, context),
3440
Node.Print(indexerDeclarationSyntax.ParameterList, context)
3541
);
42+
};
43+
3644
semicolonToken = indexerDeclarationSyntax.SemicolonToken;
3745
}
3846
else if (node is EventDeclarationSyntax eventDeclarationSyntax)
3947
{
4048
eventKeyword = Token.PrintWithSuffix(eventDeclarationSyntax.EventKeyword, " ", context);
4149
explicitInterfaceSpecifierSyntax = eventDeclarationSyntax.ExplicitInterfaceSpecifier;
42-
identifier = () => Token.Print(eventDeclarationSyntax.Identifier, context);
50+
identifier = static (node, context) =>
51+
{
52+
var eventDeclarationSyntax = (EventDeclarationSyntax)node;
53+
return Token.Print(eventDeclarationSyntax.Identifier, context);
54+
};
4355
semicolonToken = eventDeclarationSyntax.SemicolonToken;
4456
}
4557

@@ -56,7 +68,7 @@ public static Doc Print(BasePropertyDeclarationSyntax node, PrintingContext cont
5668
Token.Print(explicitInterfaceSpecifierSyntax.DotToken, context)
5769
)
5870
: Doc.Null,
59-
identifier != null ? identifier() : Doc.Null,
71+
identifier != null ? identifier(node, context) : Doc.Null,
6072
Contents(node, expressionBody, context),
6173
initializer != null ? EqualsValueClause.Print(initializer, context) : Doc.Null,
6274
semicolonToken.HasValue ? Token.Print(semicolonToken.Value, context) : Doc.Null

0 commit comments

Comments
 (0)