Make 'initialized' callbacks execute on async thread
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 () -> {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user