Skip to content

Commit ae340e9

Browse files
committed
refresh modulith metadata before creating the project structure tree (in case of a full refresh)
1 parent 82e7da3 commit ae340e9

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@
1010
*******************************************************************************/
1111
package org.springframework.ide.vscode.boot.java.commands;
1212

13+
import java.time.Duration;
1314
import java.util.Collection;
1415
import java.util.List;
16+
import java.util.concurrent.CompletableFuture;
17+
import java.util.concurrent.TimeUnit;
1518
import java.util.function.BiConsumer;
1619

1720
import org.jmolecules.stereotype.catalog.support.AbstractStereotypeCatalog;
1821
import org.jmolecules.stereotype.tooling.HierarchicalNodeHandler;
1922
import org.jmolecules.stereotype.tooling.ProjectTree;
23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
2025
import org.springframework.ide.vscode.boot.java.commands.ApplicationModulesStructureProvider.SimpleApplicationModulesStructureProvider;
2126
import org.springframework.ide.vscode.boot.java.commands.JsonNodeHandler.Node;
2227
import org.springframework.ide.vscode.boot.java.links.SourceLinks;
@@ -27,6 +32,8 @@
2732

2833
public class ModulithStructureView {
2934

35+
private static final Logger log = LoggerFactory.getLogger(ModulithStructureView.class);
36+
3037
private final AbstractStereotypeCatalog catalog;
3138
private final CachedSpringMetamodelIndex springIndex;
3239
private final ModulithService modulithService;
@@ -39,10 +46,21 @@ public ModulithStructureView(AbstractStereotypeCatalog catalog, CachedSpringMeta
3946
this.modulithService = modulithService;
4047
}
4148

42-
public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory, Collection<String> selectedGroups) {
49+
public Node createTree(IJavaProject project, IndexBasedStereotypeFactory factory, Collection<String> selectedGroups, boolean updateMetadata) {
4350

4451
var adapter = new ModulithStereotypeFactoryAdapter(factory);
4552

53+
if (updateMetadata) {
54+
log.info("update modulith metadata when reloading structure view for project: " + project.getElementName());
55+
56+
CompletableFuture<Boolean> requestMetadata = modulithService.requestMetadata(project, Duration.ofMinutes(0));
57+
try {
58+
requestMetadata.get(5, TimeUnit.SECONDS);
59+
} catch (Exception e) {
60+
log.error("update modulith metadata when reloading structure view failed for project: " + project.getElementName(), e);
61+
}
62+
}
63+
4664
AppModules modulesData = modulithService.getModulesData(project);
4765
if (modulesData == null) {
4866
// TODO; logging

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ private Node nodeFrom(IJavaProject project, CachedSpringMetamodelIndex springInd
115115
}
116116

117117
if (ModulithService.isModulithDependentProject(project) && StructureViewUtil.hasModulithStructureViewEnabled()) {
118-
return new ModulithStructureView(catalog, springIndex, sourceLinks, modulithService).createTree(project, factory, selectedGroups);
118+
return new ModulithStructureView(catalog, springIndex, sourceLinks, modulithService).createTree(project, factory, selectedGroups, updateMetadata);
119119
}
120120
else {
121121
return new JMoleculesStructureView(catalog, springIndex, sourceLinks).createTree(project, factory, selectedGroups);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ private CompletableFuture<Boolean> refreshMetadata(IJavaProject project) {
247247
server.getClient().showMessage(new MessageParams(MessageType.Error, "Project '" + project.getElementName() + "' output folder does not contain any '.class' files. Consider re-building."));
248248
return CompletableFuture.completedFuture(false);
249249
}
250-
clearMetadataRequest(project);
250+
251251
return requestMetadata(project, Duration.ZERO).whenComplete((refreshed, throwable) -> {
252252
if (throwable != null) {
253253
server.getClient().showMessage(new MessageParams(MessageType.Error, "Project '" + project.getElementName() + "' Modulith metadata refresh has failed. " + throwable.getMessage()));
@@ -261,7 +261,7 @@ private CompletableFuture<Boolean> refreshMetadata(IJavaProject project) {
261261
});
262262
}
263263

264-
CompletableFuture<Boolean> requestMetadata(IJavaProject p, Duration delay) {
264+
public CompletableFuture<Boolean> requestMetadata(IJavaProject p, Duration delay) {
265265
clearMetadataRequest(p);
266266
CompletableFuture<Boolean> f = loadModulesMetadata(p, delay).thenApply(appModules -> updateAppModulesCache(p, appModules));
267267
metadataRequested.put(p.getLocationUri(), f);

0 commit comments

Comments
 (0)