From f92a7a5b89d0967c44fd459f04aaf31093ead9f9 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 20 Feb 2025 14:34:27 +0100 Subject: [PATCH] GH-1431: compute document symbols directly instead of going through workspace symbols --- .../CompositeLanguageServerComponents.java | 6 +- .../util/DocumentSymbolHandler.java | 6 +- .../HierarchicalDocumentSymbolHandler.java | 42 -------- .../util/SimpleTextDocumentService.java | 18 +--- ...ypeBasedYamlHierarchicalSymbolHandler.java | 14 +-- .../reconcile/TypeBasedYamlSymbolHandler.java | 24 ++--- .../ConcourseLanguageServerBootApp.java | 6 +- .../vscode/boot/app/SpringSymbolIndex.java | 97 +++++++++++++++++++ ...ringFactoriesLanguageServerComponents.java | 4 +- .../BootJavaLanguageServerComponents.java | 4 +- .../SpringXMLLanguageServerComponents.java | 4 +- 11 files changed, 133 insertions(+), 92 deletions(-) delete mode 100644 headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/HierarchicalDocumentSymbolHandler.java diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java index c31152b455..a0ad2fdf6a 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2024 Pivotal, Inc. + * Copyright (c) 2018, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -27,6 +27,7 @@ import org.eclipse.lsp4j.CodeLens; import org.eclipse.lsp4j.CodeLensParams; import org.eclipse.lsp4j.Command; +import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.HoverParams; @@ -34,7 +35,6 @@ import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.SemanticTokensLegend; import org.eclipse.lsp4j.SemanticTokensWithRegistrationOptions; -import org.eclipse.lsp4j.WorkspaceSymbol; import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.springframework.context.ApplicationContext; @@ -192,7 +192,7 @@ public List handle(TextDocument doc, Range r, CancelChecker token) { this.docSymbolHandler = new DocumentSymbolHandler() { @Override - public List handle(DocumentSymbolParams params) { + public List handle(DocumentSymbolParams params) { TextDocument doc = getDoc(appContext, params.getTextDocument().getUri()); LanguageId language = doc.getLanguageId(); List subComponents = componentsByLanguageId.get(language); diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentSymbolHandler.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentSymbolHandler.java index 838cc79183..f73cf8efdd 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentSymbolHandler.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentSymbolHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017 Pivotal, Inc. + * Copyright (c) 2017, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,8 +12,8 @@ import java.util.List; +import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.DocumentSymbolParams; -import org.eclipse.lsp4j.WorkspaceSymbol; import com.google.common.collect.ImmutableList; @@ -22,6 +22,6 @@ public interface DocumentSymbolHandler { DocumentSymbolHandler NO_SYMBOLS = (params) -> ImmutableList.of(); - List handle(DocumentSymbolParams params); + List handle(DocumentSymbolParams params); } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/HierarchicalDocumentSymbolHandler.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/HierarchicalDocumentSymbolHandler.java deleted file mode 100644 index b72b6d3784..0000000000 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/HierarchicalDocumentSymbolHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2019 Pivotal, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Pivotal, Inc. - initial API and implementation - *******************************************************************************/ -package org.springframework.ide.vscode.commons.languageserver.util; - -import java.util.List; - -import org.eclipse.lsp4j.DocumentSymbol; -import org.eclipse.lsp4j.DocumentSymbolParams; -import org.eclipse.lsp4j.WorkspaceSymbol; - -import com.google.common.collect.ImmutableList; - -/** - * Note if you implement HierarchicalDocumentSymbolHandler you must also implement the 'legacy' - * non-hierarchical handler because this is used as a fallback when client doesn't support - * hierarchical symbols. - */ -public interface HierarchicalDocumentSymbolHandler extends DocumentSymbolHandler { - - HierarchicalDocumentSymbolHandler NO_SYMBOLS = new HierarchicalDocumentSymbolHandler() { - @Override - public List handle(DocumentSymbolParams params) { - return ImmutableList.of(); - } - - @Override - public List handleHierarchic(DocumentSymbolParams params) { - return ImmutableList.of(); - } - }; - - List handleHierarchic(DocumentSymbolParams params); - -} diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index 52b1e348f1..347a1cd00c 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2024 VMware Inc. + * Copyright (c) 2016, 2025 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -74,7 +74,6 @@ import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.VersionedTextDocumentIdentifier; import org.eclipse.lsp4j.WorkspaceEdit; -import org.eclipse.lsp4j.WorkspaceSymbol; import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.CompletableFutures; import org.eclipse.lsp4j.jsonrpc.messages.Either; @@ -433,21 +432,12 @@ public CompletableFuture>> docume // // cancelToken.checkCanceled(); // - if (server.hasHierarchicalDocumentSymbolSupport() && h instanceof HierarchicalDocumentSymbolHandler) { - List r = ((HierarchicalDocumentSymbolHandler)h).handleHierarchic(params); + List r = h.handle(params); //handle it when symbolHandler is sloppy and returns null instead of empty list. return r == null ? ImmutableList.of() - : r.stream().map(symbolInfo -> Either.forRight(symbolInfo)) - .collect(Collectors.toList()); - } else { - List r = h.handle(params); - //handle it when symbolHandler is sloppy and returns null instead of empty list. - return r == null - ? ImmutableList.of() - : r.stream().map(symbolInfo -> Either.forLeft(new SymbolInformation(symbolInfo.getName(), symbolInfo.getKind(), symbolInfo.getLocation().getLeft(), symbolInfo.getContainerName()))) - .collect(Collectors.toList()); - } + : r.stream().map(symbol -> Either.forRight(symbol)) + .collect(Collectors.toList()); }); } else { diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java index 640b4ca018..e108cd99a7 100644 --- a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java +++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlHierarchicalSymbolHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Pivotal, Inc. + * Copyright (c) 2019, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,10 +19,9 @@ import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.SymbolKind; -import org.eclipse.lsp4j.WorkspaceSymbol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.ide.vscode.commons.languageserver.util.HierarchicalDocumentSymbolHandler; +import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.text.DocumentRegion; import org.springframework.ide.vscode.commons.util.text.IDocument; @@ -40,7 +39,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; -public class TypeBasedYamlHierarchicalSymbolHandler implements HierarchicalDocumentSymbolHandler, ITypeCollector { +public class TypeBasedYamlHierarchicalSymbolHandler implements DocumentSymbolHandler, ITypeCollector { private static final Logger log = LoggerFactory.getLogger(TypeBasedYamlHierarchicalSymbolHandler.class); @@ -153,12 +152,7 @@ public TypeBasedYamlHierarchicalSymbolHandler(TypeBasedYamlSymbolHandler baseHan } @Override - public List handle(DocumentSymbolParams params) { - return baseHandler.handle(params); - } - - @Override - public List handleHierarchic(DocumentSymbolParams params) { + public List handle(DocumentSymbolParams params) { return outlineByUri.get(params.getTextDocument().getUri()); } diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlSymbolHandler.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlSymbolHandler.java index aadbcbda9c..a69fdfbe48 100644 --- a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlSymbolHandler.java +++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/reconcile/TypeBasedYamlSymbolHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2021 Pivotal, Inc. + * Copyright (c) 2017, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -15,11 +15,10 @@ import java.util.Map.Entry; import java.util.Set; +import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.DocumentSymbolParams; -import org.eclipse.lsp4j.Location; +import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.SymbolKind; -import org.eclipse.lsp4j.WorkspaceSymbol; -import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; @@ -63,8 +62,8 @@ public TypeBasedYamlSymbolHandler(SimpleTextDocumentService documents, ASTTypeCa } @Override - public List handle(DocumentSymbolParams params) { - Builder builder = ImmutableList.builder(); + public List handle(DocumentSymbolParams params) { + Builder builder = ImmutableList.builder(); TextDocument doc = documents.getLatestSnapshot(params.getTextDocument().getUri()); if (doc != null) { @@ -81,14 +80,17 @@ public List handle(DocumentSymbolParams params) { return builder.build(); } - protected WorkspaceSymbol createSymbol(TextDocument doc, Node node, YType type) throws BadLocationException { + protected DocumentSymbol createSymbol(TextDocument doc, Node node, YType type) throws BadLocationException { DocumentRegion region = NodeUtil.region(doc, node); - Location location = new Location(doc.getUri(), doc.toRange(region.getStart(), region.getLength())); - WorkspaceSymbol symbol = new WorkspaceSymbol(); + + Range range = doc.toRange(region.getStart(), region.getLength()); + + DocumentSymbol symbol = new DocumentSymbol(); symbol.setName(region.toString()); symbol.setKind(symbolKind(type)); - symbol.setLocation(Either.forLeft(location)); - symbol.setContainerName(containerName(type)); + symbol.setRange(range); + symbol.setSelectionRange(range); + return symbol; } diff --git a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java index 71ed426571..aa685eb2e9 100644 --- a/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java +++ b/headless-services/concourse-language-server/src/main/java/org/springframework/ide/vscode/concourse/ConcourseLanguageServerBootApp.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2019 Pivotal, Inc. + * Copyright (c) 2018, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -14,7 +14,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.ide.vscode.commons.languageserver.LanguageServerRunner; -import org.springframework.ide.vscode.commons.languageserver.util.HierarchicalDocumentSymbolHandler; +import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler; import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService; import org.springframework.ide.vscode.commons.util.LogRedirect; @@ -48,7 +48,7 @@ public static void main(String[] args) throws Exception { return new ASTTypeCache(); } - @Bean HierarchicalDocumentSymbolHandler documentSymbolHandler(SimpleTextDocumentService documents, ASTTypeCache astTypeCache, PipelineYmlSchema schema) { + @Bean DocumentSymbolHandler documentSymbolHandler(SimpleTextDocumentService documents, ASTTypeCache astTypeCache, PipelineYmlSchema schema) { TypeBasedYamlSymbolHandler baseHandler = new TypeBasedYamlSymbolHandler(documents, astTypeCache, schema.getDefinitionTypes()); return new TypeBasedYamlHierarchicalSymbolHandler(baseHandler, schema.getHierarchicalDefinitionTypes()); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java index abbcc467da..70e8571073 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java @@ -16,10 +16,12 @@ import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -42,6 +44,7 @@ import java.util.stream.Stream; import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.TextDocumentIdentifier; import org.eclipse.lsp4j.WorkspaceSymbol; @@ -51,6 +54,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ide.vscode.boot.index.SpringIndexToSymbolsConverter; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; import org.springframework.ide.vscode.boot.index.cache.IndexCache; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; @@ -80,6 +84,7 @@ import org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService; import org.springframework.ide.vscode.commons.protocol.spring.Bean; import org.springframework.ide.vscode.commons.protocol.spring.BeansParams; +import org.springframework.ide.vscode.commons.protocol.spring.DocumentElement; import org.springframework.ide.vscode.commons.protocol.spring.MatchingBeansParams; import org.springframework.ide.vscode.commons.protocol.spring.SpringIndex; import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexElement; @@ -732,7 +737,99 @@ public List getSymbols(String docURI) { return Collections.emptyList(); } } + + public List getDocumentSymbols(String docURI) { + List result = new ArrayList<>(); + + List symbols = getSymbols(docURI); + for (WorkspaceSymbol symbol : symbols) { + DocumentSymbol docSymbol = new DocumentSymbol(); + docSymbol.setName(symbol.getName()); + docSymbol.setKind(symbol.getKind()); + docSymbol.setRange(symbol.getLocation().getLeft().getRange()); + docSymbol.setSelectionRange(symbol.getLocation().getLeft().getRange()); + docSymbol.setTags(symbol.getTags()); + + result.add(docSymbol); + } + + return result; + } + +/* + public List getSymbols(String docURI) { + List result = new ArrayList<>(); + + Deque remainingSymbols = new ArrayDeque<>(); + List documentSymbols = getDocumentSymbols(docURI); + + remainingSymbols.addAll(documentSymbols); + + while (!remainingSymbols.isEmpty()) { + DocumentSymbol documentSymbol = remainingSymbols.poll(); + + WorkspaceSymbol workspaceSymbol = new WorkspaceSymbol(); + workspaceSymbol.setName(documentSymbol.getName()); + workspaceSymbol.setKind(documentSymbol.getKind()); + workspaceSymbol.setTags(documentSymbol.getTags()); + + Location location = new Location(docURI, documentSymbol.getRange()); + workspaceSymbol.setLocation(Either.forLeft(location)); + + result.add(workspaceSymbol); + + if (documentSymbol.getChildren() != null) { + remainingSymbols.addAll(documentSymbol.getChildren()); + } + } + + return result; + } + + public List getDocumentSymbols(String docURI) { + try { + TextDocument doc = server.getTextDocumentService().getLatestSnapshot(docURI); + URI uri = URI.create(docURI); + + CompletableFuture projectInitialized = futureProjectFinder.findFuture(uri).thenCompose(project -> projectInitializedFuture(project)); + IJavaProject project = projectInitialized.get(15, TimeUnit.SECONDS); + ImmutableList.Builder builder = ImmutableList.builder(); + + if (project != null && doc != null) { + + // Collect symbols from the opened document + synchronized(this) { + for (SpringIndexer indexer : this.indexers) { + if (indexer.isInterestedIn(docURI)) { + try { + List adhocDocumentSymbols = indexer.computeDocumentSymbols(project, docURI, doc.get()); + builder.addAll(adhocDocumentSymbols); + } catch (Exception e) { + log.error("{}", e); + } + } + } + } + + } else { + + // Take symbols from the index if there is no opened document. + DocumentElement document = springIndex.getDocument(docURI); + if (document != null) { + List children = document.getChildren(); + builder.addAll(SpringIndexToSymbolsConverter.createDocumentSymbols(children)); + } + + } + return builder.build(); + } catch (Exception e) { + log.warn("", e); + return Collections.emptyList(); + } + } +*/ + @Override public CompletableFuture> beans(BeansParams params) { String projectName = params.getProjectName(); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java index 92a63fb40e..ed7dc8cade 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/factories/SpringFactoriesLanguageServerComponents.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2022 VMware, Inc. + * Copyright (c) 2022, 2025 VMware, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -49,7 +49,7 @@ public Optional getReconcileEngine() { @Override public Optional getDocumentSymbolProvider() { - return Optional.of(params -> springIndex.getSymbols(params.getTextDocument().getUri())); + return Optional.of(params -> springIndex.getDocumentSymbols(params.getTextDocument().getUri())); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index 95afe2e8f8..7151c10c45 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -173,8 +173,8 @@ public BootJavaLanguageServerComponents(ApplicationContext appContext) { new SpringProcessCommandHandler(server, liveDataService, liveDataLocalProcessConnector, appContext.getBeansOfType(SpringProcessConnectorRemote.class).values()); new CopilotAgentCommandHandler(server, projectFinder,responseModifier); - - docSymbolProvider = params -> springSymbolIndex.getSymbols(params.getTextDocument().getUri()); + + docSymbolProvider = params -> springSymbolIndex.getDocumentSymbols(params.getTextDocument().getUri()); workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(springSymbolIndex, new LiveAppURLSymbolProvider(liveDataProvider))); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java index 2237101fce..c58508ac3f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2022 Pivotal, Inc. + * Copyright (c) 2019, 2025 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -46,7 +46,7 @@ public SpringXMLLanguageServerComponents( SpelReconciler spelReconciler) { this.projectFinder = serverParams.projectFinder; - this.docSymbolProvider = params -> springIndexer.getSymbols(params.getTextDocument().getUri()); + this.docSymbolProvider = params -> springIndexer.getDocumentSymbols(params.getTextDocument().getUri()); server.doOnInitialized(this::initialized); server.onShutdown(this::shutdown);