Skip to content

Commit

Permalink
TypeExtensions.cs cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Sholtee committed Jan 17, 2020
1 parent 6f3e2af commit 1b73075
Showing 1 changed file with 0 additions and 80 deletions.
80 changes: 0 additions & 80 deletions SRC/Private/Extensions/TypeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,87 +29,7 @@ public static string GetFriendlyName(this Type src)
Debug.Assert(!src.IsGenericType() || src.IsGenericTypeDefinition());
return TypeNameReplacer.Replace(src.IsNested ? src.Name : src.ToString(), string.Empty);
}
#if !NETSTANDARD1_6
public static IReadOnlyDictionary<MethodBase, TMember> GetMembersByAccessor<TMember>(this Type src) where TMember: MemberInfo
{
Dictionary<MethodBase, TMember> result = new Dictionary<MethodBase, TMember>();

foreach (TMember member in src
.GetMembers(BindingFlags.Instance | BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic)
.OfType<TMember>())
{
switch (member)
{
/*
case ConstructorInfo constructor:
result.Add(constructor, member);
break;
*/
case MethodInfo method:
result.Add(method, member);
break;
case PropertyInfo property:
if (property.GetMethod != null) result.Add(property.GetMethod, member);
if (property.SetMethod != null) result.Add(property.SetMethod, member);
break;
case EventInfo @event:
if (@event.AddMethod != null) result.Add(@event.AddMethod, member);
if (@event.RemoveMethod != null) result.Add(@event.RemoveMethod, member);
break;
default:
continue;
}
}

return result;
}

public static IReadOnlyDictionary<TMember, TMember> GetInterfaceMappings<TMember>(this Type src) where TMember: MemberInfo
{
Debug.Assert(src.IsClass());

var result = new Dictionary<TMember, TMember>();

IReadOnlyDictionary<MethodBase, TMember> classMembers = src.GetMembersByAccessor<TMember>();

foreach (Type iface in src.GetInterfaces())
{
IReadOnlyDictionary<MethodBase, TMember> ifaceMembers = iface.GetMembersByAccessor<TMember>();

InterfaceMapping mapping = src.GetInterfaceMap(iface);

for (int i = 0; i < mapping.InterfaceMethods.Length; i++)
{
//
// Biztosan letezik
//

TMember ifaceMember = ifaceMembers[mapping.InterfaceMethods[i]];

//
// Letezhetnek olyan tagok amik tobb modon is hozzaferhetok (pl.: Property.[Get|Set]Method)
// es amiatt mar fel lehet veve.
//

if (result.ContainsKey(ifaceMember)) continue;

//
// Explicit implementacioknal pl nem letezik.
//

classMembers.TryGetValue(mapping.TargetMethods[i], out var classMember);

//
// Mappolas felvetele (ertek lehet NULL).
//

result.Add(ifaceMember, classMember);
}
}

return result;
}
#endif
public static IEnumerable<TMember> ListMembers<TMember>(this Type src, bool includeNonPublic = false) where TMember : MemberInfo
{
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
Expand Down

0 comments on commit 1b73075

Please sign in to comment.