diff --git a/README.md b/README.md index 16124177..e52f9740 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ if not configs.jls then default_config = { cmd = { "/path/to/jls/dist/lang_server_{linux|mac|windows}.sh", - "-Dorg.javacs.lombokPath=/path/to/lombok.jar", + "-DlombokPath=/path/to/lombok.jar", }, filetypes = { "java" }, root_dir = lspconfig.util.root_pattern("pom.xml", "build.gradle", "build.gradle.kts", ".java-version", ".git"), diff --git a/dist/launch_linux.sh b/dist/launch_linux.sh index 3047a30a..4199ccd1 100755 --- a/dist/launch_linux.sh +++ b/dist/launch_linux.sh @@ -19,6 +19,16 @@ HOST_JAVA_HOME="${JAVA_LSP_HOST_JAVA:-${JAVA_HOME:-}}" WORKSPACE_ROOT="${JAVA_LSP_WORKSPACE_ROOT:-${PWD}}" RUNTIMES_FILE="${JAVA_LSP_RUNTIMES_FILE:-${HOME}/.config/jls/runtimes.json}" RUNTIME_JAVA="" +LOMBOK_PATH="" +JAVA_AGENT="" + +for arg in "$@"; do + case "$arg" in + -DlombokPath=*) + LOMBOK_PATH="${arg#-DlombokPath=}" + ;; + esac +done if [ -n "$WORKSPACE_ROOT" ] && [ -r "$RUNTIMES_FILE" ] && command -v python3 >/dev/null 2>&1; then RUNTIME_JAVA="$( @@ -124,4 +134,16 @@ elif [ -n "$HOST_JAVA_HOME" ] && [ -x "$HOST_JAVA_HOME/bin/java" ]; then JAVA_EXECUTABLE="$HOST_JAVA_HOME/bin/java" fi -exec "$JAVA_EXECUTABLE" $JLINK_VM_OPTIONS $CLASSPATH_OPTIONS "$@" +if [ -n "$LOMBOK_PATH" ]; then + if [ -r "$LOMBOK_PATH" ]; then + JAVA_AGENT="-javaagent:$LOMBOK_PATH" + else + echo "Warning: ignoring lombok jar (unreadable): $LOMBOK_PATH" >&2 + fi +fi + +if [ -n "$JAVA_AGENT" ]; then + exec "$JAVA_EXECUTABLE" $JLINK_VM_OPTIONS $JAVA_AGENT $CLASSPATH_OPTIONS "$@" +else + exec "$JAVA_EXECUTABLE" $JLINK_VM_OPTIONS $CLASSPATH_OPTIONS "$@" +fi diff --git a/dist/launch_mac.sh b/dist/launch_mac.sh index 9ac662aa..10100cf0 100755 --- a/dist/launch_mac.sh +++ b/dist/launch_mac.sh @@ -42,8 +42,8 @@ RUNTIMES_FILE="${JAVA_LSP_RUNTIMES_FILE:-${HOME}/.config/jls/runtimes.json}" RUNTIME_JAVA="" for arg in "$@"; do case "$arg" in - -Dorg.javacs.lombokPath=*) - LOMBOK_PATH="${arg#-Dorg.javacs.lombokPath=}" + -DlombokPath=*) + LOMBOK_PATH="${arg#-DlombokPath=}" JAVA_ARGS+=("$arg") ;; -D*|-X*|-javaagent:*|-Xbootclasspath*|-J*) diff --git a/dist/launch_windows.cmd b/dist/launch_windows.cmd index 23c94561..41270b26 100644 --- a/dist/launch_windows.cmd +++ b/dist/launch_windows.cmd @@ -1,4 +1,5 @@ @echo off +setlocal EnableDelayedExpansion set JLINK_VM_OPTIONS=^ --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED ^ --add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED ^ @@ -10,6 +11,15 @@ set JLINK_VM_OPTIONS=^ --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED set CLASSPATH_OPTIONS=-classpath %~dp0classpath\* set "JAVA_EXECUTABLE=java" +set "LOMBOK_PATH=" +set "JAVA_AGENT=" + +for %%A in (%*) do ( + set "ARG=%%~A" + if /I "!ARG:~0,13!"=="-DlombokPath=" ( + set "LOMBOK_PATH=!ARG:~13!" + ) +) where python3 >nul 2>nul if %errorlevel%==0 if defined JAVA_LSP_RUNTIMES_FILE if defined JAVA_LSP_WORKSPACE_ROOT ( @@ -81,4 +91,16 @@ sys.exit(0)"') do set "JAVA_EXECUTABLE=%%i" if not "%JAVA_LSP_HOST_JAVA%"=="" if exist "%JAVA_LSP_HOST_JAVA%\\bin\\java.exe" set "JAVA_EXECUTABLE=%JAVA_LSP_HOST_JAVA%\\bin\\java.exe" if not "%JAVA_HOME%"=="" if exist "%JAVA_HOME%\\bin\\java.exe" set "JAVA_EXECUTABLE=%JAVA_HOME%\\bin\\java.exe" -%JAVA_EXECUTABLE% %JLINK_VM_OPTIONS% %CLASSPATH_OPTIONS% %* +if defined LOMBOK_PATH ( + if exist "!LOMBOK_PATH!" ( + set "JAVA_AGENT=-javaagent:!LOMBOK_PATH!" + ) else ( + echo Warning: ignoring lombok jar (unreadable): !LOMBOK_PATH! 1>&2 + ) +) + +if defined JAVA_AGENT ( + %JAVA_EXECUTABLE% %JLINK_VM_OPTIONS% %JAVA_AGENT% %CLASSPATH_OPTIONS% %* +) else ( + %JAVA_EXECUTABLE% %JLINK_VM_OPTIONS% %CLASSPATH_OPTIONS% %* +) diff --git a/docs/lazyvim-java-lsp.md b/docs/lazyvim-java-lsp.md index d8ec509f..ec08f449 100644 --- a/docs/lazyvim-java-lsp.md +++ b/docs/lazyvim-java-lsp.md @@ -29,7 +29,7 @@ local lspconfig = require("lspconfig") local configs = require("lspconfig.configs") local JAVA_LSP_LAUNCHER = "/Users/youruser/projects/jls/dist/lang_server_mac.sh" -local LOMBOK_JAR_PATH_ARG = "-Dorg.javacs.lombokPath=/Users/youruser/downloads/lombok.jar" +local LOMBOK_JAR_PATH_ARG = "-DlombokPath=/Users/youruser/downloads/lombok.jar" local cmd = { JAVA_LSP_LAUNCHER, diff --git a/src/main/java/org/javacs/JavaCompilerService.java b/src/main/java/org/javacs/JavaCompilerService.java index 84b87a7e..bc9c610a 100644 --- a/src/main/java/org/javacs/JavaCompilerService.java +++ b/src/main/java/org/javacs/JavaCompilerService.java @@ -24,7 +24,7 @@ class JavaCompilerService implements CompilerProvider { JavaCompilerService(Set classPath, Set docPath, Set addExports) { var cp = new LinkedHashSet(); - var lombokPath = System.getProperty("org.javacs.lombokPath"); + var lombokPath = LombokSupport.lombokPath(); if (lombokPath != null) { cp.add(Paths.get(lombokPath)); } diff --git a/src/main/java/org/javacs/JavaLanguageServer.java b/src/main/java/org/javacs/JavaLanguageServer.java index 4929571f..f946e1cb 100644 --- a/src/main/java/org/javacs/JavaLanguageServer.java +++ b/src/main/java/org/javacs/JavaLanguageServer.java @@ -200,7 +200,7 @@ private Optional mavenSettings() { } private Optional lombokDocSources() { - var lombokPath = System.getProperty("org.javacs.lombokPath"); + var lombokPath = LombokSupport.lombokPath(); if (lombokPath == null || lombokPath.isBlank()) return Optional.empty(); var jar = Paths.get(lombokPath); var parent = jar.getParent(); diff --git a/src/main/java/org/javacs/LombokSupport.java b/src/main/java/org/javacs/LombokSupport.java index 5253f7f5..66998650 100644 --- a/src/main/java/org/javacs/LombokSupport.java +++ b/src/main/java/org/javacs/LombokSupport.java @@ -3,7 +3,15 @@ final class LombokSupport { private LombokSupport() {} + static String lombokPath() { + var path = System.getProperty("lombokPath"); + if (path != null && !path.isBlank()) { + return path; + } + return null; + } + static boolean isEnabled() { - return System.getProperty("org.javacs.lombokPath") != null; + return lombokPath() != null; } }