Support for running Boot-Java LS
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user