diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java index 3478682bc..af2e36fa6 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java @@ -201,14 +201,13 @@ public class SpringSymbolIndex implements InitializingBean { } public CompletableFuture configureIndexer(SymbolIndexConfig config) { - return CompletableFuture.runAsync(() -> { - synchronized (SpringSymbolIndex.this) { - if (config.isScanXml() && !(Arrays.asList(this.indexers).contains(springIndexerXML))) { - this.indexers = new SpringIndexer[] {springIndexerJava, springIndexerXML}; + List> futuresList = new ArrayList<>(); + synchronized (this) { + if (config.isScanXml() && !(Arrays.asList(this.indexers).contains(springIndexerXML))) { + this.indexers = new SpringIndexer[] {springIndexerJava, springIndexerXML}; + futuresList.add(server.getAsync().execute(() -> { springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs()); - List globPattern = Arrays.asList(springIndexerXML.getFileWatchPatterns()); - watchXMLDeleteRegistration = getWorkspaceService().getFileObserver().onFileDeleted(globPattern, (file) -> { deleteDocument(new TextDocumentIdentifier(file).getUri()); }); @@ -218,25 +217,27 @@ public class SpringSymbolIndex implements InitializingBean { watchXMLChangedRegistration = getWorkspaceService().getFileObserver().onFileChanged(globPattern, (file) -> { updateDocument(new TextDocumentIdentifier(file).getUri(), null, "xml changed"); }); - - } - else if (!config.isScanXml() && Arrays.asList(this.indexers).contains(springIndexerXML)) { - this.indexers = new SpringIndexer[] {springIndexerJava}; + })); + } + else if (!config.isScanXml() && Arrays.asList(this.indexers).contains(springIndexerXML)) { + this.indexers = new SpringIndexer[] {springIndexerJava}; + futuresList.add(server.getAsync().execute(() -> { springIndexerXML.setScanFolderGlobs(new String[0]); - + getWorkspaceService().getFileObserver().unsubscribe(watchXMLChangedRegistration); getWorkspaceService().getFileObserver().unsubscribe(watchXMLCreatedRegistration); getWorkspaceService().getFileObserver().unsubscribe(watchXMLDeleteRegistration); - + watchXMLChangedRegistration = null; watchXMLCreatedRegistration = null; watchXMLDeleteRegistration = null; - } else if (config.isScanXml()) { - springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs()); - } - springIndexerJava.setScanTestJavaSources(config.isScanTestJavaSources()); + })); + } else if (config.isScanXml()) { + futuresList.add(CompletableFuture.runAsync(() -> springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs()))); } - }); + futuresList.add(server.getAsync().execute(() -> springIndexerJava.setScanTestJavaSources(config.isScanTestJavaSources()))); + } + return CompletableFuture.allOf(futuresList.toArray(new CompletableFuture[futuresList.size()])); } public void shutdown() {