diff --git a/atom-extensions/atom-boot-java/lib/main.js b/atom-extensions/atom-boot-java/lib/main.js index ac2e8c2cf..cb5bf6fc7 100644 --- a/atom-extensions/atom-boot-java/lib/main.js +++ b/atom-extensions/atom-boot-java/lib/main.js @@ -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(); } diff --git a/atom-extensions/atom-boot-java/package.json b/atom-extensions/atom-boot-java/package.json index e47066374..456f03dfa 100644 --- a/atom-extensions/atom-boot-java/package.json +++ b/atom-extensions/atom-boot-java/package.json @@ -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" diff --git a/atom-extensions/atom-bosh/lib/main.js b/atom-extensions/atom-bosh/lib/main.js index c5908d594..2714f1c86 100644 --- a/atom-extensions/atom-bosh/lib/main.js +++ b/atom-extensions/atom-bosh/lib/main.js @@ -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', - ]; + ]); } diff --git a/atom-extensions/atom-bosh/package.json b/atom-extensions/atom-bosh/package.json index 9ecd253e4..d871bcd6f 100644 --- a/atom-extensions/atom-bosh/package.json +++ b/atom-extensions/atom-bosh/package.json @@ -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": { diff --git a/atom-extensions/atom-cf-manifest-yaml/lib/main.js b/atom-extensions/atom-cf-manifest-yaml/lib/main.js index 0019d4dd5..c2028cf3c 100644 --- a/atom-extensions/atom-cf-manifest-yaml/lib/main.js +++ b/atom-extensions/atom-cf-manifest-yaml/lib/main.js @@ -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', - ]; + ]); } diff --git a/atom-extensions/atom-cf-manifest-yaml/package.json b/atom-extensions/atom-cf-manifest-yaml/package.json index 09bda7938..b52286b29 100644 --- a/atom-extensions/atom-cf-manifest-yaml/package.json +++ b/atom-extensions/atom-cf-manifest-yaml/package.json @@ -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" diff --git a/atom-extensions/atom-commons/lib/jar-language-client.js b/atom-extensions/atom-commons/lib/jar-language-client.js index 6c33428d6..0454f9d77 100644 --- a/atom-extensions/atom-commons/lib/jar-language-client.js +++ b/atom-extensions/atom-commons/lib/jar-language-client.js @@ -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; } } } diff --git a/atom-extensions/atom-commons/package.json b/atom-extensions/atom-commons/package.json index 0f00676c3..a5de692c3 100644 --- a/atom-extensions/atom-commons/package.json +++ b/atom-extensions/atom-commons/package.json @@ -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", diff --git a/atom-extensions/atom-concourse/lib/main.js b/atom-extensions/atom-concourse/lib/main.js index c907c0f86..dc2f99a3a 100644 --- a/atom-extensions/atom-concourse/lib/main.js +++ b/atom-extensions/atom-concourse/lib/main.js @@ -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', - ]; + ]); } diff --git a/atom-extensions/atom-concourse/package.json b/atom-extensions/atom-concourse/package.json index a9d60bbac..8fef38097 100644 --- a/atom-extensions/atom-concourse/package.json +++ b/atom-extensions/atom-concourse/package.json @@ -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"