private static SyntaxNode TryExpandNode(ISyntaxExpander expander, SyntaxNode node, SyntaxNode root, SemanticModel semanticModel, Workspace workspace)
 {
     try {
         return(expander.ExpandNode(node, root, semanticModel, workspace));
     } catch (Exception ex) {
         var warningText = new ExceptionWithNodeInformation(ex, node, "Conversion warning").ToString();
         return(WithWarningAnnotation(node, warningText));
     }
 }
 private static SyntaxNode TryExpandNode(ISyntaxExpander expander, SyntaxNode node, SemanticModel semanticModel, Workspace workspace, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     try {
         return(expander.ExpandNode(node, semanticModel, workspace));
     } catch (Exception ex) {
         var warningText = new ExceptionWithNodeInformation(ex, node, "Conversion warning").ToString();
         return(WithWarningAnnotation(node, warningText));
     }
 }
        private static async Task <Document> ExpandAsync(Document document, ISyntaxExpander expander)
        {
            var semanticModel = await document.GetSemanticModelAsync();

            var workspace = document.Project.Solution.Workspace;
            var root      = await document.GetSyntaxRootAsync();

            try {
                var newRoot = root.ReplaceNodes(root.DescendantNodes(n => expander.ShouldExpandWithinNode(n, root, semanticModel)).Where(n => expander.ShouldExpandNode(n, root, semanticModel)),
                                                (node, rewrittenNode) => TryExpandNode(expander, node, root, semanticModel, workspace)
                                                );
                return(document.WithSyntaxRoot(newRoot));
            } catch (Exception ex) {
                var warningText = "Conversion warning: Qualified name reduction failed for this file. " + ex;
                return(document.WithSyntaxRoot(WithWarningAnnotation(root, warningText)));
            }
        }
    private static async Task <Document> ExpandAsync(Document document, ISyntaxExpander expander, CancellationToken cancellationToken)
    {
        var semanticModel = await document.GetSemanticModelAsync(cancellationToken);

        var workspace = document.Project.Solution.Workspace;
        var root      = await document.GetSyntaxRootAsync(cancellationToken);

        try {
            var filteredNodes = root.DescendantNodes(n => expander.ShouldExpandWithinNode(n, semanticModel))
                                .Where(n => expander.ShouldExpandNode(n, semanticModel));

            var newRoot = root.ReplaceNodes(filteredNodes,
                                            (node, _) => TryExpandNode(expander, node, semanticModel, workspace, cancellationToken)
                                            );

            return(document.WithSyntaxRoot(newRoot));
        } catch (Exception ex) {
            var warningText = "Conversion warning: Name qualification failed for this file. " + ex;
            return(document.WithSyntaxRoot(WithWarningAnnotation(root, warningText)));
        }
    }