|
// 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 CodeGenerationFieldInfo
{
private static readonly ConditionalWeakTable<IFieldSymbol, CodeGenerationFieldInfo> s_fieldToInfoMap = new();
private readonly bool _isUnsafe;
private readonly bool _isWithEvents;
private readonly SyntaxNode _initializer;
private CodeGenerationFieldInfo(
bool isUnsafe,
bool isWithEvents,
SyntaxNode initializer)
{
_isUnsafe = isUnsafe;
_isWithEvents = isWithEvents;
_initializer = initializer;
}
public static void Attach(
IFieldSymbol field,
bool isUnsafe,
bool isWithEvents,
SyntaxNode initializer)
{
var info = new CodeGenerationFieldInfo(isUnsafe, isWithEvents, initializer);
s_fieldToInfoMap.Add(field, info);
}
private static CodeGenerationFieldInfo GetInfo(IFieldSymbol field)
{
s_fieldToInfoMap.TryGetValue(field, out var info);
return info;
}
private static bool GetIsUnsafe(CodeGenerationFieldInfo info)
=> info != null && info._isUnsafe;
public static bool GetIsUnsafe(IFieldSymbol field)
=> GetIsUnsafe(GetInfo(field));
private static bool GetIsWithEvents(CodeGenerationFieldInfo info)
=> info != null && info._isWithEvents;
public static bool GetIsWithEvents(IFieldSymbol field)
=> GetIsWithEvents(GetInfo(field));
private static SyntaxNode GetInitializer(CodeGenerationFieldInfo info)
=> info?._initializer;
public static SyntaxNode GetInitializer(IFieldSymbol field)
=> GetInitializer(GetInfo(field));
}
|