/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Core/Portable/Compilation.EmitStreamProvider.cs
72 строки
3 KB
Jared Parsons
Rationalize how temporary directory works today (#68226)
04 авг 2023, 01:52
Не верифицирован
04 авг 2023, 01:52
bed4560
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Diagnostics; using System.IO; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis { /// <summary> /// The compilation object is an immutable representation of a single invocation of the /// compiler. Although immutable, a compilation is also on-demand, and will realize and cache /// data as necessary. A compilation can produce a new compilation from existing compilation /// with the application of small deltas. In many cases, it is more efficient than creating a /// new compilation from scratch, as the new compilation can reuse information from the old /// compilation. /// </summary> public abstract partial class Compilation { /// <summary> /// Abstraction that allows the caller to delay the creation of the <see cref="Stream"/> values /// until they are actually needed. The <see cref="Stream"/> provided here is owned by /// this type and consumers should not dispose it. /// </summary> internal abstract class EmitStreamProvider { private Stream? _stream; protected EmitStreamProvider(Stream? stream = null) { _stream = stream; } /// <summary> /// This method will be called once during Emit at the time the Compilation needs /// to create a stream for writing. It will not be called in the case of /// user errors in code. Shall not be called when <see cref="Stream"/> returns non-null. /// </summary> protected abstract Stream? CreateStream(DiagnosticBag diagnostics); /// <summary> /// Returns a <see cref="Stream"/>. If one cannot be gotten or created then a diagnostic will /// be added to <paramref name="diagnostics"/> /// </summary> public Stream? GetOrCreateStream(DiagnosticBag diagnostics) { if (_stream is null) { _stream = CreateStream(diagnostics); } return _stream; } } internal sealed class SimpleEmitStreamProvider : EmitStreamProvider { internal SimpleEmitStreamProvider(Stream stream) : base(stream) { RoslynDebug.Assert(stream != null); } protected override Stream CreateStream(DiagnosticBag diagnostics) { throw ExceptionUtilities.Unreachable(); } } } }