diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java index fbeb5921a..73dc1136c 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/CompositeJavaProjectFinder.java @@ -47,7 +47,13 @@ public class CompositeJavaProjectFinder implements JavaProjectFinder { @Override public Optional find(TextDocumentIdentifier doc) { - return projectFinders.stream().map(finder -> finder.find(doc)).filter(Optional::isPresent).findFirst().orElseGet(() -> Optional.empty()); + for (JavaProjectFinder finder : projectFinders) { + Optional project = finder.find(doc); + if (project.isPresent()) { + return project; + } + } + return Optional.empty(); } } 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 1964fac22..4bc3d4ff0 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 @@ -108,28 +108,30 @@ public class JdtLsProjectCache implements JavaProjectsService { @Override public void addListener(Listener listener) { - Assert.isLegal(initialized.isDone()); //Adding / removing listeners prior to inialization isn't supported. (If this is really needed, it can be - // bit its a bit trickier to implement that correctly) - if (initialized.isCompletedExceptionally()) { - fallback.addListener(listener); - } else { - synchronized (listeners) { - listeners.add(listener); + initialized.handle((success, failed) -> { + if (failed!=null) { + fallback.addListener(listener); + } else { + synchronized (listeners) { + listeners.add(listener); + } } - } + return null; + }); } @Override public void removeListener(Listener listener) { - Assert.isLegal(initialized.isDone()); //Adding / removing listeners prior to inialization isn't supported. (If this is really needed, it can be - // bit its a bit trickier to implement that correctly) - if (initialized.isCompletedExceptionally()) { - fallback.removeListener(listener); - } else { - synchronized (listeners) { - listeners.remove(listener); + initialized.handle((success, failed) -> { + if (failed!=null) { + fallback.removeListener(listener); + } else { + synchronized (listeners) { + listeners.remove(listener); + } } - } + return null; + }); } private void notifyDelete(JdtLsProject deleted) {