// 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.Runtime.CompilerServices; namespace Microsoft.CodeAnalysis.CodeGeneration; internal sealed class CodeGenerationPropertyInfo { private static readonly ConditionalWeakTable<IPropertySymbol, CodeGenerationPropertyInfo> s_propertyToInfoMap = new(); private readonly bool _isNew; private readonly bool _isUnsafe; private readonly SyntaxNode _initializer; private CodeGenerationPropertyInfo( bool isNew, bool isUnsafe, SyntaxNode initializer) { _isNew = isNew; _isUnsafe = isUnsafe; _initializer = initializer; } public static void Attach( IPropertySymbol property, bool isNew, bool isUnsafe, SyntaxNode initializer) { var info = new CodeGenerationPropertyInfo(isNew, isUnsafe, initializer); s_propertyToInfoMap.Add(property, info); } private static CodeGenerationPropertyInfo GetInfo(IPropertySymbol property) { s_propertyToInfoMap.TryGetValue(property, out var info); return info; } public static SyntaxNode GetInitializer(CodeGenerationPropertyInfo info) => info?._initializer; public static SyntaxNode GetInitializer(IPropertySymbol property) => GetInitializer(GetInfo(property)); public static bool GetIsNew(IPropertySymbol property) => GetIsNew(GetInfo(property)); public static bool GetIsUnsafe(IPropertySymbol property) => GetIsUnsafe(GetInfo(property)); private static bool GetIsNew(CodeGenerationPropertyInfo info) => info != null && info._isNew; private static bool GetIsUnsafe(CodeGenerationPropertyInfo info) => info != null && info._isUnsafe; } |