coc-java
Version:
Java langauage extension for coc.nvim
116 lines • 4.4 kB
JavaScript
;
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