summarylogtreecommitdiffstats
path: root/metals-client.sh
blob: 2fa41894550a5be9856a4e9a511bef150ef75724 (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
#!/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 ensure_java_8 {
    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
}

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)" 1>&2

    # 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 "$@"