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); }
private ProjectConversion(Compilation sourceCompilation, IEnumerable <SyntaxTree> syntaxTreesToConvert, ILanguageConversion languageConversion) { _languageConversion = languageConversion; this._sourceCompilation = sourceCompilation; _syntaxTreesToConvert = syntaxTreesToConvert.ToList(); _handlePartialConversion = _syntaxTreesToConvert.Count() == 1; }
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()); }
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)
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); } }
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); } }
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; }
/// <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); }
private ProjectConversion(Compilation sourceCompilation, string solutionDir, ILanguageConversion languageConversion) : this(sourceCompilation, sourceCompilation.SyntaxTrees.Where(t => t.FilePath.StartsWith(solutionDir)), languageConversion) { _solutionDir = solutionDir; }
public static async IAsyncEnumerable <ConversionResult> ConvertProject(Project project, ILanguageConversion languageConversion, IProgress <ConversionProgress> progress, [EnumeratorCancellation] CancellationToken cancellationToken, params (string Find, string Replace, bool FirstOnly)[] replacements)
public static async Task <IEnumerable <ConversionResult> > ConvertProject(Project project, ILanguageConversion languageConversion, params (string, string)[] replacements)
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()); }
/// <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)); }