Inazuma.PetitClr.Core.Structure.MethodTableBuilder.GetVirtualMethodDefsFromTypeDef C# (CSharp) Method

GetVirtualMethodDefsFromTypeDef() private method

private GetVirtualMethodDefsFromTypeDef ( TypeDefinition typeDef ) : Inazuma.Mono.Cecil.MethodDefinition[]
typeDef Inazuma.Mono.Cecil.TypeDefinition
return Inazuma.Mono.Cecil.MethodDefinition[]
        private MethodDefinition[] GetVirtualMethodDefsFromTypeDef(TypeDefinition typeDef)
        {
            var methods = new List<MethodDefinition>();
            var declaredMethods = typeDef.Methods.Where(x => x.IsVirtual && !x.IsStatic && !x.DeclaringType.IsInterface).ToArray();
            var nonOverrideMethods = new List<MethodDefinition>();
            if (typeDef.BaseType != null)
            {
                var parentMethods = GetVirtualMethodDefsFromTypeDef(typeDef.BaseType.Resolve());

                for (var i = 0; i < declaredMethods.Length; i++)
                {
                    var declMethod = declaredMethods[i];
                    var overrided = false;

                    for (var j = 0; j < parentMethods.Length; j++)
                    {
                        var parentMethod = parentMethods[j];

                        if (parentMethod.Name == declMethod.Name /* && ... */)
                        {
                            parentMethods[j] = declMethod;
                            overrided = true;
                            break;
                        }
                    }

                    if (!overrided)
                    {
                        nonOverrideMethods.Add(declMethod);
                    }
                }
                methods.AddRange(parentMethods); // virtual (parent/override)
                methods.AddRange(nonOverrideMethods); // virtual
            }
            else
            {
                methods.AddRange(declaredMethods); // virtual
            }
            return methods.ToArray();
        }