public static async Task <SyntaxNode> ConvertCompilationTree(Document document, CSharpCompilation csharpViewOfVbSymbols, Project csharpReferenceProject) { document = await document.WithExpandedRootAsync(); var root = await document.GetSyntaxRootAsync() as VBSyntax.CompilationUnitSyntax ?? throw new InvalidOperationException(NullRootError(document)); var compilation = await document.Project.GetCompilationAsync(); var tree = await document.GetSyntaxTreeAsync(); var csSyntaxGenerator = SyntaxGenerator.GetGenerator(csharpReferenceProject); var semanticModel = compilation.GetSemanticModel(tree, true); var visualBasicSyntaxVisitor = new DeclarationNodeVisitor(document, compilation, semanticModel, csharpViewOfVbSymbols, csSyntaxGenerator); var converted = (CSS.CompilationUnitSyntax) await root.AcceptAsync(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor); try { converted = (CSS.CompilationUnitSyntax)Formatter.Format(converted, document.Project.Solution.Workspace); return(LineTriviaMapper.MapSourceTriviaToTarget(root, converted)); } catch (Exception) { //TODO log return(converted); } }
public static async Task <SyntaxNode> ConvertCompilationTree(Document document, CSharpCompilation csharpViewOfVbSymbols, Project csharpReferenceProject, CancellationToken cancellationToken) { document = await document.WithExpandedRootAsync(cancellationToken); var root = await document.GetSyntaxRootAsync(cancellationToken) as VBSyntax.CompilationUnitSyntax ?? throw new InvalidOperationException(NullRootError(document)); var compilation = await document.Project.GetCompilationAsync(cancellationToken); var tree = await document.GetSyntaxTreeAsync(cancellationToken); var csSyntaxGenerator = SyntaxGenerator.GetGenerator(csharpReferenceProject); var semanticModel = compilation.GetSemanticModel(tree, true); var visualBasicSyntaxVisitor = new DeclarationNodeVisitor(document, compilation, semanticModel, csharpViewOfVbSymbols, csSyntaxGenerator); var converted = (CSS.CompilationUnitSyntax) await root.AcceptAsync(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor); try { // This call is very expensive for large documents. Should look for a more performant version, e.g. Is NormalizeWhitespace good enough? converted = (CSS.CompilationUnitSyntax)Formatter.Format(converted, document.Project.Solution.Workspace, cancellationToken: cancellationToken); return(LineTriviaMapper.MapSourceTriviaToTarget(root, converted)); } catch (Exception) { //TODO log return(converted); } }
public static async Task <SyntaxNode> ConvertCompilationTree(Document document, CSharpCompilation csharpViewOfVbSymbols, Project csharpReferenceProject) { var compilation = await document.Project.GetCompilationAsync(); var tree = await document.GetSyntaxTreeAsync(); var semanticModel = compilation.GetSemanticModel(tree, true); var root = (VBasic.VisualBasicSyntaxNode) await document.GetSyntaxRootAsync(); var csSyntaxGenerator = SyntaxGenerator.GetGenerator(csharpReferenceProject); var visualBasicSyntaxVisitor = new DeclarationNodeVisitor(document, compilation, semanticModel, csharpViewOfVbSymbols, csSyntaxGenerator); return(await root.Accept(visualBasicSyntaxVisitor.TriviaConvertingVisitor)); }
public static async Task <SyntaxNode> ConvertCompilationTreeAsync(Document document, CSharpCompilation csharpViewOfVbSymbols, Project csharpReferenceProject, OptionalOperations optionalOperations, CancellationToken cancellationToken) { document = await document.WithExpandedRootAsync(cancellationToken); var root = await document.GetSyntaxRootAsync(cancellationToken) as VBSyntax.CompilationUnitSyntax ?? throw new InvalidOperationException(NullRootError(document)); var compilation = await document.Project.GetCompilationAsync(cancellationToken); var tree = await document.GetSyntaxTreeAsync(cancellationToken); var csSyntaxGenerator = SyntaxGenerator.GetGenerator(csharpReferenceProject); var semanticModel = compilation.GetSemanticModel(tree, true); var visualBasicSyntaxVisitor = new DeclarationNodeVisitor(document, compilation, semanticModel, csharpViewOfVbSymbols, csSyntaxGenerator); var converted = (CSS.CompilationUnitSyntax) await root.AcceptAsync(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor); return(optionalOperations.MapSourceTriviaToTargetHandled(root, converted, document)); }