Exemplo n.º 1
0
        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);
        }