Final fix for symbol indexer config
This commit is contained in:
@@ -175,13 +175,16 @@ public class SpringSymbolIndex implements InitializingBean {
|
||||
this.updateDocument(docURI, content, "didSave event");
|
||||
}
|
||||
});
|
||||
config.addListener(evt -> {
|
||||
this.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(config.isSpringXMLSupportEnabled())
|
||||
.xmlScanFoldersGlobs(config.xmlBeansFoldersToScan())
|
||||
.scanTestJavaSources(config.isScanJavaTestSourcesEnabled())
|
||||
.build());
|
||||
});
|
||||
config.addListener(evt ->
|
||||
server.getAsync().execute(() ->
|
||||
configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(config.isSpringXMLSupportEnabled())
|
||||
.xmlScanFoldersGlobs(config.xmlBeansFoldersToScan())
|
||||
.scanTestJavaSources(config.isScanJavaTestSourcesEnabled())
|
||||
.build()
|
||||
)
|
||||
)
|
||||
);
|
||||
server.doOnInitialized(this::serverInitialized);
|
||||
server.onShutdown(this::shutdown);
|
||||
}
|
||||
@@ -200,44 +203,40 @@ public class SpringSymbolIndex implements InitializingBean {
|
||||
});
|
||||
}
|
||||
|
||||
public CompletableFuture<Void> configureIndexer(SymbolIndexConfig config) {
|
||||
List<CompletableFuture<?>> futuresList = new ArrayList<>();
|
||||
public void configureIndexer(SymbolIndexConfig config) {
|
||||
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<String> globPattern = Arrays.asList(springIndexerXML.getFileWatchPatterns());
|
||||
watchXMLDeleteRegistration = getWorkspaceService().getFileObserver().onFileDeleted(globPattern, (file) -> {
|
||||
deleteDocument(new TextDocumentIdentifier(file).getUri());
|
||||
});
|
||||
watchXMLCreatedRegistration = getWorkspaceService().getFileObserver().onFileCreated(globPattern, (file) -> {
|
||||
createDocument(new TextDocumentIdentifier(file).getUri());
|
||||
});
|
||||
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};
|
||||
futuresList.add(server.getAsync().execute(() -> {
|
||||
springIndexerXML.setScanFolderGlobs(new String[0]);
|
||||
this.indexers = new SpringIndexer[] { springIndexerJava, springIndexerXML };
|
||||
springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs());
|
||||
List<String> globPattern = Arrays.asList(springIndexerXML.getFileWatchPatterns());
|
||||
watchXMLDeleteRegistration = getWorkspaceService().getFileObserver().onFileDeleted(globPattern,
|
||||
(file) -> {
|
||||
deleteDocument(new TextDocumentIdentifier(file).getUri());
|
||||
});
|
||||
watchXMLCreatedRegistration = getWorkspaceService().getFileObserver().onFileCreated(globPattern,
|
||||
(file) -> {
|
||||
createDocument(new TextDocumentIdentifier(file).getUri());
|
||||
});
|
||||
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 };
|
||||
springIndexerXML.setScanFolderGlobs(new String[0]);
|
||||
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLChangedRegistration);
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLCreatedRegistration);
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLDeleteRegistration);
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLChangedRegistration);
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLCreatedRegistration);
|
||||
getWorkspaceService().getFileObserver().unsubscribe(watchXMLDeleteRegistration);
|
||||
|
||||
watchXMLChangedRegistration = null;
|
||||
watchXMLCreatedRegistration = null;
|
||||
watchXMLDeleteRegistration = null;
|
||||
}));
|
||||
watchXMLChangedRegistration = null;
|
||||
watchXMLCreatedRegistration = null;
|
||||
watchXMLDeleteRegistration = null;
|
||||
} else if (config.isScanXml()) {
|
||||
futuresList.add(CompletableFuture.runAsync(() -> springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs())));
|
||||
springIndexerXML.setScanFolderGlobs(config.getXmlScanFoldersGlobs());
|
||||
}
|
||||
futuresList.add(server.getAsync().execute(() -> springIndexerJava.setScanTestJavaSources(config.isScanTestJavaSources())));
|
||||
springIndexerJava.setScanTestJavaSources(config.isScanTestJavaSources());
|
||||
}
|
||||
return CompletableFuture.allOf(futuresList.toArray(new CompletableFuture<?>[futuresList.size()]));
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
|
||||
@@ -53,7 +53,7 @@ public class SpringIndexerMultiProjectTest {
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
harness.intialize(null);
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanXml(false).build()).get(5, TimeUnit.SECONDS);
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanXml(false).build());
|
||||
|
||||
projectUri1 = UriUtil.toUri(new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-large-multiproject-1/").toURI())).toString();
|
||||
projectFinder.find(new TextDocumentIdentifier(projectUri1)).get();
|
||||
|
||||
@@ -60,7 +60,7 @@ public class SpringIndexerTest {
|
||||
@Before
|
||||
public void setup() throws Exception {
|
||||
harness.intialize(null);
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanXml(false).build()).get(5, TimeUnit.SECONDS);;
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanXml(false).build());
|
||||
|
||||
directory = new File(ProjectsHarness.class.getResource("/test-projects/test-annotation-indexing-parent/test-annotation-indexing/").toURI());
|
||||
projectDir = directory.toURI().toString();
|
||||
@@ -96,14 +96,14 @@ public class SpringIndexerTest {
|
||||
|
||||
@Test
|
||||
public void testScanTestJavaSources() throws Exception {
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanTestJavaSources(true).build()).get(1, TimeUnit.SECONDS);
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanTestJavaSources(true).build());
|
||||
|
||||
List<? extends SymbolInformation> allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(8, allSymbols.size());
|
||||
String docUri = directory.toPath().resolve("src/test/java/demo/ApplicationTests.java").toUri().toString();
|
||||
assertTrue(containsSymbol(allSymbols, "@SpringBootTest", docUri, 8, 0, 8, 15));
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanTestJavaSources(false).build()).get(1, TimeUnit.SECONDS);
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder().scanTestJavaSources(false).build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(7, allSymbols.size());
|
||||
assertFalse(containsSymbol(allSymbols, "@SpringBootTest", docUri, 8, 0, 8, 15));
|
||||
|
||||
@@ -59,8 +59,7 @@ public class SpringIndexerXMLProjectTest {
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(true)
|
||||
.xmlScanFoldersGlobs(new String[] { "**/src/main/**", "**/config" })
|
||||
.build())
|
||||
.get(5, TimeUnit.SECONDS);;
|
||||
.build());
|
||||
|
||||
project = projects.mavenProject("test-annotation-indexing-xml-project");
|
||||
harness.useProject(project);
|
||||
@@ -124,40 +123,35 @@ public class SpringIndexerXMLProjectTest {
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(true)
|
||||
.build())
|
||||
.get(2, TimeUnit.SECONDS);;
|
||||
.build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(0, allSymbols.size());
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(true)
|
||||
.xmlScanFoldersGlobs(new String[] { "**/src/main/**" })
|
||||
.build())
|
||||
.get(2, TimeUnit.SECONDS);
|
||||
.build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(1, allSymbols.size());
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(true)
|
||||
.xmlScanFoldersGlobs(new String[] { "**/config", "**/src/main/**" })
|
||||
.build())
|
||||
.get(2, TimeUnit.SECONDS);
|
||||
.build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(5, allSymbols.size());
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(true)
|
||||
.xmlScanFoldersGlobs(new String[] { "**/config" })
|
||||
.build())
|
||||
.get(2, TimeUnit.SECONDS);
|
||||
.build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(4, allSymbols.size());
|
||||
|
||||
indexer.configureIndexer(SymbolIndexConfig.builder()
|
||||
.scanXml(false)
|
||||
.xmlScanFoldersGlobs(new String[] { "**/config", "**/src/main/**" })
|
||||
.build())
|
||||
.get(2, TimeUnit.SECONDS);
|
||||
.build());
|
||||
allSymbols = indexer.getAllSymbols("");
|
||||
assertEquals(0, allSymbols.size());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user