diff --git a/scripts/build.sh b/scripts/build.sh index 1d7177fc..dac40f83 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -2,38 +2,63 @@ set -e -# Needed once -# if [ ! -e node_modules ]; then -# npm install -# fi - -# Build standalone java -if [ ! -e jdks/linux/jdk-21 ]; then - ./scripts/download_linux_jdk.sh +# Detect usable system Java +USE_SYSTEM_JAVA=false + +if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then + VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | awk -F[\".] '/version/ {print $2}') + if [ "$VERSION" -ge 21 ]; then + USE_SYSTEM_JAVA=true + fi fi -if [ ! -e jdks/windows/jdk-21 ]; then - ./scripts/download_windows_jdk.sh + +OS="$(uname -s)" + +# Download JDK only if needed +if [ "$USE_SYSTEM_JAVA" = false ]; then + case "$OS" in + Linux*) + if [ ! -e jdks/linux/jdk-21 ]; then + ./scripts/download_linux_jdk.sh + fi + ;; + Darwin*) + if [ ! -e jdks/mac/jdk-21 ]; then + ./scripts/download_mac_jdk.sh + fi + ;; + MINGW* | MSYS* | CYGWIN*) + if [ ! -e jdks/windows/jdk-21 ]; then + ./scripts/download_windows_jdk.sh + fi + ;; + esac fi -if [ ! -e dist/linux/bin/java ]; then + +# Run only the correct link script +case "$OS" in +Linux*) + if [ ! -e dist/linux/bin/java ]; then ./scripts/link_linux.sh -fi -if [ ! -e dist/windows/bin/java.exe ]; then - ./scripts/link_windows.sh -fi -if [ ! -e dist/mac/bin/java ]; then + fi + ;; +Darwin*) + if [ ! -e dist/mac/bin/java ]; then ./scripts/link_mac.sh -fi + fi + ;; +MINGW* | MSYS* | CYGWIN*) + if [ ! -e dist/windows/bin/java.exe ]; then + ./scripts/link_windows.sh + fi + ;; +esac # Compile sources if [ ! -e src/main/java/com/google/devtools/build/lib/analysis/AnalysisProtos.java ]; then - ./scripts/gen_proto.sh + ./scripts/gen_proto.sh fi mvn package -DskipTests -# Build vsix -# npm run-script vscode:build -# -# code --install-extension build.vsix --force - echo 'Reload VSCode to update extension' diff --git a/scripts/link_linux.sh b/scripts/link_linux.sh index 53bc88fa..eefead66 100755 --- a/scripts/link_linux.sh +++ b/scripts/link_linux.sh @@ -3,15 +3,24 @@ set -e -# Set env variables to build with mac toolchain but linux target -JAVA_HOME="./jdks/linux/jdk-21" +# Decide which JDK to use +if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then + VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | awk -F[\".] '/version/ {print $2}') + if [ "$VERSION" -ge 21 ]; then + JDK="$JAVA_HOME" + else + JDK="./jdks/linux/jdk-21" + fi +else + JDK="./jdks/linux/jdk-21" +fi # Build in dist/linux rm -rf dist/linux jlink \ - --module-path $JAVA_HOME/jmods \ + --module-path "$JDK/jmods" \ --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \ --output dist/linux \ --no-header-files \ --no-man-pages \ - --compress 2 \ No newline at end of file + --compress 2 diff --git a/scripts/link_mac.sh b/scripts/link_mac.sh index dd81ed40..db9b40ee 100755 --- a/scripts/link_mac.sh +++ b/scripts/link_mac.sh @@ -3,13 +3,22 @@ set -e -# Set env variables to build with mac toolchain but linux target -JAVA_HOME="./jdks/mac/jdk-21" +# Decide which JDK to use +if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then + VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | awk -F[\".] '/version/ {print $2}') + if [ "$VERSION" -ge 21 ]; then + JDK="$JAVA_HOME" + else + JDK="./jdks/mac/jdk-21/Contents/Home" + fi +else + JDK="./jdks/mac/jdk-21/Contents/Home" +fi # Build using jlink rm -rf dist/mac -$JAVA_HOME/Contents/Home/bin/jlink \ - --module-path $JAVA_HOME/Contents/Home/jmods \ +"$JDK/bin/jlink" \ + --module-path "$JDK/jmods" \ --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \ --output dist/mac \ --no-header-files \ diff --git a/scripts/link_windows.sh b/scripts/link_windows.sh index 6692ed2b..cb277c08 100755 --- a/scripts/link_windows.sh +++ b/scripts/link_windows.sh @@ -4,14 +4,25 @@ set -e # Set env variables to build with mac toolchain but windows target -JAVA_HOME="./jdks/windows/jdk-21" +# Decide which JDK to use +if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then + VERSION=$("$JAVA_HOME/bin/java" -version 2>&1 | awk -F[\".] '/version/ {print $2}') + if [ "$VERSION" -ge 21 ]; then + JDK="$JAVA_HOME" + else + JDK="./jdks/linux/jdk-21" + fi +else + JDK="./jdks/linux/jdk-21" +fi # Build in dist/windows rm -rf dist/windows jlink \ - --module-path $JAVA_HOME/jmods \ + --module-path $JDK/jmods \ --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \ --output dist/windows \ --no-header-files \ --no-man-pages \ - --compress 2 \ No newline at end of file + --compress 2 + diff --git a/src/test/java/org/javacs/HoverTest.java b/src/test/java/org/javacs/HoverTest.java index ddd5f0e0..4edc75e5 100644 --- a/src/test/java/org/javacs/HoverTest.java +++ b/src/test/java/org/javacs/HoverTest.java @@ -79,8 +79,8 @@ private String symbolAt(String file, int line, int character) { new TextDocumentPositionParams( new TextDocumentIdentifier(FindResource.uri(file)), new Position(line - 1, character - 1)); var result = new StringJoiner("\n"); - for (var h : server.hover(pos).get().contents) { - result.add(h.value); + for (var h : (Iterable) server.hover(pos).get().contents) { + result.add(h.toString()); } return result.toString(); }