Skip to content

Commit b81a224

Browse files
committed
Attempt to fix failing XML HyperLink unit test
1 parent cc06fd9 commit b81a224

File tree

4 files changed

+39
-29
lines changed

4 files changed

+39
-29
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -387,28 +387,29 @@ private CompletableFuture<Void> _initializeProject(IJavaProject project, boolean
387387
log.debug("Project with NULL name is being initialized");
388388
return CompletableFuture.completedFuture(null);
389389
} else {
390+
synchronized(this) { // synchronized since the `indexers` array can change via a settings change
391+
@SuppressWarnings("unchecked")
392+
CompletableFuture<Void>[] futures = new CompletableFuture[this.indexers.length + 1];
393+
394+
// clean future
395+
futures[0] = CompletableFuture.runAsync(() -> {
396+
removeSymbolsByProject(project);
397+
springIndex.removeBeans(project.getElementName());
398+
}, this.updateQueue);
399+
400+
// index futures
401+
for (int i = 0; i < this.indexers.length; i++) {
402+
InitializeProject initializeItem = new InitializeProject(project, this.indexers[i], clean);
403+
futures[i + 1] = CompletableFuture.runAsync(initializeItem, this.updateQueue);
404+
}
405+
406+
CompletableFuture<Void> future = CompletableFuture.allOf(futures);
407+
408+
future = future.thenAccept(v -> server.getClient().indexUpdated()).thenAccept(v -> listeners.fire(v));
390409

391-
@SuppressWarnings("unchecked")
392-
CompletableFuture<Void>[] futures = new CompletableFuture[this.indexers.length + 1];
393-
394-
// clean future
395-
futures[0] = CompletableFuture.runAsync(() -> {
396-
removeSymbolsByProject(project);
397-
springIndex.removeBeans(project.getElementName());
398-
}, this.updateQueue);
399-
400-
// index futures
401-
for (int i = 0; i < this.indexers.length; i++) {
402-
InitializeProject initializeItem = new InitializeProject(project, this.indexers[i], clean);
403-
futures[i + 1] = CompletableFuture.runAsync(initializeItem, this.updateQueue);
410+
this.latestScheduledTaskByProject.put(project.getElementName(), future);
411+
return future;
404412
}
405-
406-
CompletableFuture<Void> future = CompletableFuture.allOf(futures);
407-
408-
future = future.thenAccept(v -> server.getClient().indexUpdated()).thenAccept(v -> listeners.fire(v));
409-
410-
this.latestScheduledTaskByProject.put(project.getElementName(), future);
411-
return future;
412413
}
413414
} else {
414415
return deleteProject(project);
@@ -715,15 +716,17 @@ public List<? extends WorkspaceSymbol> getSymbols(String docURI) {
715716
ImmutableList.Builder<WorkspaceSymbol> builder = ImmutableList.builder();
716717
if (project != null && doc != null) {
717718
// Collect symbols from the opened document
718-
for (SpringIndexer indexer : this.indexers) {
719-
if (indexer.isInterestedIn(docURI)) {
720-
try {
721-
for (EnhancedSymbolInformation enhanced : indexer.computeSymbols(project, docURI,
722-
doc.get())) {
723-
builder.add(enhanced.getSymbol());
719+
synchronized(this) {
720+
for (SpringIndexer indexer : this.indexers) {
721+
if (indexer.isInterestedIn(docURI)) {
722+
try {
723+
for (EnhancedSymbolInformation enhanced : indexer.computeSymbols(project, docURI,
724+
doc.get())) {
725+
builder.add(enhanced.getSymbol());
726+
}
727+
} catch (Exception e) {
728+
log.error("{}", e);
724729
}
725-
} catch (Exception e) {
726-
log.error("{}", e);
727730
}
728731
}
729732
}

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLBeanRefContentAssistTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ public void setup() throws Exception {
7373
settings.put("boot-java", bootJavaObj);
7474

7575
harness.changeConfiguration(new Settings(new Gson().toJsonTree(settings)));
76+
// Configuration change updates indexer hence we need to wait until this occurs as well
77+
indexer.waitOperation();
7678

7779
directory = new File(ProjectsHarness.class.getResource("/test-projects/test-xml-hyperlinks/").toURI());
7880

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLBeansHyperlinkTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public void setup() throws Exception {
100100
settings.put("boot-java", bootJavaObj);
101101

102102
harness.changeConfiguration(new Settings(new Gson().toJsonTree(settings)));
103+
// Configuration change updates indexer hence we need to wait until this occurs as well
104+
indexer.waitOperation();
103105

104106
project = projects.mavenProject("test-xml-hyperlinks");
105107

@@ -178,8 +180,9 @@ void testBeanPropertyNameFromSuperClassHyperlink() throws Exception {
178180
@Test
179181
// @Disabled
180182
void testBeanRefHyperlink() throws Exception {
183+
assertEquals(springIndex.getBeans().length, 4);
184+
181185
Bean[] beans = springIndex.getBeansWithName(project.getElementName(), "simpleObj");
182-
183186
assertEquals(1, beans.length);
184187
assertEquals("simpleObj", beans[0].getName());
185188
assertEquals("u.t.r.SimpleObj", beans[0].getType());

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/xml/test/XMLContentAssistTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ public void setup() throws Exception {
7878
settings.put("boot-java", bootJavaObj);
7979

8080
harness.changeConfiguration(new Settings(new Gson().toJsonTree(settings)));
81+
// Configuration change updates indexer hence we need to wait until this occurs as well
82+
indexer.waitOperation();
8183

8284
project = projects.mavenProject("test-xml-hyperlinks");
8385

0 commit comments

Comments
 (0)