added noop operation to spring indexer API to allow consumers to wait for other items to be completed

This commit is contained in:
Martin Lippert
2018-04-30 15:12:28 +02:00
parent 28c4cbbda4
commit e0274c1618
8 changed files with 40 additions and 19 deletions

View File

@@ -283,6 +283,19 @@ public class SpringIndexer {
List<SymbolAddOnInformation> 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<Void> waitOperation() {
return CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
}
}, this.updateQueue);
}
private List<SymbolInformation> searchMatchingSymbols(List<SymbolInformation> allsymbols, String query) {
return allsymbols.stream()

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
// trigger project creation
harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get();
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
// trigger project creation
harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get();
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
// trigger project creation
harness.getServerWrapper().getComponents().getProjectFinder().find(new TextDocumentIdentifier(projectDir)).get();
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}

View File

@@ -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<Void> initProject = indexer.initializeProject(project);
CompletableFuture<Void> initProject = indexer.waitOperation();
initProject.get(5, TimeUnit.SECONDS);
}