Skip to content

Commit 47380a8

Browse files
authored
Merge pull request #6332 from Youssef1313/patch-22
Move `GetOrCreateTypeByMetadataName` to compilation start
2 parents 8013108 + 3a821da commit 47380a8

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/Runtime/AvoidZeroLengthArrayAllocations.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,26 +50,27 @@ public sealed override void Initialize(AnalysisContext context)
5050

5151
// When compilation begins, check whether Array.Empty<T> is available.
5252
// Only if it is, register the syntax node action provided by the derived implementations.
53-
context.RegisterCompilationStartAction(ctx =>
53+
context.RegisterCompilationStartAction(context =>
5454
{
55-
INamedTypeSymbol typeSymbol = ctx.Compilation.GetSpecialType(SpecialType.System_Array);
55+
INamedTypeSymbol typeSymbol = context.Compilation.GetSpecialType(SpecialType.System_Array);
5656
if (typeSymbol.DeclaredAccessibility == Accessibility.Public)
5757
{
5858
if (typeSymbol.GetMembers(ArrayEmptyMethodName).FirstOrDefault() is IMethodSymbol methodSymbol && methodSymbol.DeclaredAccessibility == Accessibility.Public &&
5959
methodSymbol.IsStatic && methodSymbol.Arity == 1 && methodSymbol.Parameters.IsEmpty)
6060
{
61-
ctx.RegisterOperationAction(c => AnalyzeOperation(c, methodSymbol), OperationKind.ArrayCreation);
61+
var linqExpressionType = context.Compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemLinqExpressionsExpression1);
62+
context.RegisterOperationAction(c => AnalyzeOperation(c, methodSymbol, linqExpressionType), OperationKind.ArrayCreation);
6263
}
6364
}
6465
});
6566
}
6667

67-
private void AnalyzeOperation(OperationAnalysisContext context, IMethodSymbol arrayEmptyMethodSymbol)
68+
private void AnalyzeOperation(OperationAnalysisContext context, IMethodSymbol arrayEmptyMethodSymbol, INamedTypeSymbol? linqExpressionType)
6869
{
69-
AnalyzeOperation(context, arrayEmptyMethodSymbol, IsAttributeSyntax);
70+
AnalyzeOperation(context, arrayEmptyMethodSymbol, linqExpressionType, IsAttributeSyntax);
7071
}
7172

72-
private static void AnalyzeOperation(OperationAnalysisContext context, IMethodSymbol arrayEmptyMethodSymbol, Func<SyntaxNode, bool> isAttributeSyntax)
73+
private static void AnalyzeOperation(OperationAnalysisContext context, IMethodSymbol arrayEmptyMethodSymbol, INamedTypeSymbol? linqExpressionType, Func<SyntaxNode, bool> isAttributeSyntax)
7374
{
7475
IArrayCreationOperation arrayCreationExpression = (IArrayCreationOperation)context.Operation;
7576

@@ -80,7 +81,6 @@ private static void AnalyzeOperation(OperationAnalysisContext context, IMethodSy
8081
return;
8182
}
8283

83-
var linqExpressionType = context.Compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemLinqExpressionsExpression1);
8484
if (arrayCreationExpression.IsWithinExpressionTree(linqExpressionType))
8585
{
8686
return;

0 commit comments

Comments
 (0)