# shellcheck shell=sh disable=SC3043

___x_cmd_java___setarg_(){
    x_="set --"
    local i=1
    local justadd=
    while [ "$#" -gt 0 ]; do
        if [ -n "$justadd" ]; then
            x_="$x_ \"\$$i\""
        else
            case "$1" in
                -m|--module) x_=""; return ;;
                --|-jar)     shift; i=$((i+1)); x_="$x_ -jar"; false   ;;
                @argument|-*)
                                if ___x_cmd_java___setarg_singleopt "$1"; then
                                    x_="$x_ \"\$$i\""
                                else
                                    x_="$x_ \"\$$i\" \"\$$((i+1))\""
                                    shift 2
                                    i=$((i+2))
                                    continue
                                fi ;;
                *)              false ;;
            esac || {
                ___x_cmd_java_which_one "$1"
                x_="$x_ \"\$___X_CMD_JAVA_WHICHFILE\""
                justadd=1
            }
        fi
        shift
        i=$((i+1))
    done
    java:debug "Args ==> $*"
}

___x_cmd_java___setarg_singleopt(){
    case "$1" in
        -*=*)
            return 0
            ;;
        -cp|-classpath|--class-path|-p|\
        --module-path|--upgrade-module-path|--add-modules|--enable-native-access|\
        -d|--describe-module|@argument) # TODO
            return 1
            ;;
    esac
    return 0
}


___x_cmd_java_which_one(){
    case "$1" in
        *.java|*.jar|@*|http*://*)
            false
            ;;
    esac || {
        ___x_cmd_which_one "$1" || {
            x_=""
            java:error "Abort because file path is unknown ==> $1"
            java:error "If you want more log ==> x log +x"
            return 1
        }

        ___X_CMD_JAVA_WHICHFILE="$___X_CMD_WHICH_ONE_RESULT"
        return
    }

    ___X_CMD_JAVA_WHICHFILE="$1"
}
