Final fix for symbol indexer config

This commit is contained in:
BoykoAlex
2019-09-16 11:49:07 -04:00
parent 5c35358451
commit 8c3d55e4ec
4 changed files with 47 additions and 54 deletions

View File

@@ -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() {

View File

@@ -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();

View File

@@ -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));

View File

@@ -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());
}