From dcf0ffa3e1dc3d1c31a9485f3964c59144e162c0 Mon Sep 17 00:00:00 2001 From: Svata Dedic Date: Mon, 26 Aug 2024 16:41:05 +0200 Subject: [PATCH] Support for string[] vmArgs --- .../lsp/server/debugging/launch/NbLaunchDelegate.java | 5 ++--- .../server/debugging/launch/NbLaunchRequestHandler.java | 7 +++++-- java/java.lsp.server/vscode/package.json | 9 +++++++-- java/java.lsp.server/vscode/src/runConfiguration.ts | 6 +++++- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java index 2da6702dc7c4..25f96af67529 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchDelegate.java @@ -468,19 +468,18 @@ private static void startNativeDebug(File nativeImageFile, List args, } @NonNull - private static List argsToStringList(Object o) { + static List argsToStringList(Object o) { if (o == null) { return Collections.emptyList(); } if (o instanceof List) { for (Object item : (List)o) { - if (!(o instanceof String)) { + if (!(item instanceof String)) { throw new IllegalArgumentException("Only string parameters expected"); } } return (List)o; } else if (o instanceof String) { - List res = new ArrayList<>(); return Arrays.asList(BaseUtilities.parseParameters(o.toString())); } else { throw new IllegalArgumentException("Expected String or String list"); diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchRequestHandler.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchRequestHandler.java index b79320a62e29..8fe3046049ef 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchRequestHandler.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/launch/NbLaunchRequestHandler.java @@ -187,11 +187,14 @@ public CompletableFuture launch(Map launchArguments, Debug } if (!isNative) { - if (StringUtils.isBlank((String)launchArguments.get("vmArgs"))) { + List vmArgList = NbLaunchDelegate.argsToStringList(launchArguments.get("vmArgs")); + if (vmArgList.isEmpty()) { launchArguments.put("vmArgs", String.format("-Dfile.encoding=%s", context.getDebuggeeEncoding().name())); } else { + vmArgList = new ArrayList<>(vmArgList); + vmArgList.add(String.format("-Dfile.encoding=%s", context.getDebuggeeEncoding().name())); // if vmArgs already has the file.encoding settings, duplicate options for jvm will not cause an error, the right most value wins - launchArguments.put("vmArgs", String.format("%s -Dfile.encoding=%s", launchArguments.get("vmArgs"), context.getDebuggeeEncoding().name())); + launchArguments.put("vmArgs", vmArgList); } } context.setDebugMode(!noDebug); diff --git a/java/java.lsp.server/vscode/package.json b/java/java.lsp.server/vscode/package.json index 159af73515d5..067096c098b3 100644 --- a/java/java.lsp.server/vscode/package.json +++ b/java/java.lsp.server/vscode/package.json @@ -322,8 +322,13 @@ "vmArgs": { "type": [ "string", + "array", "null" ], + "items": { + "type": "string", + "description": "Single argument to the VM" + }, "description": "Arguments for the Java VM", "default": null }, @@ -618,7 +623,7 @@ { "command": "nbls.project.buildPushImage", "title": "Build and Push container image", - "icon": "$(live-share)" + "icon": "$(live-share)" }, { "command": "cloud.assets.policy.create", @@ -1082,7 +1087,7 @@ "when": "viewItem =~ /publicIp:.*/ && viewItem =~ /imageUrl:.*/", "group": "inline@10" }, - { + { "command": "nbls.project.buildPushImage", "when": "viewItem =~ /class:oracle.developer.ContainerRepositoryItem/", "group": "inline@9" diff --git a/java/java.lsp.server/vscode/src/runConfiguration.ts b/java/java.lsp.server/vscode/src/runConfiguration.ts index e8f1e44f3785..4b8b0ba22209 100644 --- a/java/java.lsp.server/vscode/src/runConfiguration.ts +++ b/java/java.lsp.server/vscode/src/runConfiguration.ts @@ -35,7 +35,7 @@ class RunConfigurationProvider implements vscode.DebugConfigurationProvider { resolve(config); }); } - + resolveDebugConfigurationWithSubstitutedVariables?(_folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, _token?: vscode.CancellationToken): vscode.ProviderResult { return new Promise(resolve => { const args = argumentsNode.getValue(); @@ -51,7 +51,11 @@ class RunConfigurationProvider implements vscode.DebugConfigurationProvider { if (vmArgs) { if (!config.vmArgs) { config.vmArgs = vmArgs; + } else if (Array.isArray(config.vmArgs)) { + let cfg : string[] = config.vmArgs; + cfg.push(vmArgs); } else { + // assume the config is a string config.vmArgs = `${config.vmArgs} ${vmArgs}`; } }