diff --git a/vscode-extensions/commons-vscode/src/launch-util.ts b/vscode-extensions/commons-vscode/src/launch-util.ts index 238d8004d..813560a66 100644 --- a/vscode-extensions/commons-vscode/src/launch-util.ts +++ b/vscode-extensions/commons-vscode/src/launch-util.ts @@ -41,6 +41,7 @@ export interface ActivatorOptions { type JavaOptions = { heap?: string home?: string + vmargs?: string[] } function getUserDefinedJvmHeap(wsOpts : VSCode.WorkspaceConfiguration, dflt : string) : string { @@ -51,6 +52,15 @@ function getUserDefinedJvmHeap(wsOpts : VSCode.WorkspaceConfiguration, dflt : s return (javaOptions && javaOptions.heap) || dflt; } +function getUserDefinedJvmArgs(wsOpts : VSCode.WorkspaceConfiguration) : string[] { + const dflt = []; + if (!wsOpts) { + return dflt; + } + let javaOptions : JavaOptions = wsOpts.get("java"); + return javaOptions && javaOptions.vmargs || dflt; +} + function getUserDefinedJavaHome(wsOpts : VSCode.WorkspaceConfiguration) : string { if (!wsOpts) { return null; @@ -62,6 +72,7 @@ function getUserDefinedJavaHome(wsOpts : VSCode.WorkspaceConfiguration) : string export function activate(options: ActivatorOptions, context: VSCode.ExtensionContext): Thenable { let DEBUG = options.DEBUG; let jvmHeap = getUserDefinedJvmHeap(options.workspaceOptions, options.jvmHeap); + let jvmArgs = getUserDefinedJvmArgs(options.workspaceOptions); if (options.CONNECT_TO_LS) { return VSCode.window.showInformationMessage("Start language server") .then((x) => connectToLS(context, options)); @@ -132,9 +143,12 @@ export function activate(options: ActivatorOptions, context: VSCode.ExtensionCon if (options.checkjvm) { options.checkjvm(context, jvm); } - if (jvmHeap) { + if (jvmHeap && !hasHeapArg(jvmArgs)) { args.unshift("-Xmx"+jvmHeap); } + if (jvmArgs) { + args.unshift(...jvmArgs); + } if (DEBUG) { args.unshift(DEBUG_ARG); } @@ -157,6 +171,13 @@ export function activate(options: ActivatorOptions, context: VSCode.ExtensionCon } } +function hasHeapArg(vmargs?: string[]) : boolean { + if (vmargs) { + return vmargs.some(a => a.startsWith("-Xmx")); + } + return false; +} + function findServerJar(jarsDir) : string { let serverJars = FS.readdirSync(jarsDir).filter(jar => jar.indexOf('language-server')>=0 && @@ -171,7 +192,6 @@ function findServerJar(jarsDir) : string { return Path.resolve(jarsDir, serverJars[0]); } - function connectToLS(context: VSCode.ExtensionContext, options: ActivatorOptions): Promise { let connectionInfo = { port: 5007 diff --git a/vscode-extensions/vscode-spring-boot/package-lock.json b/vscode-extensions/vscode-spring-boot/package-lock.json index ce1b7bfa6..ff7d1d5f9 100644 --- a/vscode-extensions/vscode-spring-boot/package-lock.json +++ b/vscode-extensions/vscode-spring-boot/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-spring-boot", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@pivotal-tools/commons-vscode": { "version": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.2.tgz", - "integrity": "sha512-OTvqzfrIjJ2f5CkT9CZomCiOVx4vz4vViDhYV3zRtG27fD+tWeD2smnPOjRupBrRwqdOKuZY8ztLFX6rJu854w==", + "integrity": "sha512-hgbMlJKDCkG3xQsTNEKFcGgic/zuSkkqRD2HOx5xeHbPdFAuQbv7eXNNFRxaw1cLU8re/s4gHWAa56bESqP5RQ==", "requires": { "@pivotal-tools/jvm-launch-utils": "0.0.11", "deep-equal": "^1.0.1", diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index 3686c5df0..182b35b7c 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -127,6 +127,13 @@ ], "default": null, "description": "Max JVM heap value, passed via -Xmx argument when launching spring-boot-language-server JVM process." + }, + "spring-boot.ls.java.vmargs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Additional 'user defined' VM args to pass to the language server process." } } },