Skip to content

Commit c795f7b

Browse files
committed
GH-1626: pressing reload button on structure view triggers now reload of stereotype metadata
1 parent cbb8fdd commit c795f7b

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.jmolecules.stereotype.tooling.LabelUtils;
2121
import org.jmolecules.stereotype.tooling.ProjectTree;
2222
import org.jmolecules.stereotype.tooling.SimpleLabelProvider;
23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
2325
import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex;
2426
import org.springframework.ide.vscode.boot.java.Annotations;
2527
import org.springframework.ide.vscode.boot.java.commands.ToolsJsonNodeHandler.Node;
@@ -34,21 +36,37 @@
3436
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
3537
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
3638

39+
import com.google.gson.JsonPrimitive;
40+
3741
public class SpringIndexCommands {
3842

3943
private static final String SPRING_STRUCTURE_CMD = "sts/spring-boot/structure";
44+
private static final Logger log = LoggerFactory.getLogger(SpringIndexCommands.class);
4045

4146
private final SpringMetamodelIndex springIndex;
4247

4348
public SpringIndexCommands(SimpleLanguageServer server, SpringMetamodelIndex springIndex, JavaProjectFinder projectFinder, StereotypeCatalogRegistry stereotypeCatalogRegistry) {
4449
this.springIndex = springIndex;
4550

4651
server.onCommand(SPRING_STRUCTURE_CMD, params -> server.getAsync().invoke(() -> {
47-
return projectFinder.all().stream().map(project -> nodeFrom(stereotypeCatalogRegistry, springIndex, project)).filter(Objects::nonNull).collect(Collectors.toList());
52+
boolean updateMetadata =
53+
params.getArguments() != null
54+
&& params.getArguments().size() == 1
55+
&& params.getArguments().get(0) instanceof JsonPrimitive
56+
? ((JsonPrimitive) params.getArguments().get(0)).getAsBoolean() : false;
57+
58+
return projectFinder.all().stream().map(project -> nodeFrom(stereotypeCatalogRegistry, springIndex, project, updateMetadata)).filter(Objects::nonNull).collect(Collectors.toList());
4859
}));
4960
}
5061

51-
private Node nodeFrom(StereotypeCatalogRegistry stereotypeCatalogRegistry, SpringMetamodelIndex springIndex, IJavaProject project) {
62+
private Node nodeFrom(StereotypeCatalogRegistry stereotypeCatalogRegistry, SpringMetamodelIndex springIndex, IJavaProject project, boolean updateMetadata) {
63+
log.info("create structural view tree information for project: " + project.getElementName());
64+
65+
if (updateMetadata) {
66+
stereotypeCatalogRegistry.reset(project);
67+
log.info("stereotype registry reset for project: " + project.getElementName());
68+
}
69+
5270
var catalog = stereotypeCatalogRegistry.getCatalogOf(project);
5371
var factory = new IndexBasedStereotypeFactory(catalog, springIndex);
5472
factory.registerStereotypeDefinitions();

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ private AbstractStereotypeCatalog createCatalog(IJavaProject project) {
3434
return new JsonPathStereotypeCatalog(source);
3535
}
3636

37+
public void reset(IJavaProject project) {
38+
this.catalogs.remove(project.getElementName());
39+
}
40+
3741
}

vscode-extensions/vscode-spring-boot/lib/Main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ export function activate(context: ExtensionContext): Thenable<ExtensionAPI> {
181181
const structureManager = new StructureManager();
182182
const explorerTreeProvider = new ExplorerTreeProvider(structureManager);
183183
context.subscriptions.push(window.createTreeView('explorer.spring', { treeDataProvider: explorerTreeProvider, showCollapseAll: true }));
184-
context.subscriptions.push(commands.registerCommand("vscode-spring-boot.structure.refresh", () => structureManager.refresh()));
184+
context.subscriptions.push(commands.registerCommand("vscode-spring-boot.structure.refresh", () => structureManager.refresh(true)));
185185

186186
context.subscriptions.push(commands.registerCommand('vscode-spring-boot.ls.start', () => client.start().then(() => {
187187
// Boot LS is fully started
@@ -213,7 +213,7 @@ export function activate(context: ExtensionContext): Thenable<ExtensionAPI> {
213213

214214
const api = new ApiManager(client).api
215215

216-
context.subscriptions.push(api.getSpringIndex().onSpringIndexUpdated(e => structureManager.refresh()));
216+
context.subscriptions.push(api.getSpringIndex().onSpringIndexUpdated(e => structureManager.refresh(false)));
217217

218218
return api;
219219
});

vscode-extensions/vscode-spring-boot/lib/explorer/structure-tree-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ export class StructureManager {
1212
return this._rootElements;
1313
}
1414

15-
refresh(): void {
16-
this._rootElements = commands.executeCommand(SPRING_STRUCTURE_CMD).then(json => {
15+
refresh(updateMetadata: boolean): void {
16+
this._rootElements = commands.executeCommand(SPRING_STRUCTURE_CMD, updateMetadata).then(json => {
1717
const nodes = this.parseArray(json);
1818
this._onDidChange.fire(undefined);
1919
return nodes;

0 commit comments

Comments
 (0)