|
// 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.
namespace Microsoft.CodeAnalysis
{
internal partial struct SymbolKey
{
private sealed class DynamicTypeSymbolKey : AbstractSymbolKey<IDynamicTypeSymbol>
{
public static readonly DynamicTypeSymbolKey Instance = new();
public sealed override void Create(IDynamicTypeSymbol symbol, SymbolKeyWriter writer)
{
// No need to encode anything here. There is only ever one dynamic-symbol
// per compilation.
}
protected sealed override SymbolKeyResolution Resolve(
SymbolKeyReader reader, IDynamicTypeSymbol? contextualSymbol, out string? failureReason)
{
if (reader.Compilation.Language == LanguageNames.VisualBasic)
{
// TODO: We could consider mapping 'dynamic' to 'object' when resolving these types in Visual Basic.
// However, this should be driven by an actual scenario that is not working that can be traced down
// to this check.
failureReason = $"({nameof(DynamicTypeSymbolKey)} is not supported in {LanguageNames.VisualBasic})";
return default;
}
failureReason = null;
return new SymbolKeyResolution(reader.Compilation.DynamicType);
}
}
}
}
|