diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java index 9918c48ad..9e12b519f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java @@ -17,6 +17,9 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.eclipse.lsp4j.ExecuteCommandParams; import org.slf4j.Logger; @@ -39,6 +42,7 @@ public class SpringProcessCommandHandler { private static final String COMMAND_REFRESH = "sts/livedata/refresh"; private static final String COMMAND_DISCONNECT = "sts/livedata/disconnect"; private static final String COMMAND_GET = "sts/livedata/get"; + private static final String COMMAND_LIST_CONNECTED = "sts/livedata/listConnected"; private final SpringProcessConnectorService connectorService; private final SpringProcessConnectorLocal localProcessConnector; @@ -74,6 +78,13 @@ public class SpringProcessCommandHandler { return get(params); }); log.info("Registered command handler: {}",COMMAND_GET); + + server.onCommand(COMMAND_LIST_CONNECTED, (params) -> { + return CompletableFuture.completedFuture(Stream.of(connectorService.getConnectedProcesses()) + .map(process -> process.getProcessKey()) + .collect(Collectors.toList()) + ); + }); } private CompletableFuture connect(ExecuteCommandParams params) { diff --git a/vscode-extensions/vscode-spring-boot/lib/api.d.ts b/vscode-extensions/vscode-spring-boot/lib/api.d.ts index ce907ca67..fb34238d5 100644 --- a/vscode-extensions/vscode-spring-boot/lib/api.d.ts +++ b/vscode-extensions/vscode-spring-boot/lib/api.d.ts @@ -23,6 +23,13 @@ export interface ExtensionAPI { * A command to get live process data. */ readonly getLiveProcessData: (query: SimpleQuery | BeansQuery) => Promise + + /** + * A command to list all currently connected processes. + * + * Returns a list of processKeys. + */ + readonly listConnectedProcesses: () => Promise } interface LiveProcessDataQuery { diff --git a/vscode-extensions/vscode-spring-boot/lib/apiManager.ts b/vscode-extensions/vscode-spring-boot/lib/apiManager.ts index 4dc3029fe..f598272a1 100644 --- a/vscode-extensions/vscode-spring-boot/lib/apiManager.ts +++ b/vscode-extensions/vscode-spring-boot/lib/apiManager.ts @@ -19,6 +19,11 @@ export class ApiManager { return await commands.executeCommand(COMMAND_LIVEDATA_GET, query); } + const COMMAND_LIVEDATA_LIST_CONNECTED = "sts/livedata/listConnected" + const listConnectedProcesses = async () : Promise => { + return await commands.executeCommand(COMMAND_LIVEDATA_LIST_CONNECTED); + } + client.onNotification(LiveProcessConnectedNotification.type, (processKey: string) => this.onDidLiveProcessConnectEmitter.fire(processKey)); client.onNotification(LiveProcessDisconnectedNotification.type, (processKey: string) => this.onDidLiveProcessDisconnectEmitter.fire(processKey)); client.onNotification(LiveProcessUpdatedNotification.type, (processKey: string) => this.onDidLiveProcessUpdateEmitter.fire(processKey)); @@ -28,7 +33,8 @@ export class ApiManager { onDidLiveProcessConnect, onDidLiveProcessDisconnect, onDidLiveProcessUpdate, - getLiveProcessData + getLiveProcessData, + listConnectedProcesses, }; } }