@@ -36,7 +36,7 @@ private ProjectConversion(IProjectContentsConverter projectContentsConverter, IE
3636 _returnSelectedNode = returnSelectedNode ;
3737 }
3838
39- public static async Task < ConversionResult > ConvertText < TLanguageConversion > ( string text , TextConversionOptions conversionOptions ) where TLanguageConversion : ILanguageConversion , new ( )
39+ public static async Task < ConversionResult > ConvertText < TLanguageConversion > ( string text , TextConversionOptions conversionOptions , IProgress < ConversionProgress > progress = null ) where TLanguageConversion : ILanguageConversion , new ( )
4040 {
4141 await new SynchronizationContextRemover ( ) ;
4242
@@ -45,11 +45,11 @@ private ProjectConversion(IProjectContentsConverter projectContentsConverter, IE
4545 if ( textSpan . HasValue ) conversionOptions . SelectedTextSpan = textSpan . Value ;
4646 using ( var workspace = new AdhocWorkspace ( ) ) {
4747 var document = languageConversion . CreateProjectDocumentFromTree ( workspace , syntaxTree , conversionOptions . References ) ;
48- return await ConvertSingle < TLanguageConversion > ( document , conversionOptions ) ;
48+ return await ConvertSingle < TLanguageConversion > ( document , conversionOptions , progress ) ;
4949 }
5050 }
5151
52- public static async Task < ConversionResult > ConvertSingle < TLanguageConversion > ( Document document , SingleConversionOptions conversionOptions ) where TLanguageConversion : ILanguageConversion , new ( )
52+ public static async Task < ConversionResult > ConvertSingle < TLanguageConversion > ( Document document , SingleConversionOptions conversionOptions , IProgress < ConversionProgress > progress = null ) where TLanguageConversion : ILanguageConversion , new ( )
5353 {
5454 await new SynchronizationContextRemover ( ) ;
5555
@@ -65,7 +65,7 @@ private ProjectConversion(IProjectContentsConverter projectContentsConverter, IE
6565 document = projectContentsConverter . Project . GetDocument ( document . Id ) ;
6666
6767 var conversion = new ProjectConversion ( projectContentsConverter , new [ ] { document } , languageConversion , returnSelectedNode ) ;
68- var conversionResults = ( await ConvertProjectContents ( conversion , new Progress < ConversionProgress > ( ) ) ) . ToList ( ) ;
68+ var conversionResults = ( await ConvertProjectContents ( conversion , progress ?? new Progress < ConversionProgress > ( ) ) ) . ToList ( ) ;
6969 var codeResult = conversionResults . SingleOrDefault ( x => ! string . IsNullOrWhiteSpace ( x . ConvertedCode ) )
7070 ?? conversionResults . First ( ) ;
7171 codeResult . Exceptions = conversionResults . SelectMany ( x => x . Exceptions ) . ToArray ( ) ;
@@ -207,7 +207,7 @@ private static Action<Exception> ExchangeFatalErrorHandler(Action<Exception> err
207207 if ( firstPassResult . document != null ) {
208208 progress . Report ( firstPassResult . Path ) ;
209209 var ( convertedNode , errors ) = await SingleSecondPassHandled ( firstPassResult . document ) ;
210- return ( firstPassResult . Path , convertedNode , firstPassResult . Errors . Concat ( errors ) . ToArray ( ) ) ;
210+ return ( firstPassResult . Path , convertedNode , firstPassResult . Errors . Concat ( errors ) . Union ( GetErrorsFromAnnotations ( convertedNode ) ) . ToArray ( ) ) ;
211211 }
212212
213213 return ( firstPassResult . Path , null , firstPassResult . Errors ) ;
@@ -236,7 +236,8 @@ private static Action<Exception> ExchangeFatalErrorHandler(Action<Exception> err
236236 errors = new [ ] { e . ToString ( ) } ;
237237 }
238238
239- return ( selectedNode ?? await convertedDocument . GetSyntaxRootAsync ( ) , errors ) ;
239+ var convertedNode = selectedNode ?? await convertedDocument . GetSyntaxRootAsync ( ) ;
240+ return ( convertedNode , errors ) ;
240241 }
241242
242243 private async Task < string > GetProjectWarnings ( Project source , ( string Path , SyntaxNode Node , string [ ] Errors ) [ ] converted )
@@ -254,17 +255,22 @@ private async Task<string> GetProjectWarnings(Project source, (string Path, Synt
254255 progress . Report ( treeFilePath ) ;
255256 try {
256257 var convertedNode = await _projectContentsConverter . SingleFirstPass ( document ) ;
257- var errorAnnotations = convertedNode . GetAnnotations ( AnnotationConstants . ConversionErrorAnnotationKind ) . ToList ( ) ;
258- string [ ] errors = errorAnnotations . Select ( a => a . Data ) . ToArray ( ) ;
258+ string [ ] errors = GetErrorsFromAnnotations ( convertedNode ) ;
259259
260260 return ( treeFilePath , convertedNode , errors ) ;
261- }
262- catch ( Exception e )
261+ } catch ( Exception e )
263262 {
264263 return ( treeFilePath , null , new [ ] { e . ToString ( ) } ) ;
265264 }
266265 }
267266
267+ private static string [ ] GetErrorsFromAnnotations ( SyntaxNode convertedNode )
268+ {
269+ var errorAnnotations = convertedNode . GetAnnotations ( AnnotationConstants . ConversionErrorAnnotationKind ) . ToList ( ) ;
270+ string [ ] errors = errorAnnotations . Select ( a => a . Data ) . ToArray ( ) ;
271+ return errors ;
272+ }
273+
268274 private static async Task < Document > WithAnnotatedSelection ( Document document , TextSpan selected )
269275 {
270276 var root = await document . GetSyntaxRootAsync ( ) ;
0 commit comments