예제 #1
0
        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);
            }
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }