diff --git a/src/extension.ts b/src/extension.ts index d9124145e..bbbd3660f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -283,7 +283,11 @@ export function parseVMargs(params:any[], vmargsLine:string) { if (vmargs === null) { return; } - vmargs.forEach (function(arg) { + vmargs.forEach (arg => { + //remove all standalone double quotes + arg = arg.replace( /(\\)?"/g, function ($0, $1) { return ($1 ? $0 : ''); }); + //unescape all escaped double quotes + arg = arg.replace( /(\\)"/g, '"'); if (params.indexOf(arg) < 0) { params.push(arg); } diff --git a/test/extension.test.ts b/test/extension.test.ts index cb1748415..3ef5f0e30 100644 --- a/test/extension.test.ts +++ b/test/extension.test.ts @@ -19,7 +19,7 @@ suite('Java Language Extension', () => { return vscode.commands.getCommands(true).then((commands) => { let javaCmds = commands.filter(function(value){ - return 'java.open.output' === value || + return 'java.open.output' === value || 'java.show.references' === value; }); assert.ok(javaCmds.length === 2, 'missing java commands'); @@ -42,4 +42,16 @@ suite('Java Language Extension', () => { done(); }); + test('should parse VM arguments with spaces', function (done) { + let userArgs = '-javaagent:"C:\\Program Files\\Java\\lombok.jar" -Xbootclasspath/a:"C:\\Program Files\\Java\\lombok.jar" -Dfoo="Some \\"crazy\\" stuff"'; + let vmArgs = []; + + java.parseVMargs(vmArgs, userArgs); + + assert.equal(vmArgs.length, 3); + assert.equal(vmArgs[0], '-javaagent:C:\\Program Files\\Java\\lombok.jar'); + assert.equal(vmArgs[1], '-Xbootclasspath/a:C:\\Program Files\\Java\\lombok.jar'); + assert.equal(vmArgs[2], '-Dfoo=Some "crazy" stuff'); + done(); + }); }); \ No newline at end of file