/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/CSharp/Portable/Serialization/CSharpOptionsSerializationService.cs
75 строк
4 KB
Cyrus Najmabadi
Make sealed
26 мар 2025, 22:21
26 мар 2025, 22:21
d99b771
Код
Авторство
О чём код?
// 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. #nullable disable using System; using System.Composition; using System.Threading; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.Serialization; using Microsoft.CodeAnalysis.Shared.Extensions; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp.Serialization; [ExportLanguageService(typeof(IOptionsSerializationService), LanguageNames.CSharp), Shared] internal sealed class CSharpOptionsSerializationService : AbstractOptionsSerializationService { [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public CSharpOptionsSerializationService() { } public override void WriteTo(CompilationOptions options, ObjectWriter writer, CancellationToken cancellationToken) { WriteCompilationOptionsTo(options, writer, cancellationToken); var csharpOptions = (CSharpCompilationOptions)options; writer.WriteArray(csharpOptions.Usings, static (w, u) => w.WriteString(u)); writer.WriteBoolean(csharpOptions.AllowUnsafe); writer.WriteByte((byte)csharpOptions.NullableContextOptions); } public override void WriteTo(ParseOptions options, ObjectWriter writer) { WriteParseOptionsTo(options, writer); var csharpOptions = (CSharpParseOptions)options; writer.WriteInt32((int)csharpOptions.SpecifiedLanguageVersion); writer.WriteArray(options.PreprocessorSymbolNames.ToImmutableArrayOrEmpty(), static (w, p) => w.WriteString(p)); } public override CompilationOptions ReadCompilationOptionsFrom(ObjectReader reader, CancellationToken cancellationToken) { var (outputKind, reportSuppressedDiagnostics, moduleName, mainTypeName, scriptClassName, optimizationLevel, checkOverflow, cryptoKeyContainer, cryptoKeyFile, cryptoPublicKey, delaySign, platform, generalDiagnosticOption, warningLevel, specificDiagnosticOptions, concurrentBuild, deterministic, publicSign, metadataImportOptions, xmlReferenceResolver, sourceReferenceResolver, metadataReferenceResolver, assemblyIdentityComparer, strongNameProvider) = ReadCompilationOptionsPieces(reader, cancellationToken); var usings = reader.ReadArray(static r => r.ReadString()); var allowUnsafe = reader.ReadBoolean(); var nullableContextOptions = (NullableContextOptions)reader.ReadByte(); return new CSharpCompilationOptions( outputKind, reportSuppressedDiagnostics, moduleName, mainTypeName, scriptClassName, usings, optimizationLevel, checkOverflow, allowUnsafe, cryptoKeyContainer, cryptoKeyFile, cryptoPublicKey, delaySign, platform, generalDiagnosticOption, warningLevel, specificDiagnosticOptions, concurrentBuild, deterministic, xmlReferenceResolver, sourceReferenceResolver, metadataReferenceResolver, assemblyIdentityComparer, strongNameProvider, publicSign, metadataImportOptions, nullableContextOptions); } public override ParseOptions ReadParseOptionsFrom(ObjectReader reader, CancellationToken cancellationToken) { var (kind, documentationMode, features) = ReadParseOptionsPieces(reader, cancellationToken); var languageVersion = (LanguageVersion)reader.ReadInt32(); var preprocessorSymbolNames = reader.ReadArray(static r => r.ReadString()); var options = new CSharpParseOptions(languageVersion, documentationMode, kind, preprocessorSymbolNames); return options.WithFeatures(features); } }