Skip to content

Commit 4618a07

Browse files
committed
Show symbols in file for spring XML config files
1 parent 2cb7b92 commit 4618a07

File tree

6 files changed

+52
-54
lines changed

6 files changed

+52
-54
lines changed

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/CompositeLanguageServerComponents.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
import org.eclipse.lsp4j.CodeActionCapabilities;
2222
import org.eclipse.lsp4j.CodeActionContext;
2323
import org.eclipse.lsp4j.Command;
24+
import org.eclipse.lsp4j.DocumentSymbolParams;
2425
import org.eclipse.lsp4j.Hover;
2526
import org.eclipse.lsp4j.HoverParams;
27+
import org.eclipse.lsp4j.WorkspaceSymbol;
2628
import org.eclipse.lsp4j.jsonrpc.CancelChecker;
2729
import org.eclipse.lsp4j.jsonrpc.messages.Either;
2830
import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector;
2931
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
3032
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
33+
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
3134
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
3235
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
3336
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
@@ -61,6 +64,7 @@ public CompositeLanguageServerComponents build(SimpleLanguageServer server) {
6164
private final IReconcileEngine reconcileEngine;
6265
private final HoverHandler hoverHandler;
6366
private final CodeActionHandler codeActionHandler;
67+
private final DocumentSymbolHandler docSymbolHandler;
6468

6569
public CompositeLanguageServerComponents(SimpleLanguageServer server, Builder builder) {
6670
this.componentsByLanguageId = ImmutableMap.copyOf(builder.componentsByLanguageId);
@@ -119,6 +123,24 @@ public List<Either<Command, CodeAction>> handle(CancelChecker cancelToken,
119123
return Collections.emptyList();
120124
}
121125
};
126+
127+
this.docSymbolHandler = new DocumentSymbolHandler() {
128+
129+
@Override
130+
public List<? extends WorkspaceSymbol> handle(DocumentSymbolParams params) {
131+
TextDocument doc = server.getTextDocumentService().getLatestSnapshot(params.getTextDocument().getUri());
132+
LanguageId language = doc.getLanguageId();
133+
LanguageServerComponents subComponents = componentsByLanguageId.get(language);
134+
if (subComponents != null) {
135+
DocumentSymbolHandler subHandler = subComponents.getDocumentSymbolProvider().orElse(null);
136+
if (subHandler != null) {
137+
return subHandler.handle(params);
138+
}
139+
}
140+
//No applicable subEngine...
141+
return Collections.emptyList();
142+
}
143+
};
122144
}
123145

124146
@Override
@@ -130,12 +152,17 @@ public Set<LanguageId> getInterestingLanguages() {
130152
public HoverHandler getHoverProvider() {
131153
return hoverHandler;
132154
}
133-
155+
134156
@Override
135157
public Optional<IReconcileEngine> getReconcileEngine() {
136158
return Optional.ofNullable(reconcileEngine);
137159
}
138160

161+
@Override
162+
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
163+
return Optional.ofNullable(docSymbolHandler);
164+
}
165+
139166
@SuppressWarnings("unchecked")
140167
public <C extends LanguageServerComponents> C get(Class<C> subComponentsType) {
141168
for (LanguageServerComponents subcomp : this.componentsByLanguageId.values()) {

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/composable/LanguageServerComponents.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2018 Pivotal, Inc.
2+
* Copyright (c) 2018, 2022 Pivotal, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@
1515

1616
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
1717
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
18+
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
1819
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
1920
import org.springframework.ide.vscode.commons.util.text.LanguageId;
2021

@@ -24,4 +25,5 @@ public interface LanguageServerComponents {
2425
default Optional<IReconcileEngine> getReconcileEngine() { return Optional.empty(); }
2526
HoverHandler getHoverProvider();
2627
default Optional<CodeActionHandler> getCodeActionProvider() { return Optional.empty(); }
28+
default Optional<DocumentSymbolHandler> getDocumentSymbolProvider() { return Optional.empty(); }
2729
}

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ public void afterPropertiesSet() throws Exception {
172172

173173
components.getCodeActionProvider().ifPresent(documents::onCodeAction);
174174

175+
components.getDocumentSymbolProvider().ifPresent(documents::onDocumentSymbol);
176+
175177
config.addListener(evt -> reconcile());
176178

177179
if (recipesRepo != null) {

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeActionProvider;
3131
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeLensEngine;
3232
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentHighlightEngine;
33-
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentSymbolHandler;
3433
import org.springframework.ide.vscode.boot.java.handlers.BootJavaHoverProvider;
3534
import org.springframework.ide.vscode.boot.java.handlers.BootJavaReconcileEngine;
3635
import org.springframework.ide.vscode.boot.java.handlers.BootJavaReferencesHandler;
@@ -72,6 +71,7 @@
7271
import org.springframework.ide.vscode.commons.languageserver.util.CodeActionHandler;
7372
import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler;
7473
import org.springframework.ide.vscode.commons.languageserver.util.DocumentHighlightHandler;
74+
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
7575
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
7676
import org.springframework.ide.vscode.commons.languageserver.util.ReferencesHandler;
7777
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
@@ -116,6 +116,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
116116
private DocumentHighlightHandler highlightsEngine;
117117
private BootJavaReconcileEngine reconcileEngine;
118118
private BootJavaCodeActionProvider codeActionProvider;
119+
private DocumentSymbolHandler docSymbolProvider;
119120

120121
private SpringProcessTracker liveProcessTracker;
121122

@@ -165,7 +166,9 @@ public BootJavaLanguageServerComponents(
165166
//
166167

167168
SpringSymbolIndex indexer = appContext.getBean(SpringSymbolIndex.class);
168-
documents.onDocumentSymbol(new BootJavaDocumentSymbolHandler(this, indexer));
169+
170+
docSymbolProvider = params -> indexer.getSymbols(params.getTextDocument().getUri());
171+
169172
workspaceService.onWorkspaceSymbol(new BootJavaWorkspaceSymbolHandler(indexer,
170173
new LiveAppURLSymbolProvider(liveDataProvider)));
171174

@@ -254,6 +257,11 @@ public Optional<IReconcileEngine> getReconcileEngine() {
254257
return Optional.of(reconcileEngine);
255258
}
256259

260+
@Override
261+
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
262+
return Optional.of(docSymbolProvider);
263+
}
264+
257265
private void initialized() {
258266
this.liveProcessTracker.start();
259267
this.liveChangeDetectionWatchdog.start();

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaDocumentSymbolHandler.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLLanguageServerComponents.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2019 Pivotal, Inc.
2+
* Copyright (c) 2019, 2022 Pivotal, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -19,6 +19,7 @@
1919
import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents;
2020
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
2121
import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine;
22+
import org.springframework.ide.vscode.commons.languageserver.util.DocumentSymbolHandler;
2223
import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler;
2324
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
2425
import org.springframework.ide.vscode.commons.util.text.LanguageId;
@@ -34,6 +35,7 @@ public class SpringXMLLanguageServerComponents implements LanguageServerComponen
3435

3536
private final JavaProjectFinder projectFinder;
3637
private final SpringXMLReconcileEngine reconcileEngine;
38+
private final DocumentSymbolHandler docSymbolProvider;
3739

3840
public SpringXMLLanguageServerComponents(
3941
SimpleLanguageServer server,
@@ -42,6 +44,7 @@ public SpringXMLLanguageServerComponents(
4244
BootJavaConfig config) {
4345

4446
this.projectFinder = serverParams.projectFinder;
47+
this.docSymbolProvider = params -> springIndexer.getSymbols(params.getTextDocument().getUri());
4548

4649
server.doOnInitialized(this::initialized);
4750
server.onShutdown(this::shutdown);
@@ -63,6 +66,11 @@ public Set<LanguageId> getInterestingLanguages() {
6366
public Optional<IReconcileEngine> getReconcileEngine() {
6467
return Optional.of(this.reconcileEngine);
6568
}
69+
70+
@Override
71+
public Optional<DocumentSymbolHandler> getDocumentSymbolProvider() {
72+
return Optional.of(docSymbolProvider);
73+
}
6674

6775
@Override
6876
public HoverHandler getHoverProvider() {

0 commit comments

Comments
 (0)