summarylogtreecommitdiffstats
path: root/metals-client.sh
blob: dc430645679a265e000c8edf4539019f0227830c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash

set -e

declare -r _INSTALL_DIR='/usr/share/java/metals'
declare _CP="$_INSTALL_DIR/lib:$_INSTALL_DIR/metals"
declare -r -A _JAVA_8_ARCH_RUNTIME_TO_PACKAGE=([java-8-openjdk]='jre8-openjdk-headless')
declare -r _JAVA_RUNTIME_PATH_PREFIX='/usr/lib/jvm'
declare -r -A _JAVA_8_ARCH_PACKAGE_PATH_SUFFIXES=([jre8-openjdk-headless]='/java-8-openjdk/jre/bin')

function is_current_java_8 {
    local -r _CURRENT_JAVA="$(archlinux-java get)"
    if [ -z "${_JAVA_8_ARCH_RUNTIME_TO_PACKAGE[${_CURRENT_JAVA}]}" ]
    then
        return 1
    else
        return 0
    fi
}

function ensure_java_8 {
    if is_current_java_8
    then
        return 0
    else
        for _PACKAGE in "${_JAVA_8_ARCH_RUNTIME_TO_PACKAGE[@]}"
        do
            if [ -z "$_PACKAGE" ]
            then
                continue
            else
                local _PACKAGE_SUFFIX="${_JAVA_8_ARCH_PACKAGE_PATH_SUFFIXES[${_PACKAGE}]}"
                local _PACKAGE_PATH="$_JAVA_RUNTIME_PATH_PREFIX$_PACKAGE_SUFFIX"
                if [ -n "$_PACKAGE_SUFFIX" ] && [ -d "$_PACKAGE_PATH" ]
                then
                    export PATH="$_PACKAGE_PATH:$PATH"
                    return 0
                else
                    continue
                fi
            fi
        done
        echo 'Unable to find a Java 8 environment with certainty. Attempt to use the current environment.' 1>&2
    fi
}

function build_cp {
    while read -r name
    do
        _CP="$name:$_CP"
    done <<< "$(find "$_INSTALL_DIR"/jars -regex '.*\.jar')"
}

function main {
    ensure_java_8

    build_cp

    # Echo out the full path to the Java binary we will use.
    echo "Java binary selected: $(command -v java)"

    # Java options taken from metals-emacs documentation
    # https://scalameta.org/metals/docs/editors/emacs.HTML
    exec java -XX:+UseG1GC -XX:+UseStringDeduplication -Xss4m -Xms100m -Dmetals.client="$_METALS_CLIENT" -cp "$_CP" scala.meta.metals.Main "$@"
}

main "$@"