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; + } } }