diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java index a976b9d41..d15351cac 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JavaProjectsServiceWithFallback.java @@ -31,6 +31,7 @@ import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import reactor.core.Disposable; +import reactor.core.publisher.Mono; public class JavaProjectsServiceWithFallback implements JavaProjectsService { @@ -80,7 +81,9 @@ public class JavaProjectsServiceWithFallback implements JavaProjectsService { this.mainServiceInitialized = this.server .onInitialized(main.initialize()) - .timeout(Duration.ofSeconds(5)) + .doOnError(error -> { + log.warn("JDT-based JavaProject service not available, will use fallback service", error); + }) .toFuture(); this.server.onShutdown(() -> { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java index a77c4b5c2..f419f68d5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/jdt/ls/JdtLsProjectCache.java @@ -16,6 +16,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; +import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -214,7 +215,7 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { @Override public Mono initialize() { - return server.addClasspathListener(new ClasspathListener() { + return Mono.defer(() -> server.addClasspathListener(new ClasspathListener() { @Override public void changed(Event event) { log.debug("claspath event received {}", event); @@ -254,7 +255,9 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { } }); } - }).doOnError(t -> { + }) + .timeout(Duration.ofSeconds(5)) + .doOnError(t -> { if (isNoJdtError(t)) { log.info("JDT Language Server not available. Fallback classpath provider will be used instead."); } else if (isOldJdt(t)) { @@ -262,7 +265,7 @@ public class JdtLsProjectCache implements InitializableJavaProjectsService { } else { log.error("Unexpected error registering classpath listener with JDT. Fallback classpath provider will be used instead.", t); } - }); + })); } @Override