// 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 ILLink.Shared.TypeSystemProxy; // This is needed due to NativeAOT which doesn't enable nullable globally yet #nullable enable namespace ILLink.Shared.TrimAnalysis { internal static class Intrinsics { public static IntrinsicId GetIntrinsicIdForMethod(MethodProxy calledMethod) { return calledMethod.Name switch { // static System.Reflection.IntrospectionExtensions.GetTypeInfo(Type type) "GetTypeInfo" when calledMethod.IsDeclaredOnType("System.Reflection.IntrospectionExtensions") => IntrinsicId.IntrospectionExtensions_GetTypeInfo, // System.Reflection.TypeInfo.AsType() "AsType" when calledMethod.IsDeclaredOnType("System.Reflection.TypeInfo") => IntrinsicId.TypeInfo_AsType, // System.Type.GetTypeInfo(Type type) "GetTypeFromHandle" when calledMethod.IsDeclaredOnType("System.Type") => IntrinsicId.Type_GetTypeFromHandle, // System.Type.TypeHandle getter "get_TypeHandle" when calledMethod.IsDeclaredOnType("System.Type") => IntrinsicId.Type_get_TypeHandle, // System.Type.Assembly getter "get_Assembly" when calledMethod.IsDeclaredOnType("System.Type") => IntrinsicId.Type_get_Assembly, // static System.Reflection.MethodBase.GetMethodFromHandle(RuntimeMethodHandle handle) // static System.Reflection.MethodBase.GetMethodFromHandle(RuntimeMethodHandle handle, RuntimeTypeHandle declaringType) "GetMethodFromHandle" when calledMethod.IsDeclaredOnType("System.Reflection.MethodBase") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.RuntimeMethodHandle") && (calledMethod.HasMetadataParametersCount(1) || calledMethod.HasMetadataParametersCount(2)) => IntrinsicId.MethodBase_GetMethodFromHandle, // System.Reflection.MethodBase.MethodHandle getter "get_MethodHandle" when calledMethod.IsDeclaredOnType("System.Reflection.MethodBase") => IntrinsicId.MethodBase_get_MethodHandle, // static System.Type.MakeGenericType(Type[] typeArguments) "MakeGenericType" when calledMethod.IsDeclaredOnType("System.Type") => IntrinsicId.Type_MakeGenericType, // static System.Reflection.RuntimeReflectionExtensions.GetMethodInfo(this Delegate del) "GetMethodInfo" when calledMethod.IsDeclaredOnType("System.Reflection.RuntimeReflectionExtensions") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Delegate") => IntrinsicId.RuntimeReflectionExtensions_GetMethodInfo, // static System.Reflection.RuntimeReflectionExtensions.GetRuntimeEvent(this Type type, string name) "GetRuntimeEvent" when calledMethod.IsDeclaredOnType("System.Reflection.RuntimeReflectionExtensions") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.RuntimeReflectionExtensions_GetRuntimeEvent, // static System.Reflection.RuntimeReflectionExtensions.GetRuntimeField(this Type type, string name) "GetRuntimeField" when calledMethod.IsDeclaredOnType("System.Reflection.RuntimeReflectionExtensions") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.,String") => IntrinsicId.RuntimeReflectionExtensions_GetRuntimeField, // static System.Reflection.RuntimeReflectionExtensions.GetRuntimeMethod(this Type type, string name, Type[] parameters) "GetRuntimeMethod" when calledMethod.IsDeclaredOnType("System.Reflection.RuntimeReflectionExtensions") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.RuntimeReflectionExtensions_GetRuntimeMethod, // static System.Reflection.RuntimeReflectionExtensions.GetRuntimeProperty(this Type type, string name) "GetRuntimeProperty" when calledMethod.IsDeclaredOnType("System.Reflection.RuntimeReflectionExtensions") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.RuntimeReflectionExtensions_GetRuntimeProperty, // static System.Linq.Expressions.Expression.Call(Type, String, Type[], Expression[]) "Call" when calledMethod.IsDeclaredOnType("System.Linq.Expressions.Expression") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasMetadataParametersCount(4) => IntrinsicId.Expression_Call, // static System.Linq.Expressions.Expression.Field(Expression, Type, String) "Field" when calledMethod.IsDeclaredOnType("System.Linq.Expressions.Expression") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") && calledMethod.HasMetadataParametersCount(3) => IntrinsicId.Expression_Field, // static System.Linq.Expressions.Expression.Property(Expression, Type, String) // static System.Linq.Expressions.Expression.Property(Expression, MethodInfo) "Property" when calledMethod.IsDeclaredOnType("System.Linq.Expressions.Expression") && ((calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") && calledMethod.HasMetadataParametersCount(3)) || (calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.MethodInfo") && calledMethod.HasMetadataParametersCount(2))) => IntrinsicId.Expression_Property, // static System.Linq.Expressions.Expression.New(Type) "New" when calledMethod.IsDeclaredOnType("System.Linq.Expressions.Expression") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasMetadataParametersCount(1) => IntrinsicId.Expression_New, // static Array System.Enum.GetValues(Type) "GetValues" when calledMethod.IsDeclaredOnType("System.Enum") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasMetadataParametersCount(1) => IntrinsicId.Enum_GetValues, // static int System.Runtime.InteropServices.Marshal.SizeOf(Type) "SizeOf" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.Marshal") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasMetadataParametersCount(1) => IntrinsicId.Marshal_SizeOf, // static int System.Runtime.InteropServices.Marshal.OffsetOf(Type, string) "OffsetOf" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.Marshal") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") && calledMethod.HasMetadataParametersCount(2) => IntrinsicId.Marshal_OffsetOf, // static object System.Runtime.InteropServices.Marshal.PtrToStructure(IntPtr, Type) "PtrToStructure" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.Marshal") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") && calledMethod.HasMetadataParametersCount(2) => IntrinsicId.Marshal_PtrToStructure, // static void System.Runtime.InteropServices.Marshal.DestroyStructure(IntPtr, Type) "DestroyStructure" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.Marshal") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") && calledMethod.HasMetadataParametersCount(2) => IntrinsicId.Marshal_DestroyStructure, // static Delegate System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(IntPtr, Type) "GetDelegateForFunctionPointer" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.Marshal") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") && calledMethod.HasMetadataParametersCount(2) => IntrinsicId.Marshal_GetDelegateForFunctionPointer, // static System.Type.GetType(string) // static System.Type.GetType(string, Boolean) // static System.Type.GetType(string, Boolean, Boolean) // static System.Type.GetType(string, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>) // static System.Type.GetType(string, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>, Boolean) // static System.Type.GetType(string, Func<AssemblyName, Assembly>, Func<Assembly, String, Boolean, Type>, Boolean, Boolean) "GetType" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.String") => IntrinsicId.Type_GetType, // System.Type.GetConstructor Type[]) // System.Type.GetConstructor BindingFlags, Type[]) // System.Type.GetConstructor BindingFlags, Binder, Type[], ParameterModifier []) // System.Type.GetConstructor BindingFlags, Binder, CallingConventions, Type[], ParameterModifier []) "GetConstructor" when calledMethod.IsDeclaredOnType("System.Type") && !calledMethod.IsStatic() => IntrinsicId.Type_GetConstructor, // System.Type.GetConstructors(BindingFlags) "GetConstructors" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") && calledMethod.HasMetadataParametersCount(1) && !calledMethod.IsStatic() => IntrinsicId.Type_GetConstructors__BindingFlags, // System.Type.GetMethod(string) // System.Type.GetMethod(string, BindingFlags) // System.Type.GetMethod(string, Type[]) // System.Type.GetMethod(string, Type[], ParameterModifier[]) // System.Type.GetMethod(string, BindingFlags, Type[]) // System.Type.GetMethod(string, BindingFlags, Binder, Type[], ParameterModifier[]) // System.Type.GetMethod(string, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) // System.Type.GetMethod(string, int, Type[]) // System.Type.GetMethod(string, int, Type[], ParameterModifier[]?) // System.Type.GetMethod(string, int, BindingFlags, Binder?, Type[], ParameterModifier[]?) // System.Type.GetMethod(string, int, BindingFlags, Binder?, CallingConventions, Type[], ParameterModifier[]?) "GetMethod" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Type_GetMethod, // System.Type.GetMethods(BindingFlags) "GetMethods" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") => IntrinsicId.Type_GetMethods__BindingFlags, // System.Type.GetField(string) // System.Type.GetField(string, BindingFlags) "GetField" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Type_GetField, // System.Type.GetFields(BindingFlags) "GetFields" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") => IntrinsicId.Type_GetFields__BindingFlags, // System.Type.GetEvent(string) // System.Type.GetEvent(string, BindingFlags) "GetEvent" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Type_GetEvent, // System.Type.GetEvents(BindingFlags) "GetEvents" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") => IntrinsicId.Type_GetEvents__BindingFlags, // System.Type.GetNestedType(string) // System.Type.GetNestedType(string, BindingFlags) "GetNestedType" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Type_GetNestedType, // System.Type.GetNestedTypes(BindingFlags) "GetNestedTypes" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") => IntrinsicId.Type_GetNestedTypes__BindingFlags, // System.Type.GetMember(string) // System.Type.GetMember(string, BindingFlags) // System.Type.GetMember(string, MemberTypes, BindingFlags) "GetMember" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && (calledMethod.HasMetadataParametersCount(1) || (calledMethod.HasMetadataParametersCount(2) && calledMethod.HasParameterOfType((ParameterIndex)2, "System.Reflection.BindingFlags")) || (calledMethod.HasMetadataParametersCount(3) && calledMethod.HasParameterOfType((ParameterIndex)3, "System.Reflection.BindingFlags"))) => IntrinsicId.Type_GetMember, // System.Type.GetMembers(BindingFlags) "GetMembers" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") => IntrinsicId.Type_GetMembers__BindingFlags, // System.Type.GetInterface(string) // System.Type.GetInterface(string, bool) "GetInterface" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && (calledMethod.HasMetadataParametersCount(1) || (calledMethod.HasMetadataParametersCount(2) && calledMethod.HasParameterOfType((ParameterIndex)2, "System.Boolean"))) => IntrinsicId.Type_GetInterface, "GetInterfaces" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(0) => IntrinsicId.Type_GetInterfaces, // System.Type.AssemblyQualifiedName "get_AssemblyQualifiedName" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && !calledMethod.HasMetadataParameters() => IntrinsicId.Type_get_AssemblyQualifiedName, // System.Type.UnderlyingSystemType "get_UnderlyingSystemType" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && !calledMethod.HasMetadataParameters() => IntrinsicId.Type_get_UnderlyingSystemType, // System.Type.BaseType "get_BaseType" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && !calledMethod.HasMetadataParameters() => IntrinsicId.Type_get_BaseType, // System.Type.GetProperty(string) // System.Type.GetProperty(string, BindingFlags) // System.Type.GetProperty(string, Type) // System.Type.GetProperty(string, Type[]) // System.Type.GetProperty(string, Type, Type[]) // System.Type.GetProperty(string, Type, Type[], ParameterModifier[]) // System.Type.GetProperty(string, BindingFlags, Binder, Type, Type[], ParameterModifier[]) "GetProperty" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Type_GetProperty, // System.Type.GetProperties(BindingFlags) "GetProperties" when calledMethod.IsDeclaredOnType("System.Type") && calledMethod.HasImplicitThis() && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Reflection.BindingFlags") && calledMethod.HasMetadataParametersCount(1) => IntrinsicId.Type_GetProperties__BindingFlags, // static System.Object.GetType() "GetType" when calledMethod.IsDeclaredOnType("System.Object") => IntrinsicId.Object_GetType, ".ctor" when calledMethod.IsDeclaredOnType("System.Reflection.TypeDelegator") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Type") => IntrinsicId.TypeDelegator_Ctor, "Empty" when calledMethod.IsDeclaredOnType("System.Array") => IntrinsicId.Array_Empty, // static System.Array.CreateInstance(System.Type type, int length) "CreateInstance" when calledMethod.IsDeclaredOnType("System.Array") && calledMethod.HasMetadataParametersCount(2) && calledMethod.HasParameterOfType((ParameterIndex)1, "System.Int32") => IntrinsicId.Array_CreateInstance, // static System.Activator.CreateInstance(System.Type type) // static System.Activator.CreateInstance(System.Type type, bool nonPublic) // static System.Activator.CreateInstance(System.Type type, params object?[]? args) // static System.Activator.CreateInstance(System.Type type, object?[]? args, object?[]? activationAttributes) // static System.Activator.CreateInstance(System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture) // static System.Activator.CreateInstance(System.Type type, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes) { throw null; } "CreateInstance" when calledMethod.IsDeclaredOnType("System.Activator") && !calledMethod.HasGenericParameters() && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") => IntrinsicId.Activator_CreateInstance__Type, // static System.Activator.CreateInstance(string assemblyName, string typeName) // static System.Activator.CreateInstance(string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes) // static System.Activator.CreateInstance(string assemblyName, string typeName, object?[]? activationAttributes) "CreateInstance" when calledMethod.IsDeclaredOnType("System.Activator") && !calledMethod.HasGenericParameters() && calledMethod.HasParameterOfType((ParameterIndex)0, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Activator_CreateInstance__AssemblyName_TypeName, // static System.Activator.CreateInstanceFrom(string assemblyFile, string typeName) // static System.Activator.CreateInstanceFrom(string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes) // static System.Activator.CreateInstanceFrom(string assemblyFile, string typeName, object? []? activationAttributes) "CreateInstanceFrom" when calledMethod.IsDeclaredOnType("System.Activator") && !calledMethod.HasGenericParameters() && calledMethod.HasParameterOfType((ParameterIndex)0, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Activator_CreateInstanceFrom, // System.AppDomain.CreateInstance(string assemblyName, string typeName) // System.AppDomain.CreateInstance(string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes) // System.AppDomain.CreateInstance(string assemblyName, string typeName, object? []? activationAttributes) "CreateInstance" when calledMethod.IsDeclaredOnType("System.AppDomain") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)2, "System.String") => IntrinsicId.AppDomain_CreateInstance, // System.AppDomain.CreateInstanceAndUnwrap(string assemblyName, string typeName) // System.AppDomain.CreateInstanceAndUnwrap(string assemblyName, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes) // System.AppDomain.CreateInstanceAndUnwrap(string assemblyName, string typeName, object? []? activationAttributes) "CreateInstanceAndUnwrap" when calledMethod.IsDeclaredOnType("System.AppDomain") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)2, "System.String") => IntrinsicId.AppDomain_CreateInstanceAndUnwrap, // System.AppDomain.CreateInstanceFrom(string assemblyFile, string typeName) // System.AppDomain.CreateInstanceFrom(string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes) // System.AppDomain.CreateInstanceFrom(string assemblyFile, string typeName, object? []? activationAttributes) "CreateInstanceFrom" when calledMethod.IsDeclaredOnType("System.AppDomain") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)2, "System.String") => IntrinsicId.AppDomain_CreateInstanceFrom, // System.AppDomain.CreateInstanceFromAndUnwrap(string assemblyFile, string typeName) // System.AppDomain.CreateInstanceFromAndUnwrap(string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object? []? args, System.Globalization.CultureInfo? culture, object? []? activationAttributes) // System.AppDomain.CreateInstanceFromAndUnwrap(string assemblyFile, string typeName, object? []? activationAttributes) "CreateInstanceFromAndUnwrap" when calledMethod.IsDeclaredOnType("System.AppDomain") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") && calledMethod.HasParameterOfType((ParameterIndex)2, "System.String") => IntrinsicId.AppDomain_CreateInstanceFromAndUnwrap, // System.Reflection.Assembly.CreateInstance(string typeName) // System.Reflection.Assembly.CreateInstance(string typeName, bool ignoreCase) // System.Reflection.Assembly.CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder? binder, object []? args, CultureInfo? culture, object []? activationAttributes) "CreateInstance" when calledMethod.IsDeclaredOnType("System.Reflection.Assembly") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Assembly_CreateInstance, // System.Reflection.Assembly.GetType(string) // System.Reflection.Assembly.GetType(string, bool) // System.Reflection.Assembly.GetType(string, bool, bool) "GetType" when calledMethod.IsDeclaredOnType("System.Reflection.Assembly") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Assembly_GetType, // System.Reflection.Assembly.Location getter "get_Location" when calledMethod.IsDeclaredOnType("System.Reflection.Assembly") => IntrinsicId.Assembly_get_Location, // System.Reflection.Assembly.GetFile(string) "GetFile" when calledMethod.IsDeclaredOnType("System.Reflection.Assembly") && calledMethod.HasParameterOfType((ParameterIndex)1, "System.String") => IntrinsicId.Assembly_GetFile, // System.Reflection.Assembly.GetFiles() // System.Reflection.Assembly.GetFiles(bool) "GetFiles" when calledMethod.IsDeclaredOnType("System.Reflection.Assembly") && (calledMethod.HasMetadataParametersCount(0) || calledMethod.HasParameterOfType((ParameterIndex)1, "System.Boolean")) => IntrinsicId.Assembly_GetFiles, // System.Reflection.AssemblyName.CodeBase getter "get_CodeBase" when calledMethod.IsDeclaredOnType("System.Reflection.AssemblyName") => IntrinsicId.AssemblyName_get_CodeBase, // System.Reflection.AssemblyName.EscapedCodeBase getter "get_EscapedCodeBase" when calledMethod.IsDeclaredOnType("System.Reflection.AssemblyName") => IntrinsicId.AssemblyName_get_EscapedCodeBase, // System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(RuntimeTypeHandle type) "RunClassConstructor" when calledMethod.IsDeclaredOnType("System.Runtime.CompilerServices.RuntimeHelpers") && calledMethod.HasParameterOfType((ParameterIndex)0, "System.RuntimeTypeHandle") => IntrinsicId.RuntimeHelpers_RunClassConstructor, // System.Reflection.MethodInfo.MakeGenericMethod(Type[] typeArguments) "MakeGenericMethod" when calledMethod.IsDeclaredOnType("System.Reflection.MethodInfo") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(1) => IntrinsicId.MethodInfo_MakeGenericMethod, // static System.Nullable.GetUnderlyingType "GetUnderlyingType" when calledMethod.IsDeclaredOnType("System.Nullable") && calledMethod.IsStatic() && calledMethod.HasParameterOfType((ParameterIndex)0, "System.Type") => IntrinsicId.Nullable_GetUnderlyingType, // static System.Delegate.Method getter "get_Method" when calledMethod.IsDeclaredOnType("System.Delegate") && calledMethod.HasImplicitThis() && calledMethod.HasMetadataParametersCount(0) => IntrinsicId.Delegate_get_Method, // static System.Runtime.InteropServices.TypeMapping.GetOrCreateExternalTypeMapping<T>() "GetOrCreateExternalTypeMapping" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.TypeMapping") && calledMethod.IsStatic() && calledMethod.HasGenericArgumentsCount(1) => IntrinsicId.TypeMapping_GetOrCreateExternalTypeMapping, // static System.Runtime.InteropServices.TypeMapping.GetOrCreateProxyTypeMapping<T>() "GetOrCreateProxyTypeMapping" when calledMethod.IsDeclaredOnType("System.Runtime.InteropServices.TypeMapping") && calledMethod.IsStatic() && calledMethod.HasGenericArgumentsCount(1) => IntrinsicId.TypeMapping_GetOrCreateProxyTypeMapping, _ => IntrinsicId.None, }; } } }