Пример #1
0
        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());
            }
        }