diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index 6bab1f7c9..3afaf8569 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -97,8 +97,10 @@ import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemC import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; import org.springframework.ide.vscode.commons.languageserver.reconcile.ReconcileProblem; import org.springframework.ide.vscode.commons.protocol.STS4LanguageClient; -import org.springframework.ide.vscode.commons.protocol.spring.SpringModelLanguageServer; -import org.springframework.ide.vscode.commons.protocol.spring.SpringModelService; +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.SpringIndex; +import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexLanguageServer; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.AsyncRunner; import org.springframework.ide.vscode.commons.util.BadLocationException; @@ -121,7 +123,7 @@ import reactor.core.scheduler.Schedulers; * with apis to register various callbacks so that language server implementor * can attach their own 'handlers' for whatever the functionality they want to implement. */ -public final class SimpleLanguageServer implements Sts4LanguageServer, SpringModelLanguageServer, LanguageClientAware, ServiceNotificationsClient, SimpleLanguageServerWrapper { +public final class SimpleLanguageServer implements Sts4LanguageServer, SpringIndexLanguageServer, LanguageClientAware, ServiceNotificationsClient, SimpleLanguageServerWrapper { private static Logger log = LoggerFactory.getLogger(SimpleLanguageServer.class); @@ -924,12 +926,14 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, SpringMod } @Override - public SpringModelService getSpringModelService() { - try { - return (SpringModelService) appContext.getBean(SpringModelService.class); - } catch (Throwable e) { - return null; + public CompletableFuture> beans(BeansParams params) { + Map allSpringIndex = appContext.getBeansOfType(SpringIndex.class, false, false); + Assert.isLegal(allSpringIndex.size() <= 1, "One at most SpringModel bean is expected"); + if (!allSpringIndex.isEmpty()) { + SpringIndex springIndex = allSpringIndex.values().iterator().next(); + return springIndex.beans(params); } + return CompletableFuture.completedFuture(Collections.emptyList()); } } diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java index e7abccb10..70b16991b 100644 --- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java +++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/STS4LanguageClient.java @@ -28,14 +28,14 @@ import org.springframework.ide.vscode.commons.protocol.java.JavaSearchParams; import org.springframework.ide.vscode.commons.protocol.java.JavaTypeHierarchyParams; import org.springframework.ide.vscode.commons.protocol.java.TypeData; import org.springframework.ide.vscode.commons.protocol.java.TypeDescriptorData; -import org.springframework.ide.vscode.commons.protocol.spring.SpringModelLanguageClient; +import org.springframework.ide.vscode.commons.protocol.spring.SpringIndexLanguageClient; /** * Some 'custom' extensions to standard LSP {@link LanguageClient}. * * @author Kris De Volder */ -public interface STS4LanguageClient extends LanguageClient, SpringModelLanguageClient { +public interface STS4LanguageClient extends LanguageClient, SpringIndexLanguageClient { @JsonNotification("sts/liveprocess/connected") void liveProcessConnected(LiveProcessSummary processKey); diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageServer.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndex.java similarity index 66% rename from headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageServer.java rename to headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndex.java index 48fb893ea..73100efb7 100644 --- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageServer.java +++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndex.java @@ -10,15 +10,11 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.protocol.spring; -import org.eclipse.lsp4j.jsonrpc.services.JsonDelegate; -import org.eclipse.lsp4j.services.LanguageServer; +import java.util.List; +import java.util.concurrent.CompletableFuture; -public interface SpringModelLanguageServer extends LanguageServer { - - /** - * Provides access to the spring model services. - */ - @JsonDelegate - SpringModelService getSpringModelService(); +public interface SpringIndex { + + CompletableFuture> beans(BeansParams params); } diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageClient.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageClient.java similarity index 92% rename from headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageClient.java rename to headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageClient.java index 089649e77..c3c44b409 100644 --- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelLanguageClient.java +++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageClient.java @@ -13,7 +13,7 @@ package org.springframework.ide.vscode.commons.protocol.spring; import org.eclipse.lsp4j.jsonrpc.services.JsonNotification; import org.eclipse.lsp4j.services.LanguageClient; -public interface SpringModelLanguageClient extends LanguageClient { +public interface SpringIndexLanguageClient extends LanguageClient { @JsonNotification("spring/index/updated") void indexUpdated(); diff --git a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelService.java b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageServer.java similarity index 84% rename from headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelService.java rename to headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageServer.java index 40100b860..ad59a018c 100644 --- a/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringModelService.java +++ b/headless-services/commons/commons-lsp-extensions/src/main/java/org/springframework/ide/vscode/commons/protocol/spring/SpringIndexLanguageServer.java @@ -14,12 +14,11 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; -import org.eclipse.lsp4j.jsonrpc.services.JsonSegment; +import org.eclipse.lsp4j.services.LanguageServer; -@JsonSegment("spring/index") -public interface SpringModelService { - - @JsonRequest +public interface SpringIndexLanguageServer extends LanguageServer { + + @JsonRequest("spring/index/beans") default CompletableFuture> beans(BeansParams params) { throw new UnsupportedOperationException(); } 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 cd10fe9ec..892303d5b 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 @@ -71,7 +71,7 @@ import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocu 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.SpringModelService; +import org.springframework.ide.vscode.commons.protocol.spring.SpringIndex; import org.springframework.ide.vscode.commons.util.Futures; import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.commons.util.UriUtil; @@ -84,7 +84,7 @@ import com.google.common.collect.ImmutableList; * @author Martin Lippert */ @Component -public class SpringSymbolIndex implements InitializingBean, SpringModelService { +public class SpringSymbolIndex implements InitializingBean, SpringIndex { @Autowired SimpleLanguageServer server; @Autowired BootJavaConfig config; diff --git a/vscode-extensions/vscode-spring-boot/lib/api.d.ts b/vscode-extensions/vscode-spring-boot/lib/api.d.ts index c2c9fef24..56a111c33 100644 --- a/vscode-extensions/vscode-spring-boot/lib/api.d.ts +++ b/vscode-extensions/vscode-spring-boot/lib/api.d.ts @@ -63,9 +63,8 @@ export interface ExtensionAPI { * * Returns Spring Model object. */ - readonly getSpringModel: () => SpringModel; + readonly getSpringIndex: () => SpringIndex; - readonly onSpringModelUpdated: Event; } interface LiveProcessDataQuery { @@ -108,8 +107,9 @@ interface InjectionPoint { readonly location: Location; } -interface SpringModel { +interface SpringIndex { readonly beans: (params: BeansParams) => Promise; + readonly onSpringIndexUpdated: Event; } interface BeansParams { diff --git a/vscode-extensions/vscode-spring-boot/lib/apiManager.ts b/vscode-extensions/vscode-spring-boot/lib/apiManager.ts index d1c26c977..662c8e5b2 100644 --- a/vscode-extensions/vscode-spring-boot/lib/apiManager.ts +++ b/vscode-extensions/vscode-spring-boot/lib/apiManager.ts @@ -1,6 +1,6 @@ import { commands, Uri } from "vscode"; import { Emitter, LanguageClient } from "vscode-languageclient/node"; -import {Bean, BeansParams, ExtensionAPI, SpringModel} from "./api"; +import {Bean, BeansParams, ExtensionAPI, SpringIndex} from "./api"; import { LiveProcess, LiveProcessConnectedNotification, @@ -8,7 +8,7 @@ import { LiveProcessUpdatedNotification, LiveProcessGcPausesMetricsUpdatedNotification, LiveProcessMemoryMetricsUpdatedNotification, - SpringModelUpdatedNotification + SpringIndexUpdatedNotification } from "./notification"; import VSCode from "vscode"; import {RequestType} from "vscode-languageclient"; @@ -20,7 +20,7 @@ export class ApiManager { private onDidLiveProcessUpdateEmitter: Emitter = new Emitter(); private onDidLiveProcessGcPausesMetricsUpdateEmitter: Emitter = new Emitter(); private onDidLiveProcessMemoryMetricsUpdateEmitter: Emitter = new Emitter(); - private onSpringModelUpdateEmitter: Emitter = new Emitter(); + private onSpringIndexUpdateEmitter: Emitter = new Emitter(); public constructor(client: LanguageClient) { const onDidLiveProcessConnect = this.onDidLiveProcessConnectEmitter.event; @@ -28,7 +28,7 @@ export class ApiManager { const onDidLiveProcessUpdate = this.onDidLiveProcessUpdateEmitter.event; const onDidLiveProcessGcPausesMetricsUpdate = this.onDidLiveProcessGcPausesMetricsUpdateEmitter.event; const onDidLiveProcessMemoryMetricsUpdate = this.onDidLiveProcessMemoryMetricsUpdateEmitter.event; - const onSpringModelUpdated = this.onSpringModelUpdateEmitter.event; + const onSpringIndexUpdated = this.onSpringIndexUpdateEmitter.event; const COMMAND_LIVEDATA_GET = "sts/livedata/get"; const getLiveProcessData = async (query) => { @@ -61,14 +61,15 @@ export class ApiManager { client.onNotification(LiveProcessGcPausesMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessGcPausesMetricsUpdateEmitter.fire(process)); client.onNotification(LiveProcessMemoryMetricsUpdatedNotification.type, (process: LiveProcess) => this.onDidLiveProcessMemoryMetricsUpdateEmitter.fire(process)); - client.onNotification(SpringModelUpdatedNotification.type, () => this.onSpringModelUpdateEmitter.fire()); + client.onNotification(SpringIndexUpdatedNotification.type, () => this.onSpringIndexUpdateEmitter.fire()); const beansRequestType = new RequestType('spring/index/beans'); const beans = (params: BeansParams) => { return client.sendRequest(beansRequestType, params); } - const getSpringModel = () => ({ + const getSpringIndex = () => ({ + onSpringIndexUpdated, beans }) @@ -79,13 +80,12 @@ export class ApiManager { onDidLiveProcessUpdate, onDidLiveProcessMemoryMetricsUpdate, onDidLiveProcessGcPausesMetricsUpdate, - onSpringModelUpdated, getLiveProcessData, refreshLiveProcessData, getLiveProcessMetricsData, refreshLiveProcessMetricsData, listConnectedProcesses, - getSpringModel + getSpringIndex }; } } diff --git a/vscode-extensions/vscode-spring-boot/lib/notification.ts b/vscode-extensions/vscode-spring-boot/lib/notification.ts index cd73b2546..c82119ee4 100644 --- a/vscode-extensions/vscode-spring-boot/lib/notification.ts +++ b/vscode-extensions/vscode-spring-boot/lib/notification.ts @@ -38,6 +38,6 @@ export namespace LiveProcessMemoryMetricsUpdatedNotification { export const type = new NotificationType('sts/liveprocess/memory/metrics/updated'); } -export namespace SpringModelUpdatedNotification { +export namespace SpringIndexUpdatedNotification { export const type = new NotificationType('spring/index/updated'); } \ No newline at end of file