From 13b88242c020b25e769f0cf948f5a487fae746e2 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 27 Mar 2025 15:01:59 +0100 Subject: [PATCH] update document symbol converter to ignore non-symbol nodes without ignoring child nodes --- .../index/SpringIndexToSymbolsConverter.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/index/SpringIndexToSymbolsConverter.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/index/SpringIndexToSymbolsConverter.java index 18ca5aa24..4e6b81167 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/index/SpringIndexToSymbolsConverter.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/index/SpringIndexToSymbolsConverter.java @@ -14,9 +14,6 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.lsp4j.DocumentSymbol; -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.Range; -import org.eclipse.lsp4j.SymbolKind; import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexElement; import org.springframework.ide.vscode.commons.protocol.spring.SymbolElement; @@ -26,41 +23,40 @@ public class SpringIndexToSymbolsConverter { List result = new ArrayList<>(); for (SpringIndexElement indexElement : indexElements) { - result.add(createSymbol(indexElement)); + result.addAll(createSymbol(indexElement)); } return result; } - private static DocumentSymbol createSymbol(SpringIndexElement indexElement) { - - DocumentSymbol symbol = null; - if (indexElement instanceof SymbolElement symbolElement) { - symbol = symbolElement.getDocumentSymbol(); - } - else { - symbol = new DocumentSymbol(indexElement.toString(), SymbolKind.String, - new Range(new Position(), new Position()), - new Range(new Position(), new Position())); - } + private static List createSymbol(SpringIndexElement indexElement) { + List subTreeSymbols = new ArrayList<>(); List children = indexElement.getChildren(); + if (children != null && children.size() > 0) { - List childSymbols = new ArrayList<>(); - for (SpringIndexElement child : children) { - DocumentSymbol childSymbol = createSymbol(child); - if (childSymbol != null) { - childSymbols.add(childSymbol); + List childSymbols = createSymbol(child); + if (childSymbols != null) { + subTreeSymbols.addAll(childSymbols); } } - - if (childSymbols.size() > 0) { - symbol.setChildren(childSymbols); - } } - return symbol; + if (indexElement instanceof SymbolElement symbolElement) { + DocumentSymbol documentSymbol = symbolElement.getDocumentSymbol(); + if (subTreeSymbols.size() > 0) { + documentSymbol.setChildren(subTreeSymbols); + } + + return List.of(documentSymbol); + } + else { +// symbol = new DocumentSymbol(indexElement.toString(), SymbolKind.String, +// new Range(new Position(), new Position()), +// new Range(new Position(), new Position())); + return subTreeSymbols; + } } }