// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using StaticCs; // This is needed due to NativeAOT which doesn't enable nullable globally yet #nullable enable namespace ILLink.Shared.TypeSystemProxy { [Closed] public enum WellKnownType { System_String, System_Nullable_T, System_Type, System_Reflection_IReflect, System_Array, System_Object, System_Attribute, System_NotSupportedException, System_Runtime_CompilerServices_DisablePrivateReflectionAttribute, System_Void } public static partial class WellKnownTypeExtensions { public static (string Namespace, string Name) GetNamespaceAndName(this WellKnownType type) { return type switch { WellKnownType.System_String => ("System", "String"), WellKnownType.System_Nullable_T => ("System", "Nullable`1"), WellKnownType.System_Type => ("System", "Type"), WellKnownType.System_Reflection_IReflect => ("System.Reflection", "IReflect"), WellKnownType.System_Array => ("System", "Array"), WellKnownType.System_Object => ("System", "Object"), WellKnownType.System_Attribute => ("System", "Attribute"), WellKnownType.System_NotSupportedException => ("System", "NotSupportedException"), WellKnownType.System_Runtime_CompilerServices_DisablePrivateReflectionAttribute => ("System.Runtime.CompilerServices", "DisablePrivateReflectionAttribute"), WellKnownType.System_Void => ("System", "Void"), _ => throw new System.ArgumentException(type.ToString()) }; } public static string GetNamespace(this WellKnownType type) => GetNamespaceAndName(type).Namespace; public static string GetName(this WellKnownType type) => GetNamespaceAndName(type).Name; public static WellKnownType? GetWellKnownType(string @namespace, string name) { return @namespace switch { "System" => name switch { "String" => WellKnownType.System_String, "Nullable`1" => WellKnownType.System_Nullable_T, "Type" => WellKnownType.System_Type, "Array" => WellKnownType.System_Array, "Attribute" => WellKnownType.System_Attribute, "Object" => WellKnownType.System_Object, "NotSupportedException" => WellKnownType.System_NotSupportedException, "Void" => WellKnownType.System_Void, _ => null }, "System.Reflection" => name switch { "IReflect" => WellKnownType.System_Reflection_IReflect, _ => null }, "System.Runtime.CompilerServices" => name switch { "DisablePrivateReflectionAttribute" => WellKnownType.System_Runtime_CompilerServices_DisablePrivateReflectionAttribute, _ => null }, _ => null }; } } } |