private MethodDesc[] CreateMethodSlotsFromTypeDef(TypeDefinition typeDef)
{
var methods = new List<MethodDefinition>();
methods.AddRange(GetVirtualMethodDefsFromTypeDef(typeDef)); // virtual
methods.AddRange(typeDef.Methods.Where(x => !x.IsVirtual && !x.IsStatic)); // non-virtual
methods.AddRange(typeDef.Methods.Where(x => x.IsStatic)); // static
return methods
.Select((x, i) =>
{
var methodDesc = _classLoader.LookupMethodDescFromMethodDef(x);
if (methodDesc == null)
{
methodDesc = new MethodDesc()
{
MdToken = x.MetadataToken,
Name = x.FullName,
Definition = x,
Slot = i
};
_classLoader.RegisterMethodDesc(x, methodDesc);
}
return methodDesc;
})
.ToArray();
}
}