private async Task <Document> AwaitLocalVariable(Document document, VariableDeclaratorSyntax variableDeclaration, CancellationToken cancellationToken) { var oldValue = variableDeclaration.Initializer.Value; var awaitExp = SyntaxFactory.AwaitExpression(oldValue); var newInitializer = variableDeclaration.Initializer .WithValue(awaitExp); var methodDecl = variableDeclaration.GetParentOfType <MethodDeclarationSyntax>(); var newMethodDecl = methodDecl.ReplaceNode(variableDeclaration.Initializer, newInitializer); var asyncToken = newMethodDecl.ChildTokens().SingleOrDefault(t => t.IsKind(SyntaxKind.AsyncKeyword)); if (asyncToken.IsKind(SyntaxKind.None)) { newMethodDecl = newMethodDecl.AddModifiers(SyntaxFactory.Token(SyntaxKind.AsyncKeyword)); } var root = await document.GetSyntaxRootAsync(cancellationToken); var newRoot = root.ReplaceNode(methodDecl, newMethodDecl); return(document.WithSyntaxRoot(newRoot)); }