diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/jdt/ls/ClasspathListenerManager.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/jdt/ls/ClasspathListenerManager.java index 17b36692b..c60ba0126 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/jdt/ls/ClasspathListenerManager.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/jdt/ls/ClasspathListenerManager.java @@ -84,11 +84,19 @@ public class ClasspathListenerManager { // Cleanups: return () -> { - unregisterCommand.dispose(); - thenLog(log, this.server.getClient().removeClasspathListener(new ClasspathListenerParams(callbackCommandId))); - thenLog(log, this.server.getClient().unregisterCapability(new UnregistrationParams(ImmutableList.of( - new Unregistration(registrationId, WORKSPACE_EXECUTE_COMMAND) - )))); + try { + log.info("Unregistering classpath callback "+callbackCommandId +" ..."); + this.server.getClient().removeClasspathListener( + new ClasspathListenerParams(callbackCommandId) + ).join(); + log.info("Unregistering classpath callback "+callbackCommandId +" OK"); + this.server.getClient().unregisterCapability(new UnregistrationParams(ImmutableList.of( + new Unregistration(registrationId, WORKSPACE_EXECUTE_COMMAND) + ))).join(); + unregisterCommand.dispose(); + } catch (Exception e) { + log.error("", e); + } }; } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index 1f4ee4e31..85aa7186b 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -432,12 +432,14 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA @Override public CompletableFuture shutdown() { + return async.invoke(() -> { Runnable h = shutdownHandler; if (h!=null) { h.run(); } getWorkspaceService().dispose(); - return CompletableFuture.completedFuture(new Object()); + return "OK"; + }); } @Override 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 a631258b4..f9a5c2a6c 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 @@ -76,7 +76,7 @@ public class JdtLsProjectCache implements JavaProjectFinder, ProjectObserver { })) ); this.server.onShutdown(() -> - disposable.thenAccept(Disposable::dispose) + disposable.thenAccept(Disposable::dispose).join() ); } diff --git a/vscode-extensions/commons-vscode/src/classpath.ts b/vscode-extensions/commons-vscode/src/classpath.ts index 95ac14c64..4910c66bd 100644 --- a/vscode-extensions/commons-vscode/src/classpath.ts +++ b/vscode-extensions/commons-vscode/src/classpath.ts @@ -6,10 +6,16 @@ import { LanguageClient, RequestType } from 'vscode-languageclient'; export function registerClasspathService(client : LanguageClient) : void { - let classpathListenerRequest = new RequestType("sts/addClasspathListener"); - client.onRequest(classpathListenerRequest, async (params: ClasspathListenerParams) => { + let addRequest = new RequestType("sts/addClasspathListener"); + client.onRequest(addRequest, async (params: ClasspathListenerParams) => { return await VSCode.commands.executeCommand("java.execute.workspaceCommand", "sts.java.addClasspathListener", params.callbackCommandId); }); + + let removeRequest = new RequestType("sts/removeClasspathListener"); + client.onRequest(removeRequest, async (params: ClasspathListenerParams) => { + return await VSCode.commands.executeCommand("java.execute.workspaceCommand", "sts.java.removeClasspathListener", params.callbackCommandId); + }); + } interface ClasspathListenerParams { diff --git a/vscode-extensions/vscode-spring-boot/lib/Main.ts b/vscode-extensions/vscode-spring-boot/lib/Main.ts index 6673402a2..07de35d22 100644 --- a/vscode-extensions/vscode-spring-boot/lib/Main.ts +++ b/vscode-extensions/vscode-spring-boot/lib/Main.ts @@ -20,7 +20,7 @@ const JAVA_LANGUAGE_ID = "java"; export function activate(context: VSCode.ExtensionContext) { let options : commons.ActivatorOptions = { DEBUG: false, - CONNECT_TO_LS: false, + CONNECT_TO_LS: true, extensionId: 'vscode-spring-boot', preferJdk: true, checkjvm: (context: VSCode.ExtensionContext, jvm: commons.JVM) => {