export async function getJavaForExecution()

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;
    }
}