Support for running Boot-Java LS

This commit is contained in:
BoykoAlex
2017-10-06 14:34:29 -04:00
parent 97621308e0
commit 47d7ae8da1
10 changed files with 51 additions and 50 deletions

View File

@@ -15,7 +15,7 @@ class BootJavaLanguageClient extends JarLanguageClient {
path.join(__dirname, '..', 'server'),
'boot-java-language-server.jar'
);
this.DEBUG = true;
// this.DEBUG = true;
}
getGrammarScopes() {
@@ -37,14 +37,20 @@ class BootJavaLanguageClient extends JarLanguageClient {
super.activate();
}
compatibleJavaVersion(javaExecutablePath) {
return super.compatibleJavaVersion(javaExecutablePath).then(version => {
this.fileExists(`${javaExecutablePath}/bin/${this.correctBinname('javac')}`).then(exists => {
if (!exists) {
getOrInstallLauncher() {
return Promise.resolve('org.springframework.boot.loader.JarLauncher');
}
launchVmArgs(version) {
return super.getOrInstallLauncher().then(lsJar => {
const toolsJar = this.findJavaFile('lib', 'tools.jar');
return this.fileExists(toolsJar).then(toolsJarExists => {
if (!toolsJarExists) {
// Notify the user that tool.jar is not found
const notification = atom.notifications.addWarning(`"Boot-Java" Package Functionality Limited`, {
dismissable: true,
detail: 'No JDK found',
description: 'JAVA_HOME environment variable does not point to JDK hence Boot Hints are unavailable',
detail: 'No tools.jar found',
description: 'JAVA_HOME environment variable points either to JRE or JDK missing "lib/tools.jar" hence Boot Hints are unavailable',
buttons: [{
text: 'OK',
onDidClick: () => {
@@ -53,22 +59,18 @@ class BootJavaLanguageClient extends JarLanguageClient {
}],
});
}
return [
// '-Xdebug',
// '-agentlib:jdwp=transport=dt_socket,server=y,address=7999,suspend=n',
'-Dorg.slf4j.simpleLogger.logFile=boot-java.log',
'-Dorg.slf4j.simpleLogger.defaultLogLevel=debug',
'-cp',
`${toolsJarExists ? `${toolsJar}:` : ''}${lsJar}`
];
});
return version;
});
}
launchVmArgs(version) {
return [
'-Dorg.slf4j.simpleLogger.logFile=boot-java.log',
'-Dorg.slf4j.simpleLogger.defaultLogLevel=debug',
// '-Xdebug',
// '-agentlib:jdwp=transport=dt_socket,server=y,address=7999,suspend=n'
];
}
createStsAdapter() {
return new BootStsAdapter();
}

View File

@@ -17,7 +17,7 @@
"dependencies": {
"atom-package-deps": "^4.6.0",
"download": "^6.2.5",
"pivotal-atom-languageclient-commons": "0.0.12"
"pivotal-atom-languageclient-commons": "0.0.13"
},
"devDependencies": {
"coffeelint": "^1.10.1"

View File

@@ -38,10 +38,10 @@ class BoshYamlClient extends JarLanguageClient {
}
launchVmArgs(version) {
return [
return Promise.resolve([
'-Dorg.slf4j.simpleLogger.logFile=bosh-yaml.log',
'-Dorg.slf4j.simpleLogger.defaultLogLevel=debug',
];
]);
}

View File

@@ -19,7 +19,7 @@
"dependencies": {
"atom-package-deps": "^4.6.0",
"download": "^6.2.5",
"pivotal-atom-languageclient-commons": "0.0.12"
"pivotal-atom-languageclient-commons": "0.0.13"
},
"configSchema": {
"bosh": {

View File

@@ -34,10 +34,10 @@ class ManifestYamlLanguageClient extends JarLanguageClient {
}
launchVmArgs(version) {
return [
return Promise.resolve([
'-Dorg.slf4j.simpleLogger.logFile=manifest-yaml.log',
'-Dorg.slf4j.simpleLogger.defaultLogLevel=debug',
];
]);
}

View File

@@ -19,7 +19,7 @@
"dependencies": {
"atom-package-deps": "^4.6.0",
"download": "^6.2.5",
"pivotal-atom-languageclient-commons": "0.0.12"
"pivotal-atom-languageclient-commons": "0.0.13"
},
"devDependencies": {
"coffeelint": "^1.10.1"

View File

@@ -86,15 +86,17 @@ export class JarLanguageClient extends AutoLanguageClient {
launchProcess(port) {
const command = this.findJavaExecutable('java');
const command = this.findJavaFile('bin', this.correctBinname('java'));
return this.compatibleJavaVersion(command).then(version => {
if (version) {
var args = this.launchVmArgs(version);
if (version >= 9) {
args.push('--add-modules=java.se.ee');
}
return this.getOrInstallLauncher().then(launcher => this.doLaunchProcess(command, launcher, port, args));
return this.launchVmArgs(version).then(args => {
if (version >= 9) {
args.push('--add-modules=java.se.ee');
}
args.push(`-Dserver.port=${port}`);
return this.getOrInstallLauncher().then(launcher => this.doLaunchProcess(command, launcher, port, args));
});
} else {
this.logger.error('Java executable is not Java 8 or higher');
}
@@ -102,20 +104,18 @@ export class JarLanguageClient extends AutoLanguageClient {
}
launchVmArgs(version) {
return [];
return Promise.resolve([]);
}
doLaunchProcess(javaExecutable, launcher, port, args=[]) {
let vmArgs = args.concat([
`-Dserver.port=${port}`,
// Atom doesn't have lazy completion proposals support - completionItem/resolve message. Disable lazy completions
'-Dlsp.lazy.completions.disable=true',
'-Dlsp.completions.indentation.enable=true',
'-Dlsp.yaml.completions.errors.disable=true',
'-jar',
launcher
launcher.endsWith('.jar') ? `-jar ${launcher}` : launcher,
]);
this.logger.debug(`starting "${javaExecutable} ${vmArgs.join(' ')}"`);
this.logger.debug(`starting "${javaExecutable} ${vmArgs.join('\n')}"`);
return cp.spawn(javaExecutable, vmArgs, { cwd: this.serverHome })
}
@@ -171,16 +171,15 @@ export class JarLanguageClient extends AutoLanguageClient {
})
}
findJavaExecutable(binname) {
binname = this.correctBinname(binname);
findJavaFile(folders, file) {
// First search each JAVA_HOME bin folder
// First search each JAVA_HOME folder
if (process.env['JAVA_HOME']) {
let workspaces = process.env['JAVA_HOME'].split(path.delimiter);
for (let i = 0; i < workspaces.length; i++) {
let binpath = path.join(workspaces[i], 'bin', binname);
if (fs.existsSync(binpath)) {
return binpath;
let filepath = path.join(workspaces[i], folders, file);
if (fs.existsSync(filepath)) {
return filepath;
}
}
}
@@ -189,9 +188,9 @@ export class JarLanguageClient extends AutoLanguageClient {
if (process.env['PATH']) {
let pathparts = process.env['PATH'].split(path.delimiter);
for (let i = 0; i < pathparts.length; i++) {
let binpath = path.join(pathparts[i], binname);
if (fs.existsSync(binpath)) {
return binpath;
let filepath = path.join(pathparts[i], file);
if (fs.existsSync(filepath)) {
return filepath;
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "pivotal-atom-languageclient-commons",
"version": "0.0.12",
"version": "0.0.13",
"description": "Atom language client commons for STS4 language servers",
"repository": "https://github.com/spring-projects/sts4",
"license": "MIT",

View File

@@ -34,10 +34,10 @@ class ConcourseCiYamlClient extends JarLanguageClient {
}
launchVmArgs(version) {
return [
return Promise.resolve([
'-Dorg.slf4j.simpleLogger.logFile=concourse-ci-yaml.log',
'-Dorg.slf4j.simpleLogger.defaultLogLevel=debug',
];
]);
}

View File

@@ -19,7 +19,7 @@
"dependencies": {
"atom-package-deps": "^4.6.0",
"download": "^6.2.5",
"pivotal-atom-languageclient-commons": "0.0.12"
"pivotal-atom-languageclient-commons": "0.0.13"
},
"devDependencies": {
"coffeelint": "^1.10.1"