Skip to content

Commit 4930fce

Browse files
Auto enable -XX:+ShowCodeDetailsInExceptionMessages for java 14 apps (#828)
Signed-off-by: Jinbo Wang <[email protected]>
1 parent 16ee681 commit 4930fce

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/configurationProvider.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import * as anchor from "./anchor";
1111
import { buildWorkspace } from "./build";
1212
import * as commands from "./commands";
1313
import * as lsPlugin from "./languageServerPlugin";
14-
import { detectLaunchCommandStyle, validateRuntime } from "./launchCommand";
14+
import { addMoreHelpfulVMArgs, detectLaunchCommandStyle, validateRuntime } from "./launchCommand";
1515
import { logger, Type } from "./logger";
1616
import { resolveProcessId } from "./processPicker";
1717
import * as utility from "./utility";
@@ -222,6 +222,9 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration
222222
validateRuntime(config);
223223
}
224224

225+
// Add more helpful vmArgs.
226+
await addMoreHelpfulVMArgs(config);
227+
225228
if (!config.shortenCommandLine || config.shortenCommandLine === "auto") {
226229
config.shortenCommandLine = await detectLaunchCommandStyle(config);
227230
}

src/launchCommand.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ enum shortenApproach {
1515
argfile = "argfile",
1616
}
1717

18+
const HELPFUL_NPE_VMARGS = "-XX:+ShowCodeDetailsInExceptionMessages";
19+
1820
export async function detectLaunchCommandStyle(config: vscode.DebugConfiguration): Promise<shortenApproach> {
1921
const javaExec: string = config.javaExec || path.join(await getJavaHome(), "bin", "java");
2022
const javaVersion = await checkJavaVersion(javaExec);
@@ -40,6 +42,23 @@ export async function validateRuntime(config: vscode.DebugConfiguration) {
4042
}
4143
}
4244

45+
export async function addMoreHelpfulVMArgs(config: vscode.DebugConfiguration) {
46+
try {
47+
const javaExec = config.javaExec || path.join(await getJavaHome(), "bin", "java");
48+
const version = await checkJavaVersion(javaExec);
49+
if (version >= 14) {
50+
// JEP-358: https://openjdk.java.net/jeps/358
51+
if (config.vmArgs && config.vmArgs.indexOf(HELPFUL_NPE_VMARGS) >= 0) {
52+
return;
53+
}
54+
55+
config.vmArgs = (config.vmArgs || "") + " " + HELPFUL_NPE_VMARGS;
56+
}
57+
} catch (error) {
58+
// do nothing.
59+
}
60+
}
61+
4362
function checkJavaVersion(javaExec: string): Promise<number> {
4463
return new Promise((resolve, reject) => {
4564
cp.execFile(javaExec, ["-version"], {}, (error, stdout, stderr) => {

0 commit comments

Comments
 (0)