提交 e8735a8f 编写于 作者: A Allison Chou

Refactored

上级 8702af11
...@@ -466,13 +466,9 @@ protected override TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNod ...@@ -466,13 +466,9 @@ protected override TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNod
CodeGenerationOptions options, CodeGenerationOptions options,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
if (destinationMember is MemberDeclarationSyntax memberDeclaration) if (destinationMember is MemberDeclarationSyntax || destinationMember is LocalFunctionStatementSyntax)
{
return AddStatementsToMemberDeclaration<TDeclarationNode>(destinationMember, statements, memberDeclaration);
}
else if (destinationMember is LocalFunctionStatementSyntax localFunctionDeclaration)
{ {
return AddStatementsToLocalFunction<TDeclarationNode>(destinationMember, statements, localFunctionDeclaration); return AddStatementsToMemberOrLocalFunctionDeclaration<TDeclarationNode>(destinationMember, statements);
} }
else else
{ {
...@@ -520,34 +516,44 @@ protected override TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNod ...@@ -520,34 +516,44 @@ protected override TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNod
throw new ArgumentException(CSharpWorkspaceResources.No_available_location_found_to_add_statements_to); throw new ArgumentException(CSharpWorkspaceResources.No_available_location_found_to_add_statements_to);
} }
private static TDeclarationNode AddStatementsToMemberDeclaration<TDeclarationNode>(TDeclarationNode destinationMember, IEnumerable<SyntaxNode> statements, MemberDeclarationSyntax memberDeclaration) where TDeclarationNode : SyntaxNode private static TDeclarationNode AddStatementsToMemberOrLocalFunctionDeclaration<TDeclarationNode>(TDeclarationNode destinationMember, IEnumerable<SyntaxNode> statements) where TDeclarationNode : SyntaxNode
{ {
var body = memberDeclaration.GetBody(); if (destinationMember is MemberDeclarationSyntax memberDeclaration)
if (body == null)
{ {
return destinationMember; var finalBody = GetFinalBody(memberDeclaration.GetBody(), statements);
} if (finalBody == null)
{
var statementNodes = body.Statements.ToList(); return destinationMember;
statementNodes.AddRange(StatementGenerator.GenerateStatements(statements)); }
var finalBody = body.WithStatements(SyntaxFactory.List<StatementSyntax>(statementNodes)); var finalMember = memberDeclaration.WithBody(finalBody);
var finalMember = memberDeclaration.WithBody(finalBody); return Cast<TDeclarationNode>(finalMember);
}
else
{
var localFunctionDeclaration = Cast<LocalFunctionStatementSyntax>(destinationMember);
var finalBody = GetFinalBody(localFunctionDeclaration.Body, statements);
if (finalBody == null)
{
return destinationMember;
}
return Cast<TDeclarationNode>(finalMember); var finalMember = localFunctionDeclaration.WithBody(finalBody);
return Cast<TDeclarationNode>(finalMember);
}
} }
private static TDeclarationNode AddStatementsToLocalFunction<TDeclarationNode>(TDeclarationNode destinationMember, IEnumerable<SyntaxNode> statements, LocalFunctionStatementSyntax localFunctionDeclaration) where TDeclarationNode : SyntaxNode private static BlockSyntax GetFinalBody(BlockSyntax body, IEnumerable<SyntaxNode> statements)
{ {
var body = localFunctionDeclaration.Body; if (body == null)
{
return null;
}
var statementNodes = body.Statements.ToList(); var statementNodes = body.Statements.ToList();
statementNodes.AddRange(StatementGenerator.GenerateStatements(statements)); statementNodes.AddRange(StatementGenerator.GenerateStatements(statements));
var finalBody = body.WithStatements(SyntaxFactory.List<StatementSyntax>(statementNodes)); return body.WithStatements(SyntaxFactory.List<StatementSyntax>(statementNodes));
var finalMember = localFunctionDeclaration.WithBody(finalBody);
return Cast<TDeclarationNode>(finalMember);
} }
public override SyntaxNode CreateEventDeclaration( public override SyntaxNode CreateEventDeclaration(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册