From 4a075f243326b10fef01557aff02b1764a06ca4d Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 31 Jan 2017 11:45:29 -0800 Subject: [PATCH] Don't block CA completely when there's a 'slow' provider in the mix. --- .../commons/languageserver/LaunguageServerApp.java | 2 +- .../completion/VscodeCompletionEngineAdapter.java | 4 ++-- .../vscode/manifest/yaml/ManifestYmlSchema.java | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/LaunguageServerApp.java b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/LaunguageServerApp.java index f62aef438..7e43c4b78 100644 --- a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/LaunguageServerApp.java +++ b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/LaunguageServerApp.java @@ -204,7 +204,7 @@ public abstract class LaunguageServerApp { } } - protected static final Logger LOG = Logger.getLogger("main"); + public static final Logger LOG = Logger.getLogger("main"); /** * Listen for requests from the parent node process. diff --git a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java index a5079232e..43ab566d0 100644 --- a/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java +++ b/vscode-extensions/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java @@ -48,7 +48,6 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { private SimpleLanguageServer server; private ICompletionEngine engine; - public VscodeCompletionEngineAdapter(SimpleLanguageServer server, ICompletionEngine engine) { this.server = server; this.engine = engine; @@ -64,6 +63,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { } private Mono getCompletionsMono(TextDocumentPositionParams params) { + logger.info("getCompletions(" + params +")"); SimpleTextDocumentService documents = server.getTextDocumentService(); TextDocument doc = documents.get(params).copy(); if (doc!=null) { @@ -95,7 +95,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { list.setItems(items); return list; }) - .subscribeOn(Schedulers.single()); //!!! without this the mono will just be computed on the same thread that calls it. + .subscribeOn(Schedulers.elastic()); //!!! without this the mono will just be computed on the same thread that calls it. } return Mono.just(SimpleTextDocumentService.NO_COMPLETIONS); } diff --git a/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYmlSchema.java b/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYmlSchema.java index 86d2eb6f1..20718fa68 100644 --- a/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYmlSchema.java +++ b/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYmlSchema.java @@ -14,6 +14,7 @@ import java.util.Collection; import java.util.Set; import java.util.concurrent.Callable; +import org.springframework.ide.vscode.commons.languageserver.LaunguageServerApp; import org.springframework.ide.vscode.commons.util.IntegerRange; import org.springframework.ide.vscode.commons.util.Renderable; import org.springframework.ide.vscode.commons.util.Renderables; @@ -27,6 +28,7 @@ import org.springframework.ide.vscode.commons.yaml.schema.YTypeUtil; import org.springframework.ide.vscode.commons.yaml.schema.YValueHint; import org.springframework.ide.vscode.commons.yaml.schema.YamlSchema; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; /** @@ -96,7 +98,19 @@ public class ManifestYmlSchema implements YamlSchema { TOPLEVEL_TYPE.addProperty(f.yprop("applications", f.yseq(application))); TOPLEVEL_TYPE.addProperty("inherit", t_string, descriptionFor("inherit")); +// YAtomicType t_test_hanging = f.yatomic("Hanging"); +// t_test_hanging.addHintProvider(() -> { +// try { +// Thread.sleep(60_000); +// } catch (InterruptedException e) { +// LaunguageServerApp.LOG.info("test_hanging hint provider interrupted!"); +// throw e; +// } +// return YTypeFactory.hints(ImmutableList.of("very", "slow", "hints")); +// }); + YTypedPropertyImpl[] props = { +// f.yprop("test_hanging", t_test_hanging), f.yprop("buildpack", t_buildpack), f.yprop("command", t_string), f.yprop("disk_quota", t_memory),