@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        int baseViewType = unmaskBaseViewType(viewType);
        int userViewType = unmaskUserViewType(viewType);

        switch (baseViewType) {
            case TYPE_ITEM:
                return onCreateItemViewHolder(parent, userViewType);
            case TYPE_HEADER:
                return onCreateHeaderViewHolder(parent, userViewType);
            case TYPE_FOOTER:
                return onCreateFooterViewHolder(parent, userViewType);
            case TYPE_GHOST_HEADER:
                return onCreateGhostHeaderViewHolder(parent);
        }

        throw new IndexOutOfBoundsException("unrecognized viewType: " + viewType + " does not correspond to TYPE_ITEM, TYPE_HEADER or TYPE_FOOTER");
    }
@param adapterPosition the adapterPosition of the item in question
@return the custom user type of the item at the adapterPosition
android/modules/module_common/src/main/java/github/tornaco/android/thanos/widget/section/SectioningAdapter.java