export function getJavaExecutablePath()

in vscode/qodana/src/core/jdk/jbrDownloader.ts [137:178]


export function getJavaExecutablePath(): string | null {
    let cmd: String;
    if (os.platform() === 'win32') {
        cmd = "java -XshowSettings:properties -version 2>&1 | findstr \"java.home\"";
    } else {
        cmd = "java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'";
    }
    let javaHome: string | null = null;
    try {
        javaHome = require('child_process').execSync(cmd).toString().split('=')[1].trim();
    } catch (error) {
        return null;
    }
    if (javaHome) {
        if (os.platform() === 'win32') {
            cmd = "java -XshowSettings:properties -version 2>&1 | findstr \"java.class.version\"";
        } else {
            cmd = "java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.class.version'";
        }
        let javaClassVersion: string | null = null;
        try {
            javaClassVersion = require('child_process').execSync(cmd).toString().split('=')[1].trim();
        } catch (error) {
            telemetry.errorReceived('#getJavaExecutablePath exception (getting java class version)');
            console.log('Failed to get JAVA_HOME. ' + (error));
        }

        if (javaClassVersion) {
            let version = javaClassVersion.split('.')[0];
            if (version) {
                if (parseInt(version) < 55) {
                    return null;
                }
            }
        } else {
            return null;
        }

        return path.join(javaHome, 'bin', 'java' + (os.platform() === 'win32' ? '.exe' : ''));
    }
    return null;
}