diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/AsyncRunner.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/AsyncRunner.java index 859456cf3..776ee011a 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/AsyncRunner.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/AsyncRunner.java @@ -24,7 +24,8 @@ public class AsyncRunner { private static Scheduler executor = Schedulers.newSingle("STS4 Thread"); - // Only need to remember the last request as requests are executed in order, if + // Used in test harness to wait for all pending request to finish. + // We only need to remember the last request as requests are executed in order, so if // the last request is done, all requests are done private CompletableFuture lastRequest; @@ -51,10 +52,15 @@ public class AsyncRunner { } public synchronized CompletableFuture execute(RunnableWithException runnable) { - CompletableFuture x = Mono.fromCallable(() -> { - runnable.run(); - return (Void)null; - }).subscribeOn(executor).toFuture(); + CompletableFuture x = Mono.fromRunnable(() -> { + try { + runnable.run(); + } catch (Exception e) { + throw new RuntimeException(e); + } + }) + .subscribeOn(executor) + .toFuture(); lastRequest = x; return x; } 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 8cfd5c66f..1f4ee4e31 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 @@ -188,12 +188,12 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA (String)params.getArguments().get(0), params.getArguments().get(1) ); return quickfixResolve(quickfixParams) - .then((QuickfixEdit edit) -> { + .flatMap((QuickfixEdit edit) -> { Mono applyEdit = Mono.fromFuture(client.applyEdit(new ApplyWorkspaceEditParams(edit.workspaceEdit))); Mono moveCursor = edit.cursorMovement==null ? Mono.just(new ApplyWorkspaceEditResponse(true)) : Mono.fromFuture(client.moveCursor(edit.cursorMovement)); - return applyEdit.then(r -> r.getApplied() ? moveCursor : Mono.just(new ApplyWorkspaceEditResponse(true))); + return applyEdit.flatMap(r -> r.getApplied() ? moveCursor : Mono.just(new ApplyWorkspaceEditResponse(true))); }) .toFuture(); } @@ -568,7 +568,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA // } engine.reconcile(doc, problems); }) - .otherwise(error -> { + .onErrorResume(error -> { Log.log(error); return Mono.empty(); }) diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml index e24ec1782..9ecba6fb3 100644 --- a/headless-services/commons/pom.xml +++ b/headless-services/commons/pom.xml @@ -81,7 +81,7 @@ 2.10 0.4.0-SNAPSHOT - 3.0.5.RELEASE + 3.1.5.RELEASE 0.6.0.RELEASE 2.4.0.RELEASE 2.4