public override void InitializeFromEntityInfo(EntityInfo entityInfo)
        {
            base.InitializeFromEntityInfo(entityInfo);

            isReadOnly   = (AttributeHelper.GetAttribute <ReadOnlyAttribute>(entityInfo.fieldInfo) != null);
            isSelectable = (AttributeHelper.GetAttribute <SelectableAttribute>(entityInfo.fieldInfo) != null);

            list        = FieldInfoHelper.GetSerializedPropertyFromPath(entityInfo.propertyPath, entityInfo.serializedObject);
            listControl = new ReorderableListControl();

            listControl.ItemInserted += ListControl_OnItemInsertedHandler;
            listControl.ItemRemoving += ListControl_OnItemRemovingHandler;
            listControl.ItemMoved    += ListControl_OnItemMovedHandler;

            if (isReadOnly)
            {
                listControl.Flags = ReorderableListFlags.DisableReordering
                                    | ReorderableListFlags.DisableContextMenu
                                    | ReorderableListFlags.HideAddButton
                                    | ReorderableListFlags.HideRemoveButtons;
            }

            listAdaptor = new EESerializedPropertyAdaptor(serializedProperty, isReadOnly);
            listAdaptor.OnItemSelected       += ListAdaptor_HandleOnItemSelected;
            listAdaptor.OnItemInserted       += ListAdaptor_HandleOnItemInserted;
            listAdaptor.OnDrawItem           += ListAdaptor_HandleOnDrawItem;
            listAdaptor.OnDrawItemBackground += ListAdaptor_HandleOnDrawItemBackground;
        }
        public override void Render(Action preRender = null)
        {
            base.Render(preRender);

            intermediarySerializedObject.Update();

            if (!checkedIfReadOnly)
            {
                isReadOnly = (AttributeHelper.GetAttribute<ReadOnlyAttribute>(entityInfo.fieldInfo) != null);
                checkedIfReadOnly = true;
            }

            EESerializedPropertyAdaptor adaptor = new EESerializedPropertyAdaptor(serializedProperty, 0f, isReadOnly);

            EditorGUILayout.BeginHorizontal();
            GUILayout.Space(EditorGUI.indentLevel * 10f * Settings.indentation);

            EditorGUILayout.BeginVertical();

            ReorderableListGUI.Title(label);

            if(isReadOnly)
            {
                ReorderableListGUI.ListField(adaptor, ReorderableListFlags.DisableReordering 
                                             | ReorderableListFlags.DisableContextMenu 
                                             | ReorderableListFlags.HideAddButton
                                             | ReorderableListFlags.HideRemoveButtons);
            }
            else
            {
                ReorderableListGUI.ListField(adaptor);
            }

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndHorizontal();

            intermediarySerializedObject.ApplyModifiedProperties();
        }