private bool CacheMembers(Type type, MightyContext context, Func <string, SerializedProperty> findProperty) { var allMembers = ReflectionUtilities.GetAllMightyMembers(type, findProperty); var membersCount = allMembers.Length; if (membersCount == 0) { return(false); } Array.Sort(allMembers, (first, second) => first.info.GetMemberTypeOrder(first.property != null) - second.info.GetMemberTypeOrder(second.property != null)); m_membersCache = new MightyMembersCache(); m_groupedMembersByGroup = new Dictionary <string, List <BaseMightyMember> >(); m_drawnGroups = new HashSet <string>(); m_foldableGroupedMembersByGroup = new Dictionary <string, List <BaseMightyMember> >(); m_drawnFoldableGroups = new HashSet <string>(); for (short i = 0; i < allMembers.Length; i++) { var(info, serializedProperty) = allMembers[i]; BaseMightyMember mightyMember = null; switch (info) { case FieldInfo field: if (serializedProperty != null) { mightyMember = CacheSerializedField(field, serializedProperty, context); } else { mightyMember = CacheNonSerializedField(field, context); } break; case PropertyInfo property: mightyMember = CacheNativeProperty(property, context); break; case MethodInfo method: mightyMember = CacheMethod(method, context); break; } if (mightyMember == null) { continue; } mightyMember.DrawIndex = i; } if (m_hasOrder) { ReorderMembers(); } return(true); }