diff --git a/src/coreclr/nativeaot/System.Private.Reflection.Core/src/System/Reflection/Runtime/TypeInfos/RuntimeTypeInfo.GetMember.cs b/src/coreclr/nativeaot/System.Private.Reflection.Core/src/System/Reflection/Runtime/TypeInfos/RuntimeTypeInfo.GetMember.cs index 9c5741413ba55d..e79e6c0b7092c1 100644 --- a/src/coreclr/nativeaot/System.Private.Reflection.Core/src/System/Reflection/Runtime/TypeInfos/RuntimeTypeInfo.GetMember.cs +++ b/src/coreclr/nativeaot/System.Private.Reflection.Core/src/System/Reflection/Runtime/TypeInfos/RuntimeTypeInfo.GetMember.cs @@ -123,7 +123,22 @@ public sealed override MemberInfo GetMemberWithSameMetadataDefinitionAs(MemberIn if (member is null) throw new ArgumentNullException(nameof(member)); - MemberInfo result = member.MemberType switch + // Need to walk up the inheritance chain if member is not found + // Leverage the existing cache mechanism of per type to store members + RuntimeTypeInfo? runtimeType = this; + while (runtimeType != null) + { + MemberInfo result = runtimeType.GetDeclaredMemberWithSameMetadataDefinitionAs(member); + if (result != null) + return result; + runtimeType = runtimeType.BaseType as RuntimeTypeInfo; + } + throw new ArgumentException(SR.Format(SR.Arg_MemberInfoNotFound, member.Name), nameof(member)); + } + + private MemberInfo GetDeclaredMemberWithSameMetadataDefinitionAs(MemberInfo member) + { + return member.MemberType switch { MemberTypes.Method => QueryMemberWithSameMetadataDefinitionAs(member), MemberTypes.Constructor => QueryMemberWithSameMetadataDefinitionAs(member), @@ -133,11 +148,6 @@ public sealed override MemberInfo GetMemberWithSameMetadataDefinitionAs(MemberIn MemberTypes.NestedType => QueryMemberWithSameMetadataDefinitionAs(member), _ => null, }; - - if (result is null) - throw new ArgumentException(SR.Format(SR.Arg_MemberInfoNotFound, member.Name), nameof(member)); - - return result; } private M QueryMemberWithSameMetadataDefinitionAs(MemberInfo member) where M : MemberInfo diff --git a/src/libraries/System.Reflection/tests/TypeInfoTests.cs b/src/libraries/System.Reflection/tests/TypeInfoTests.cs index fb0bccb86c4708..6a94e0f4606765 100644 --- a/src/libraries/System.Reflection/tests/TypeInfoTests.cs +++ b/src/libraries/System.Reflection/tests/TypeInfoTests.cs @@ -1656,7 +1656,6 @@ private static (Type, Type) CreateGeneratedTypes() } [Theory, MemberData(nameof(GetMemberWithSameMetadataDefinitionAsData))] - [ActiveIssue("https://github.com/dotnet/runtime/issues/67533", typeof(PlatformDetection), nameof(PlatformDetection.IsNativeAot))] public void GetMemberWithSameMetadataDefinitionAs(Type openGenericType, Type closedGenericType, bool checkDeclaringType) { BindingFlags all = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 344e383b58cf84..9bb500957f5649 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -382,6 +382,8 @@ + +