UNPKG

coc-java

Version:

Java langauage extension for coc.nvim

116 lines 4.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const coc_nvim_1 = require("coc.nvim"); const child_process_1 = tslib_1.__importDefault(require("child_process")); const path_1 = tslib_1.__importDefault(require("path")); const path_exists_1 = tslib_1.__importDefault(require("path-exists")); const expand_home_dir_1 = tslib_1.__importDefault(require("expand-home-dir")); const find_java_home_1 = tslib_1.__importDefault(require("find-java-home")); const vscode_uri_1 = tslib_1.__importDefault(require("vscode-uri")); const isWindows = process.platform.indexOf('win') === 0; const JAVAC_FILENAME = 'javac' + (isWindows ? '.exe' : ''); /** * Resolves the requirements needed to run the extension. * Returns a promise that will resolve to a RequirementsData if * all requirements are resolved, it will reject with ErrorData if * if any of the requirements fails to resolve. * */ function resolveRequirements() { return tslib_1.__awaiter(this, void 0, void 0, function* () { let java_home = yield checkJavaRuntime(); let javaVersion = yield checkJavaVersion(java_home); return Promise.resolve({ 'java_home': java_home, 'java_version': javaVersion }); }); } exports.resolveRequirements = resolveRequirements; function checkJavaRuntime() { return new Promise((resolve, reject) => { let source; let javaHome = readJavaConfig(); if (javaHome) { source = 'The java.home variable defined in VS Code settings'; } else { javaHome = process.env['JDK_HOME']; if (javaHome) { source = 'The JDK_HOME environment variable'; } else { javaHome = process.env['JAVA_HOME']; source = 'The JAVA_HOME environment variable'; } } if (javaHome) { javaHome = expand_home_dir_1.default(javaHome); if (!path_exists_1.default.sync(javaHome)) { openJDKDownload(reject, source + ' points to a missing folder'); } if (!path_exists_1.default.sync(path_1.default.resolve(javaHome, 'bin', JAVAC_FILENAME))) { openJDKDownload(reject, source + ' does not point to a JDK.'); } return resolve(javaHome); } //No settings, let's try to detect as last resort. find_java_home_1.default(function (err, home) { if (err) { openJDKDownload(reject, 'Java runtime could not be located'); } else { resolve(home); } }); }); } function readJavaConfig() { const config = coc_nvim_1.workspace.getConfiguration('java'); return config.get('home', null); } function checkJavaVersion(java_home) { return new Promise((resolve, reject) => { child_process_1.default.execFile(java_home + '/bin/java', ['-version'], {}, (_error, _stdout, stderr) => { let javaVersion = parseMajorVersion(stderr); if (javaVersion < 8) { openJDKDownload(reject, 'Java 8 or more recent is required to run. Please download and install a recent JDK'); } else { resolve(javaVersion); } }); }); } function parseMajorVersion(content) { let regexp = /version "(.*)"/g; let match = regexp.exec(content); if (!match) { return 0; } let version = match[1]; //Ignore '1.' prefix for legacy Java versions if (version.startsWith('1.')) { version = version.substring(2); } //look into the interesting bits now regexp = /\d+/g; match = regexp.exec(version); let javaVersion = 0; if (match) { javaVersion = parseInt(match[0]); } return javaVersion; } exports.parseMajorVersion = parseMajorVersion; function openJDKDownload(reject, cause) { let jdkUrl = 'https://developers.redhat.com/products/openjdk/download/?sc_cid=701f2000000RWTnAAO'; if (process.platform === 'darwin') { jdkUrl = 'http://www.oracle.com/technetwork/java/javase/downloads/index.html'; } reject({ message: cause, label: 'Get the Java Development Kit', openUrl: vscode_uri_1.default.parse(jdkUrl), replaceClose: false }); } //# sourceMappingURL=requirements.js.map