in vscode/qodana/src/core/jdk/jbrDownloader.ts [180:212]
export async function getJavaForExecution(context: vscode.ExtensionContext): Promise<string | undefined> {
try {
let javaFromSettings = context.globalState.get<string | undefined>(GS_JAVA_EXECUTABLE_PATH);
if (javaFromSettings) {
try {
await fs.promises.access(javaFromSettings);
return javaFromSettings;
} catch (e) {
await context.globalState.update(GS_JAVA_EXECUTABLE_PATH, undefined);
}
}
let localJava = getJavaExecutablePath();
if (localJava) {
await context.globalState.update(GS_JAVA_EXECUTABLE_PATH, localJava);
return localJava;
}
let decision = await vscode.window.showErrorMessage(DOWNLOAD_CONFIRMATION, YES, NO);
if (decision === YES) {
let downloadedJbrDir = path.join(context.globalStorageUri.fsPath, Math.random().toString(36).substring(7));
await fs.promises.mkdir(downloadedJbrDir, { recursive: true });
let java = await downloadAndUnpackJbr(downloadedJbrDir);
if (java) {
telemetry.jbrDownloaded();
await context.globalState.update(GS_JAVA_EXECUTABLE_PATH, java);
vscode.window.showInformationMessage(successfullyExtracted(java));
return java;
}
}
} catch (e) {
telemetry.errorReceived('#getJavaForExecution exception');
return undefined;
}
}