Add live process management commands to vscode

This commit is contained in:
Kris De Volder
2019-10-02 11:38:58 -07:00
parent 6a2c1026fb
commit f102f2cfe7
6 changed files with 83 additions and 7 deletions

View File

@@ -84,6 +84,7 @@ import org.springframework.ide.vscode.commons.util.CollectionUtil;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -401,10 +402,16 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
codeLensOptions.setResolveProvider(hasCodeLensResolveProvider());
c.setCodeLensProvider(codeLensOptions );
}
if (hasExecuteCommandSupport && hasQuickFixes()) {
c.setExecuteCommandProvider(new ExecuteCommandOptions(ImmutableList.of(
CODE_ACTION_COMMAND_ID
)));
if (hasExecuteCommandSupport && (
hasQuickFixes() ||
!commands.isEmpty()
)) {
ImmutableList.Builder<String> supportedCommands = ImmutableList.builder();
if (hasQuickFixes()) {
supportedCommands.add(CODE_ACTION_COMMAND_ID);
}
supportedCommands.addAll(commands.keySet());
c.setExecuteCommandProvider(new ExecuteCommandOptions(supportedCommands.build()));
}
if (hasWorkspaceSymbolHandler()) {
c.setWorkspaceSymbolProvider(true);

View File

@@ -43,4 +43,8 @@ public class LiveProcessCommand {
this.action = action;
}
@Override
public String toString() {
return "LiveProcessCommand [processKey=" + processKey + ", label=" + label + ", action=" + action + "]";
}
}

View File

@@ -18,7 +18,10 @@ import java.util.Set;
import java.util.concurrent.CompletableFuture;
import org.eclipse.lsp4j.ExecuteCommandParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.java.livehover.v2.SpringProcessConnectorRemote.RemoteBootAppData;
import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import com.google.gson.JsonElement;
@@ -29,6 +32,8 @@ import com.google.gson.JsonObject;
*/
public class SpringProcessCommandHandler {
private static final Logger log = LoggerFactory.getLogger(SpringProcessCommandHandler.class);
private static final String COMMAND_LIST_PROCESSES = "sts/livedata/listProcesses";
private static final String COMMAND_CONNECT = "sts/livedata/connect";
private static final String COMMAND_REFRESH = "sts/livedata/refresh";
@@ -47,19 +52,22 @@ public class SpringProcessCommandHandler {
server.onCommand(COMMAND_LIST_PROCESSES, (params) -> {
return getProcessCommands();
});
log.info("Registered command handler: {}",COMMAND_LIST_PROCESSES);
server.onCommand(COMMAND_CONNECT, (params) -> {
return connect(params);
});
log.info("Registered command handler: {}",COMMAND_CONNECT);
server.onCommand(COMMAND_REFRESH, (params) -> {
return refresh(params);
});
log.info("Registered command handler: {}",COMMAND_REFRESH);
server.onCommand(COMMAND_DISCONNECT, (params) -> {
return disconnect(params);
});
log.info("Registered command handler: {}",COMMAND_DISCONNECT);
}
private CompletableFuture<Object> connect(ExecuteCommandParams params) {
@@ -166,7 +174,7 @@ public class SpringProcessCommandHandler {
result.add(command);
}
}
log.info("getProcessCommands => {}", result);
return CompletableFuture.completedFuture((Object[]) result.toArray(new Object[result.size()]));
}

View File

@@ -4,6 +4,7 @@ import * as VSCode from 'vscode';
import {workspace} from 'vscode';
import * as commons from '@pivotal-tools/commons-vscode';
import * as liveHoverUi from './live-hover-connect-ui';
import {LanguageClient} from "vscode-languageclient";
@@ -67,5 +68,8 @@ export function activate(context: VSCode.ExtensionContext): Thenable<LanguageCli
highlightCodeLensSettingKey: 'boot-java.highlight-codelens.on'
};
return commons.activate(options, context);
return commons.activate(options, context).then(client => {
liveHoverUi.activate(client, options, context);
return client;
});
}

View File

@@ -0,0 +1,48 @@
'use strict';
import * as VSCode from 'vscode';
import { LanguageClient } from "vscode-languageclient";
import { ActivatorOptions } from '@pivotal-tools/commons-vscode';
import { stringify } from 'querystring';
interface ProcessCommandInfo {
processKey : string;
label: string;
action: string
}
async function liveHoverConnectHandler() {
//sts.vscode-spring-boot.codeAction
const processData : ProcessCommandInfo[] = await VSCode.commands.executeCommand('sts/livedata/listProcesses');
const choiceMap = new Map<string, ProcessCommandInfo>();
const choices : string[] = [];
processData.forEach(p => {
const slash = p.action.lastIndexOf('/');
if (slash>=0) {
var actionLabel = p.action.substring(slash+1);
actionLabel = actionLabel.substring(0, 1).toUpperCase() + actionLabel.substring(1);
const choiceLabel = actionLabel + " " + p.label;
choiceMap.set(choiceLabel, p);
choices.push(choiceLabel);
}
});
if (choices) {
const picked = await VSCode.window.showQuickPick(choices);
if (picked) {
const chosen = choiceMap.get(picked);
await VSCode.commands.executeCommand(chosen.action, chosen);
}
}
}
/** Called when extension is activated */
export function activate(
client: LanguageClient,
options: ActivatorOptions,
context: VSCode.ExtensionContext
) {
context.subscriptions.push(
VSCode.commands.registerCommand('vscode-spring-boot.live-hover.connect', liveHoverConnectHandler)
);
}

View File

@@ -64,6 +64,11 @@
"configuration": "./properties-support/language-configuration.json"
}
],
"commands": [ {
"command": "vscode-spring-boot.live-hover.connect",
"title": "Manage Live Spring Boot Process Connections"
}
],
"configuration": {
"type": "object",
"title": "Boot-Java Configuration",