| File: System\CoreRtBridge.cs | Web Access |
| Project: src\runtime\src\libraries\System.Reflection.MetadataLoadContext\src\System.Reflection.MetadataLoadContext.csproj (System.Reflection.MetadataLoadContext) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Diagnostics; using System.Reflection.TypeLoading; // // This file shims just enough stuff so that source code copied from Reflection.Core builds with as few source changes // as possible. // namespace System.Reflection.Runtime.TypeInfos { internal static class RoShims { internal static RoType CastToRuntimeTypeInfo(this Type t) => (RoType)t; internal static Type[] GetGenericTypeParameters(this Type t) { Debug.Assert(t.IsGenericTypeDefinition); return t.GetGenericArguments(); } } } namespace Internal.Reflection.Core.Execution { internal static class ReflectionCoreExecution { internal static class ExecutionDomain { // We'll never actually reach this since Ro type objects cannot trigger missing metadata exceptions. internal static Exception CreateMissingMetadataException() => new Exception(); } } } namespace System.Collections.Concurrent { // // Reflection.Core couldn't use ConcurrentDictionary because of layering so it had its own implementation. // This emulates the old interface. // internal abstract class ConcurrentUnifier<K, V> where K : IEquatable<K> where V : class { protected ConcurrentUnifier() { } public V GetOrAdd(K key) => _dict.GetOrAdd(key, Factory); protected abstract V Factory(K key); private readonly ConcurrentDictionary<K, V> _dict = new ConcurrentDictionary<K, V>(); } } namespace System.Reflection.TypeLoading { internal static class DefaultBinderThunks { internal static ParameterInfo[] GetParametersNoCopy(this MethodBase m) { if (m is RoMethod roMethod) return roMethod.GetParametersNoCopy(); if (m is RoConstructor roConstructor) return roConstructor.GetParametersNoCopy(); return m.GetParameters(); } internal static int GetGenericParameterCount(this MethodInfo m) { if (m is RoMethod roMethod) return roMethod.GetGenericArgumentsOrParametersNoCopy().Length; return m.GetGenericArguments().Length; } } }