in ClrHeapAllocationsAnalyzer/DisplayClassAllocationAnalyzer.cs [27:55]
protected override void AnalyzeNode(SyntaxNodeAnalysisContext context)
{
var node = context.Node;
var semanticModel = context.SemanticModel;
var cancellationToken = context.CancellationToken;
Action<Diagnostic> reportDiagnostic = context.ReportDiagnostic;
var anonExpr = node as AnonymousMethodExpressionSyntax;
if (anonExpr?.Block?.ChildNodes() != null && anonExpr.Block.ChildNodes().Any())
{
GenericMethodCheck(semanticModel, node, anonExpr.DelegateKeyword.GetLocation(), reportDiagnostic, cancellationToken);
ClosureCaptureDataFlowAnalysis(semanticModel.AnalyzeDataFlow(anonExpr.Block.ChildNodes().First(), anonExpr.Block.ChildNodes().Last()), reportDiagnostic, anonExpr.DelegateKeyword.GetLocation());
return;
}
if (node is SimpleLambdaExpressionSyntax lambdaExpr)
{
GenericMethodCheck(semanticModel, node, lambdaExpr.ArrowToken.GetLocation(), reportDiagnostic, cancellationToken);
ClosureCaptureDataFlowAnalysis(semanticModel.AnalyzeDataFlow(lambdaExpr), reportDiagnostic, lambdaExpr.ArrowToken.GetLocation());
return;
}
if (node is ParenthesizedLambdaExpressionSyntax parenLambdaExpr)
{
GenericMethodCheck(semanticModel, node, parenLambdaExpr.ArrowToken.GetLocation(), reportDiagnostic, cancellationToken);
ClosureCaptureDataFlowAnalysis(semanticModel.AnalyzeDataFlow(parenLambdaExpr), reportDiagnostic, parenLambdaExpr.ArrowToken.GetLocation());
return;
}
}