Show symbols in file for spring XML config files

This commit is contained in:
aboyko
2022-10-20 12:32:18 -04:00
parent 2cb7b921d5
commit 4618a07968
6 changed files with 52 additions and 54 deletions

View File

@@ -172,6 +172,8 @@ public class BootLanguageServerInitializer implements InitializingBean {
components.getCodeActionProvider().ifPresent(documents::onCodeAction);
components.getDocumentSymbolProvider().ifPresent(documents::onDocumentSymbol);
config.addListener(evt -> reconcile());
if (recipesRepo != null) {

View File

@@ -30,7 +30,6 @@ import org.springframework.ide.vscode.boot.java.conditionals.ConditionalsLiveHov
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeActionProvider;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeLensEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentHighlightEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentSymbolHandler;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaHoverProvider;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaReconcileEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaReferencesHandler;
@@ -72,6 +71,7 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcil
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler;
import org.springframework.ide.vscode.commons.languageserver.util.DocumentHighlightHandler;
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
import org.springframework.ide.vscode.commons.languageserver.util.ReferencesHandler;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
@@ -116,6 +116,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
private DocumentHighlightHandler highlightsEngine;
private BootJavaReconcileEngine reconcileEngine;
private BootJavaCodeActionProvider codeActionProvider;
private DocumentSymbolHandler docSymbolProvider;
private SpringProcessTracker liveProcessTracker;
@@ -165,7 +166,9 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
//
SpringSymbolIndex indexer = appContext.getBean(SpringSymbolIndex.class);
documents.onDocumentSymbol(new BootJavaDocumentSymbolHandler(this, indexer));
docSymbolProvider = params -> indexer.getSymbols(params.getTextDocument().getUri());
workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(indexer,
new LiveAppURLSymbolProvider(liveDataProvider)));
@@ -254,6 +257,11 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
return Optional.of(reconcileEngine);
}
@Override
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
return Optional.of(docSymbolProvider);
}
private void initialized() {
this.liveProcessTracker.start();
this.liveChangeDetectionWatchdog.start();

View File

@@ -1,49 +0,0 @@
/*******************************************************************************
* Copyright (c) 2017, 2022 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.boot.java.handlers;
import java.util.Collections;
import java.util.List;
import org.eclipse.lsp4j.DocumentSymbolParams;
import org.eclipse.lsp4j.WorkspaceSymbol;
import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents;
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
/**
* @author Martin Lippert
*/
public class BootJavaDocumentSymbolHandler implements DocumentSymbolHandler {
private SpringSymbolIndex indexer;
private BootJavaLanguageServerComponents server;
public BootJavaDocumentSymbolHandler(BootJavaLanguageServerComponents server, SpringSymbolIndex indexer) {
this.server = server;
this.indexer = indexer;
}
@Override
public List<? extends WorkspaceSymbol> handle(DocumentSymbolParams params) {
SimpleTextDocumentService documents = server.getTextDocumentService();
TextDocument doc = documents.getLatestSnapshot(params.getTextDocument().getUri());
if (server.getInterestingLanguages().contains(doc.getLanguageId())) {
return indexer.getSymbols(params.getTextDocument().getUri());
}
return Collections.emptyList();
}
}

View File

@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2019 Pivotal, Inc.
* Copyright (c) 2019, 2022 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,6 +19,7 @@ import org.springframework.ide.vscode.boot.app.SpringSymbolIndex;
import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
@@ -34,6 +35,7 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen
private final JavaProjectFinder projectFinder;
private final SpringXMLReconcileEngine reconcileEngine;
private final DocumentSymbolHandler docSymbolProvider;
public SpringXMLLanguageServerComponents(
SimpleLanguageServer server,
@@ -42,6 +44,7 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen
BootJavaConfig config) {
this.projectFinder = serverParams.projectFinder;
this.docSymbolProvider = params -> springIndexer.getSymbols(params.getTextDocument().getUri());
server.doOnInitialized(this::initialized);
server.onShutdown(this::shutdown);
@@ -63,6 +66,11 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen
public Optional<IReconcileEngine> getReconcileEngine() {
return Optional.of(this.reconcileEngine);
}
@Override
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
return Optional.of(docSymbolProvider);
}
@Override
public HoverHandler getHoverProvider() {