From e0274c1618b04303f0f4d09d3e5a877adb015941 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Mon, 30 Apr 2018 15:12:28 +0200 Subject: [PATCH] added noop operation to spring indexer API to allow consumers to wait for other items to be completed --- .../ide/vscode/boot/java/utils/SpringIndexer.java | 13 +++++++++++++ .../java/beans/test/SpringIndexerBeansTest.java | 7 ++++--- .../beans/test/SpringIndexerFunctionBeansTest.java | 7 ++++--- .../data/test/DataRepositorySymbolProviderTest.java | 7 ++++--- .../test/RequestMappingSymbolProviderTest.java | 7 ++++--- .../test/WebFluxCodeLensProviderTest.java | 7 ++++--- .../test/WebFluxMappingSymbolProviderTest.java | 7 ++++--- .../boot/java/utils/test/SpringIndexerTest.java | 4 +++- 8 files changed, 40 insertions(+), 19 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java index 2516ca5ec..d96678a78 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java @@ -283,6 +283,19 @@ public class SpringIndexer { List info = this.addonInformationByDoc.get(docURI); return info == null ? ImmutableList.of() : info; } + + /** + * inserts a noop operation into the worker/update quene, which allows invokers to use the + * returned future to wait for the queue items in the queue to be completed which got inserted before + * this noop. + */ + public CompletableFuture waitOperation() { + return CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + } + }, this.updateQueue); + } private List searchMatchingSymbols(List allsymbols, String query) { return allsymbols.stream() diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerBeansTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerBeansTest.java index c6ff2e79e..7be235f91 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerBeansTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerBeansTest.java @@ -23,7 +23,6 @@ import org.springframework.ide.vscode.boot.java.beans.BeansSymbolProvider; import org.springframework.ide.vscode.boot.java.beans.ComponentSymbolProvider; import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; @@ -50,9 +49,11 @@ public class SpringIndexerBeansTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerFunctionBeansTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerFunctionBeansTest.java index a4bcee028..fcc22690c 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerFunctionBeansTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/beans/test/SpringIndexerFunctionBeansTest.java @@ -23,7 +23,6 @@ import org.springframework.ide.vscode.boot.java.beans.BeansSymbolProvider; import org.springframework.ide.vscode.boot.java.beans.ComponentSymbolProvider; import org.springframework.ide.vscode.boot.java.handlers.SymbolProvider; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; @@ -50,9 +49,11 @@ public class SpringIndexerFunctionBeansTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-beans/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java index 7782ffb3c..1274aea64 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java @@ -24,7 +24,6 @@ import org.eclipse.lsp4j.TextDocumentIdentifier; import org.junit.Before; import org.junit.Test; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; @@ -46,9 +45,11 @@ public class DataRepositorySymbolProviderTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-spring-data-symbols/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java index 92af7d558..2dc2557f8 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java @@ -24,7 +24,6 @@ import org.eclipse.lsp4j.TextDocumentIdentifier; import org.junit.Before; import org.junit.Test; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; @@ -46,9 +45,11 @@ public class RequestMappingSymbolProviderTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java index 4abd30de2..6cb71101e 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java @@ -26,7 +26,6 @@ import org.eclipse.lsp4j.TextDocumentIdentifier; import org.junit.Before; import org.junit.Test; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.util.text.LanguageId; import org.springframework.ide.vscode.languageserver.testharness.TextDocumentInfo; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; @@ -51,9 +50,11 @@ public class WebFluxCodeLensProviderTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-webflux-project/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxMappingSymbolProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxMappingSymbolProviderTest.java index 794d2fe1a..df31ff283 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxMappingSymbolProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxMappingSymbolProviderTest.java @@ -28,7 +28,6 @@ import org.junit.Test; import org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation; import org.springframework.ide.vscode.boot.java.requestmapping.WebfluxHandlerInformation; import org.springframework.ide.vscode.boot.java.utils.SpringIndexer; -import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; import org.springframework.ide.vscode.project.harness.ProjectsHarness; @@ -51,9 +50,11 @@ public class WebFluxMappingSymbolProviderTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-webflux-project/").toURI()); String projectDir = directory.toURI().toString(); - IJavaProject project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + // trigger project creation + harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); + + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java index 0a2a54c23..828db0bf9 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java @@ -53,9 +53,11 @@ public class SpringIndexerTest { directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI()); projectDir = directory.toURI().toString(); + + // trigger project creation project = harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get(); - CompletableFuture initProject = indexer.initializeProject(project); + CompletableFuture initProject = indexer.waitOperation(); initProject.get(5, TimeUnit.SECONDS); }