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 fbb952c87..932d38014 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 @@ -67,7 +67,7 @@ public class SpringProcessCommandHandler { if (processKey != null) { // try local processes - SpringProcessDescriptor[] processes = localProcessConnector.getProcesses(false, SpringProcessStatus.REGULAR); + SpringProcessDescriptor[] processes = localProcessConnector.getProcesses(false, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT); for (SpringProcessDescriptor process : processes) { if (process.getProcessKey().equals(processKey)) { localProcessConnector.connectProcess(process); @@ -134,7 +134,7 @@ public class SpringProcessCommandHandler { } // other available local processes - SpringProcessDescriptor[] localProcesses = localProcessConnector.getProcesses(true, SpringProcessStatus.REGULAR); + SpringProcessDescriptor[] localProcesses = localProcessConnector.getProcesses(true, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT); for (SpringProcessDescriptor localProcess : localProcesses) { String processKey = localProcess.getProcessKey(); if (!alreadyConnected.contains(processKey)) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java index 0fa002f5f..2c28d9057 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java @@ -11,6 +11,7 @@ package org.springframework.ide.vscode.boot.java.livehover.v2; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -107,7 +108,7 @@ public class SpringProcessConnectorLocal { return this.processes.stream().anyMatch(process -> processKey.equals(process.getProcessKey())); } - public SpringProcessDescriptor[] getProcesses(boolean update, SpringProcessStatus status) { + public SpringProcessDescriptor[] getProcesses(boolean update, SpringProcessStatus... status) { if (update) { SpringProcessDescriptor[] newProcesses = updateProcesses(); if (newProcesses.length > 0) { @@ -115,8 +116,9 @@ public class SpringProcessConnectorLocal { } } - if (status != null) { - return processes.stream().filter((process) -> status.equals(process.getStatus())).toArray(SpringProcessDescriptor[]::new); + if (status != null && status.length > 0) { + List statusList = Arrays.asList(status); + return processes.stream().filter((process) -> statusList.contains(process.getStatus())).toArray(SpringProcessDescriptor[]::new); } else { return (SpringProcessDescriptor[]) processes.toArray(new SpringProcessDescriptor[processes.size()]); @@ -266,6 +268,10 @@ public class SpringProcessConnectorLocal { } } } + + public boolean isConnected(String processKey) { + return this.processConnectorService.isConnected(processKey); + } private boolean shouldIgnore(VirtualMachineDescriptor vmDescriptor, VirtualMachine vm) { try { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java index 2199408d1..1e8e3125d 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java @@ -92,6 +92,10 @@ public class SpringProcessConnectorService { return (SpringProcessConnector[]) this.connectors.values().stream() .filter((connector) -> connectedSuccess.get(connector.getProcessKey())).toArray(SpringProcessConnector[]::new); } + + public boolean isConnected(String processKey) { + return this.connectors.containsKey(processKey); + } /** * common method to generate process keys from process IDs and process names diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessTracker.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessTracker.java index 284b4d903..c8aade510 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessTracker.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessTracker.java @@ -93,9 +93,10 @@ public class SpringProcessTracker { SpringProcessDescriptor[] autoConnectProcesses = this.localProcessConnector.getProcesses(true, SpringProcessStatus.AUTO_CONNECT); for (SpringProcessDescriptor process : autoConnectProcesses) { - log.info("auto-connect to process: " + process.getProcessKey()); - - this.localProcessConnector.connectProcess(process); + if (!this.localProcessConnector.isConnected(process.getProcessKey())) { + log.info("auto-connect to process: " + process.getProcessKey()); + this.localProcessConnector.connectProcess(process); + } } } catch (Throwable e) {