Show symbols in file for spring XML config files
This commit is contained in:
@@ -21,13 +21,16 @@ import org.eclipse.lsp4j.CodeAction;
|
||||
import org.eclipse.lsp4j.CodeActionCapabilities;
|
||||
import org.eclipse.lsp4j.CodeActionContext;
|
||||
import org.eclipse.lsp4j.Command;
|
||||
import org.eclipse.lsp4j.DocumentSymbolParams;
|
||||
import org.eclipse.lsp4j.Hover;
|
||||
import org.eclipse.lsp4j.HoverParams;
|
||||
import org.eclipse.lsp4j.WorkspaceSymbol;
|
||||
import org.eclipse.lsp4j.jsonrpc.CancelChecker;
|
||||
import org.eclipse.lsp4j.jsonrpc.messages.Either;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector;
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
|
||||
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.languageserver.util.SimpleTextDocumentService;
|
||||
@@ -61,6 +64,7 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen
|
||||
private final IReconcileEngine reconcileEngine;
|
||||
private final HoverHandler hoverHandler;
|
||||
private final CodeActionHandler codeActionHandler;
|
||||
private final DocumentSymbolHandler docSymbolHandler;
|
||||
|
||||
public CompositeLanguageServerComponents(SimpleLanguageServer server, Builder builder) {
|
||||
this.componentsByLanguageId = ImmutableMap.copyOf(builder.componentsByLanguageId);
|
||||
@@ -119,6 +123,24 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen
|
||||
return Collections.emptyList();
|
||||
}
|
||||
};
|
||||
|
||||
this.docSymbolHandler = new DocumentSymbolHandler() {
|
||||
|
||||
@Override
|
||||
public List<? extends WorkspaceSymbol> handle(DocumentSymbolParams params) {
|
||||
TextDocument doc = server.getTextDocumentService().getLatestSnapshot(params.getTextDocument().getUri());
|
||||
LanguageId language = doc.getLanguageId();
|
||||
LanguageServerComponents subComponents = componentsByLanguageId.get(language);
|
||||
if (subComponents != null) {
|
||||
DocumentSymbolHandler subHandler = subComponents.getDocumentSymbolProvider().orElse(null);
|
||||
if (subHandler != null) {
|
||||
return subHandler.handle(params);
|
||||
}
|
||||
}
|
||||
//No applicable subEngine...
|
||||
return Collections.emptyList();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -130,12 +152,17 @@ public class CompositeLanguageServerComponents implements LanguageServerComponen
|
||||
public HoverHandler getHoverProvider() {
|
||||
return hoverHandler;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Optional<IReconcileEngine> getReconcileEngine() {
|
||||
return Optional.ofNullable(reconcileEngine);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
|
||||
return Optional.ofNullable(docSymbolHandler);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <C extends LanguageServerComponents> C get(Class<C> subComponentsType) {
|
||||
for (LanguageServerComponents subcomp : this.componentsByLanguageId.values()) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2018 Pivotal, Inc.
|
||||
* Copyright (c) 2018, 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
|
||||
@@ -15,6 +15,7 @@ import java.util.Set;
|
||||
|
||||
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
|
||||
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
|
||||
import org.springframework.ide.vscode.commons.util.text.LanguageId;
|
||||
|
||||
@@ -24,4 +25,5 @@ public interface LanguageServerComponents {
|
||||
default Optional<IReconcileEngine> getReconcileEngine() { return Optional.empty(); }
|
||||
HoverHandler getHoverProvider();
|
||||
default Optional<CodeActionHandler> getCodeActionProvider() { return Optional.empty(); }
|
||||
default Optional<DocumentSymbolHandler> getDocumentSymbolProvider() { return Optional.empty(); }
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user