public async Task <object> ProcessAsync(IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken) { if (diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error)) { return(null); } var targetLanguageName = session.GetTargetLanguageName(); var decompiler = _decompilers.FirstOrDefault(d => d.LanguageName == targetLanguageName); if (decompiler == null) { throw new NotSupportedException($"Target '{targetLanguageName}' is not (yet?) supported by this branch."); } using (var stream = _memoryStreamManager.GetStream()) { if (!await TryEmitAssemblyAsync(stream, session, diagnostics, cancellationToken).ConfigureAwait(false)) { return(null); } stream.Seek(0, SeekOrigin.Begin); var resultWriter = new StringWriter(); decompiler.Decompile(stream, resultWriter); return(resultWriter.ToString()); } }