Skip to content

Commit e81d324

Browse files
committed
Improve custom member info provider test case.
1 parent 1422aca commit e81d324

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/Topaz.Test/AwaitTests.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,14 +205,21 @@ class CustomMemberInfoProvider : IMemberInfoProvider
205205
{
206206
public MemberInfo[] GetInstanceMembers(object instance, string memberName)
207207
{
208-
if (memberName == "MoveNextAsync")
208+
// Handle special case for auto generated async enumerators or
209+
// explicitly defined interface members using interface map.
210+
// MoveNextAsync is not accessible through the instance's type
211+
// and it is not public.
212+
// https://github.com/dotnet/roslyn/issues/71406
213+
214+
var type = instance.GetType();
215+
var interfaces = type.GetTypeInfo().GetInterfaces();
216+
var list = new List<MemberInfo>();
217+
foreach (var itype in interfaces)
209218
{
210-
// Handle special case for auto generated async enumerators.
211-
// MoveNextAsync is not accessible through its name and it is not public.
212-
// https://github.com/dotnet/roslyn/issues/71406
213-
return instance.GetType().GetMember("System.Collections.Generic.IAsyncEnumerator<System.Int32>.MoveNextAsync", BindingFlags.NonPublic | BindingFlags.Instance);
219+
list.AddRange(itype.GetMember(memberName, BindingFlags.Public | BindingFlags.Instance));
214220
}
215-
return instance.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.Instance);
221+
list.AddRange(type.GetMember(memberName, BindingFlags.Public | BindingFlags.Instance));
222+
return list.ToArray();
216223
}
217224

218225
public MemberInfo[] GetStaticMembers(Type type, string memberName)

0 commit comments

Comments
 (0)