Skip to content

Commit

Permalink
Refactor MapActorsHandlersCodeFixProvider logic
Browse files Browse the repository at this point in the history
Simplify handling of createBuilderInvocation and buildInvocation by removing unnecessary nested checks. Improve code readability with clearer conditional blocks. Ensure the document is returned with the modified syntax root after changes.

Signed-off-by: Nils Gruson <[email protected]>
  • Loading branch information
ngruson committed Jan 16, 2025
1 parent e1ae04b commit 6ec8a13
Showing 1 changed file with 60 additions and 79 deletions.
139 changes: 60 additions & 79 deletions src/Dapr.Actors.Analyzers/MapActorsHandlersCodeFixProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,87 +58,68 @@ private async Task<Document> AddMapActorsHandlersAsync(Document document, Diagno
var root = await document.GetSyntaxRootAsync(cancellationToken);
var invocationExpressions = root!.DescendantNodes().OfType<InvocationExpressionSyntax>();

if (invocationExpressions.Any())
{
var createBuilderInvocation = invocationExpressions
.FirstOrDefault(invocation =>
{
return invocation.Expression is MemberAccessExpressionSyntax memberAccess &&
memberAccess.Name.Identifier.Text == "CreateBuilder" &&
memberAccess.Expression is IdentifierNameSyntax identifier &&
identifier.Identifier.Text == "WebApplication";
});

if (createBuilderInvocation != null)
var createBuilderInvocation = invocationExpressions
.FirstOrDefault(invocation =>
{
return invocation.Expression is MemberAccessExpressionSyntax memberAccess &&
memberAccess.Name.Identifier.Text == "CreateBuilder" &&
memberAccess.Expression is IdentifierNameSyntax identifier &&
identifier.Identifier.Text == "WebApplication";
});

var variableDeclarator = createBuilderInvocation
.AncestorsAndSelf()
.OfType<VariableDeclaratorSyntax>()
.FirstOrDefault();

var variableName = variableDeclarator.Identifier.Text;

var buildInvocation = invocationExpressions
.FirstOrDefault(invocation =>
{
var variableDeclarator = createBuilderInvocation
.AncestorsAndSelf()
.OfType<VariableDeclaratorSyntax>()
.FirstOrDefault();

if (variableDeclarator != null)
{
var variableName = variableDeclarator.Identifier.Text;

var buildInvocation = invocationExpressions
.FirstOrDefault(invocation =>
{
return invocation.Expression is MemberAccessExpressionSyntax memberAccess &&
memberAccess.Name.Identifier.Text == "Build" &&
memberAccess.Expression is IdentifierNameSyntax identifier &&
identifier.Identifier.Text == variableName;
});

if (buildInvocation != null)
{
var buildVariableDeclarator = buildInvocation
.AncestorsAndSelf()
.OfType<VariableDeclaratorSyntax>()
.FirstOrDefault();

if (buildVariableDeclarator != null)
{
var buildVariableName = buildVariableDeclarator.Identifier.Text;

var mapActorsHandlersInvocation = SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(buildVariableName),
SyntaxFactory.IdentifierName("MapActorsHandlers"))));

if (buildInvocation.Ancestors().OfType<MethodDeclarationSyntax>().FirstOrDefault() is SyntaxNode parentBlock)
{
var localDeclaration = buildInvocation
.AncestorsAndSelf()
.OfType<LocalDeclarationStatementSyntax>()
.FirstOrDefault();

var newParentBlock = parentBlock.InsertNodesAfter(localDeclaration, new[] { mapActorsHandlersInvocation });
root = root.ReplaceNode(parentBlock, newParentBlock);
}
else
{
var buildInvocationGlobalStatement = buildInvocation
.AncestorsAndSelf()
.OfType<GlobalStatementSyntax>()
.FirstOrDefault();

var compilationUnitSyntax = createBuilderInvocation.Ancestors().OfType<CompilationUnitSyntax>().FirstOrDefault();
var newCompilationUnitSyntax = compilationUnitSyntax.InsertNodesAfter(buildInvocationGlobalStatement,
new[] { SyntaxFactory.GlobalStatement(mapActorsHandlersInvocation) });
root = root.ReplaceNode(compilationUnitSyntax, newCompilationUnitSyntax);
}

return document.WithSyntaxRoot(root);
}
}
}
}

return document;
return invocation.Expression is MemberAccessExpressionSyntax memberAccess &&
memberAccess.Name.Identifier.Text == "Build" &&
memberAccess.Expression is IdentifierNameSyntax identifier &&
identifier.Identifier.Text == variableName;
});

var buildVariableDeclarator = buildInvocation
.AncestorsAndSelf()
.OfType<VariableDeclaratorSyntax>()
.FirstOrDefault();

var buildVariableName = buildVariableDeclarator.Identifier.Text;

var mapActorsHandlersInvocation = SyntaxFactory.ExpressionStatement(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(buildVariableName),
SyntaxFactory.IdentifierName("MapActorsHandlers"))));

if (buildInvocation.Ancestors().OfType<MethodDeclarationSyntax>().FirstOrDefault() is SyntaxNode parentBlock)
{
var localDeclaration = buildInvocation
.AncestorsAndSelf()
.OfType<LocalDeclarationStatementSyntax>()
.FirstOrDefault();

var newParentBlock = parentBlock.InsertNodesAfter(localDeclaration, new[] { mapActorsHandlersInvocation });
root = root.ReplaceNode(parentBlock, newParentBlock);
}
else
{
var buildInvocationGlobalStatement = buildInvocation
.AncestorsAndSelf()
.OfType<GlobalStatementSyntax>()
.FirstOrDefault();

var compilationUnitSyntax = createBuilderInvocation.Ancestors().OfType<CompilationUnitSyntax>().FirstOrDefault();
var newCompilationUnitSyntax = compilationUnitSyntax.InsertNodesAfter(buildInvocationGlobalStatement,
new[] { SyntaxFactory.GlobalStatement(mapActorsHandlersInvocation) });
root = root.ReplaceNode(compilationUnitSyntax, newCompilationUnitSyntax);
}

return document;
return document.WithSyntaxRoot(root);
}
}

0 comments on commit 6ec8a13

Please sign in to comment.