Ejemplo n.º 1
0
        public static SyntaxTree MakeFullCompilationUnit(this ILanguageConversion languageConversion, string code, out TextSpan?textSpan)
        {
            var tree = languageConversion.CreateTree(code);
            var root = tree.GetRoot();

            textSpan = null;
            var rootChildren              = root.ChildNodes().ToList();
            var requiresSurroundingClass  = rootChildren.Any(languageConversion.MustBeContainedByClass);
            var requiresSurroundingMethod = rootChildren.All(languageConversion.CanBeContainedByMethod);

            if (requiresSurroundingMethod || requiresSurroundingClass)
            {
                var text = root.GetText().ToString();
                if (requiresSurroundingMethod)
                {
                    text = languageConversion.WithSurroundingMethod(text);
                }
                text = languageConversion.WithSurroundingClass(text);

                var fullCompilationUnit = languageConversion.CreateTree(text).GetRoot();

                var selectedNode = languageConversion.GetSurroundedNode(fullCompilationUnit.DescendantNodes(), requiresSurroundingMethod);
                tree     = fullCompilationUnit.WithAnnotatedNode(selectedNode, AnnotationConstants.SelectedNodeAnnotationKind, AnnotationConstants.AnnotatedNodeIsParentData);
                textSpan = selectedNode.Span;
            }

            return(tree);
        }
Ejemplo n.º 2
0
 private ProjectConversion(Compilation sourceCompilation, IEnumerable <SyntaxTree> syntaxTreesToConvert, ILanguageConversion languageConversion)
 {
     _languageConversion      = languageConversion;
     this._sourceCompilation  = sourceCompilation;
     _syntaxTreesToConvert    = syntaxTreesToConvert.ToList();
     _handlePartialConversion = _syntaxTreesToConvert.Count() == 1;
 }
Ejemplo n.º 3
0
 private ProjectConversion(Compilation sourceCompilation, IEnumerable <SyntaxTree> syntaxTreesToConvert, ILanguageConversion languageConversion, Compilation convertedCompilation)
 {
     _languageConversion      = languageConversion;
     _sourceCompilation       = sourceCompilation;
     _syntaxTreesToConvert    = syntaxTreesToConvert.ToList();
     _handlePartialConversion = _syntaxTreesToConvert.Count() == 1;
     languageConversion.Initialize(convertedCompilation.RemoveAllSyntaxTrees());
 }
Ejemplo n.º 4
0
 private ProjectConversion(IProjectContentsConverter projectContentsConverter, IEnumerable <Document> documentsToConvert,
                           ILanguageConversion languageConversion, CancellationToken cancellationToken, bool showCompilationErrors, bool returnSelectedNode = false)
 {
     _projectContentsConverter = projectContentsConverter;
     _languageConversion       = languageConversion;
     _documentsToConvert       = documentsToConvert.ToList();
     _showCompilationErrors    = showCompilationErrors;
     _returnSelectedNode       = returnSelectedNode;
     _cancellationToken        = cancellationToken;
 }
    public static SyntaxTree MakeFullCompilationUnit(this ILanguageConversion languageConversion, string code, out TextSpan?textSpan)
    {
        var tree = languageConversion.CreateTree(code);
        var root = tree.GetRoot();

        textSpan = null;

        var rootChildren = root.ChildNodes()
                           //https://github.com/icsharpcode/CodeConverter/issues/825
                           .Select(c => c is GlobalStatementSyntax {
            Statement: var s
        } ? s : c)
Ejemplo n.º 6
0
        public static IEnumerable <ConversionResult> ConvertProjectContents(Project project,
                                                                            ILanguageConversion languageConversion)
        {
            var solutionFilePath  = project.Solution.FilePath;
            var solutionDir       = Path.GetDirectoryName(solutionFilePath);
            var compilation       = project.GetCompilationAsync().GetAwaiter().GetResult();
            var projectConversion = new ProjectConversion(compilation, solutionDir, languageConversion);

            foreach (var conversionResult in ConvertProjectContents(projectConversion))
            {
                yield return(conversionResult);
            }
        }
Ejemplo n.º 7
0
        public static IEnumerable <ConversionResult> ConvertProjectContents(Project project,
                                                                            ILanguageConversion languageConversion)
        {
            var solutionFilePath  = project.Solution.FilePath;
            var solutionDir       = Path.GetDirectoryName(solutionFilePath);
            var compilation       = project.GetCompilationAsync().GetAwaiter().GetResult();
            var projectConversion = new ProjectConversion(compilation, compilation.SyntaxTrees.Where(t => t.FilePath.StartsWith(solutionDir)), languageConversion, GetConvertedCompilationWithProjectReferences(project, languageConversion));

            foreach (var conversionResult in ConvertProjectContents(projectConversion))
            {
                yield return(conversionResult);
            }
        }
Ejemplo n.º 8
0
        private ProjectConversion(IProjectContentsConverter projectContentsConverter, IEnumerable <Document> documentsToConvert, IEnumerable <TextDocument> additionalDocumentsToConvert,
                                  ILanguageConversion languageConversion, CancellationToken cancellationToken)
        {
            _projectContentsConverter     = projectContentsConverter;
            _languageConversion           = languageConversion;
            _documentsToConvert           = documentsToConvert.ToList();
            _additionalDocumentsToConvert = additionalDocumentsToConvert.ToList();
            if (languageConversion.ConversionOptions is SingleConversionOptions singleOptions)
            {
                _returnSelectedNode    = singleOptions.SelectedTextSpan.Length > 0;
                _showCompilationErrors = singleOptions.ShowCompilationErrors;
            }

            _cancellationToken = cancellationToken;
        }
Ejemplo n.º 9
0
        /// <summary>
        /// If the compilation comes from a Project/Workspace, you must specify the <paramref name="containingProject"/>.
        /// Otherwise an error will occur when one or more project references to another project of the same language exist.
        /// </summary>
        public static async Task <ConversionResult> ConvertSingle(Compilation compilation, SyntaxTree syntaxTree, TextSpan selected,
                                                                  ILanguageConversion languageConversion, Project containingProject = null)
        {
            var convertedCompilation = containingProject == null
                ? GetConvertedCompilation(compilation, languageConversion)
                : GetConvertedCompilationWithProjectReferences(containingProject, languageConversion);

            if (selected.Length > 0)
            {
                var annotatedSyntaxTree = await GetSyntaxTreeWithAnnotatedSelection(syntaxTree, selected);

                compilation = compilation.ReplaceSyntaxTree(syntaxTree, annotatedSyntaxTree);
                syntaxTree  = annotatedSyntaxTree;
            }

            var conversion        = new ProjectConversion(compilation, new[] { syntaxTree }, languageConversion, convertedCompilation);
            var conversionResults = ConvertProjectContents(conversion).ToList();
            var codeResult        = conversionResults.SingleOrDefault(x => !string.IsNullOrWhiteSpace(x.ConvertedCode))
                                    ?? conversionResults.First();

            codeResult.Exceptions = conversionResults.SelectMany(x => x.Exceptions).ToArray();
            return(codeResult);
        }
Ejemplo n.º 10
0
 private ProjectConversion(Compilation sourceCompilation, string solutionDir, ILanguageConversion languageConversion)
     : this(sourceCompilation, sourceCompilation.SyntaxTrees.Where(t => t.FilePath.StartsWith(solutionDir)), languageConversion)
 {
     _solutionDir = solutionDir;
 }
Ejemplo n.º 11
0
 public static async IAsyncEnumerable <ConversionResult> ConvertProject(Project project,
                                                                        ILanguageConversion languageConversion, IProgress <ConversionProgress> progress, [EnumeratorCancellation] CancellationToken cancellationToken,
                                                                        params (string Find, string Replace, bool FirstOnly)[] replacements)
Ejemplo n.º 12
0
 public static async Task <IEnumerable <ConversionResult> > ConvertProject(Project project, ILanguageConversion languageConversion,
                                                                           params (string, string)[] replacements)
Ejemplo n.º 13
0
 private static Compilation GetConvertedCompilationWithProjectReferences(Project project, ILanguageConversion languageConversion)
 {
     return(project.Solution.RemoveProject(project.Id)
            .AddProject(project.Id, project.Name, project.AssemblyName, languageConversion.TargetLanguage)
            .GetProject(project.Id)
            .WithProjectReferences(project.AllProjectReferences).WithMetadataReferences(project.MetadataReferences)
            .GetCompilationAsync().GetAwaiter().GetResult());
 }
Ejemplo n.º 14
0
 /// <summary>
 /// If the source compilation has project references to a compilation of the same language, this will fail with an argument exception.
 /// Use <see cref="GetConvertedCompilationWithProjectReferences"/> wherever this is possible.
 /// </summary>
 private static Compilation GetConvertedCompilation(Compilation compilation, ILanguageConversion languageConversion)
 {
     return(languageConversion is VBToCSConversion?CSToVBConversion.CreateCSharpCompilation(compilation.References) : (Compilation)VBToCSConversion.CreateVisualBasicCompilation(compilation.References));
 }