Make 'initialized' callbacks execute on async thread

This commit is contained in:
Kris De Volder
2018-03-15 15:54:49 -07:00
parent f442c28bff
commit 64a45984ce
4 changed files with 21 additions and 4 deletions

View File

@@ -38,7 +38,7 @@ sp_cleanup.remove_redundant_type_arguments=false
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
sp_cleanup.remove_unnecessary_casts=true
sp_cleanup.remove_unnecessary_casts=false
sp_cleanup.remove_unnecessary_nls_tags=false
sp_cleanup.remove_unused_imports=false
sp_cleanup.remove_unused_local_variables=false

View File

@@ -67,8 +67,8 @@ public class ClasspathListenerManager {
CompletableFuture<Void> future2 = server.getClient().registerCapability(params);
// Wait for async work
//future1.join();
//future2.join();
future1.join();
future2.join();
// Cleanups:
return () -> {

View File

@@ -13,6 +13,7 @@ package org.springframework.ide.vscode.commons.languageserver.util;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import org.slf4j.Logger;
import org.springframework.ide.vscode.commons.util.RunnableWithException;
import reactor.core.publisher.Mono;
@@ -36,15 +37,25 @@ public class AsyncRunner {
return x;
}
public synchronized void withLog(Logger logger, RunnableWithException runnable) {
execute(runnable).handle((v, e) -> {
if (e!=null) {
logger.error("", e);
}
return null;
});
}
public synchronized CompletableFuture<Void> execute(RunnableWithException runnable) {
CompletableFuture<Void> x = Mono.fromCallable(() -> {
runnable.run();
return (Void) null;
return (Void)null;
}).subscribeOn(executor).toFuture();
lastRequest = x;
return x;
}
public synchronized void waitForAll() {
while (lastRequest != null) {
try {

View File

@@ -47,6 +47,8 @@ import org.eclipse.lsp4j.WorkspaceFoldersOptions;
import org.eclipse.lsp4j.WorkspaceServerCapabilities;
import org.eclipse.lsp4j.services.LanguageClient;
import org.eclipse.lsp4j.services.LanguageClientAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.commons.languageserver.DiagnosticService;
import org.springframework.ide.vscode.commons.languageserver.ProgressParams;
import org.springframework.ide.vscode.commons.languageserver.ProgressService;
@@ -90,6 +92,8 @@ import reactor.core.scheduler.Schedulers;
*/
public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientAware, ServiceNotificationsClient, SimpleLanguageServerWrapper {
private static Logger log = LoggerFactory.getLogger(SimpleLanguageServer.class);
private static final String WORKSPACE_FOLDERS_CAPABILITY_ID = UUID.randomUUID().toString();
public static final String WORKSPACE_FOLDERS_CAPABILITY_NAME = "workspace/didChangeWorkspaceFolders";
@@ -254,6 +258,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
@Override
public void initialized() {
async.withLog(log, () -> {
Registration registration = new Registration(WORKSPACE_FOLDERS_CAPABILITY_ID, WORKSPACE_FOLDERS_CAPABILITY_NAME, null);
RegistrationParams registrationParams = new RegistrationParams(Collections.singletonList(registration));
getClient().registerCapability(registrationParams);
@@ -261,6 +266,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
if (h!=null) {
h.run();
}
});
}
private List<WorkspaceFolder> getWorkspaceFolders(InitializeParams params) {