diff --git a/eclipse-language-servers/org.springframework.tooling.boot.java.ls/src/org/springframework/tooling/boot/java/ls/SpringBootJavaLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.boot.java.ls/src/org/springframework/tooling/boot/java/ls/SpringBootJavaLanguageServer.java index dbcfb041b..6c1ae5c3b 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.java.ls/src/org/springframework/tooling/boot/java/ls/SpringBootJavaLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.java.ls/src/org/springframework/tooling/boot/java/ls/SpringBootJavaLanguageServer.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.springframework.tooling.boot.java.ls; +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.BOOT_JAVA_SERVER; + import java.io.File; import java.io.InputStream; import java.nio.file.Files; @@ -23,7 +25,6 @@ import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.JRE.MissingJDKException; -import org.springframework.tooling.ls.eclipse.commons.JRE.MissingToolsJarException; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; /** @@ -32,7 +33,7 @@ import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessS public class SpringBootJavaLanguageServer extends STS4LanguageServerProcessStreamConnector { public SpringBootJavaLanguageServer() { - super("Boot Java Language Server"); + super(BOOT_JAVA_SERVER); List commands = new ArrayList<>(); JRE jre = getJRE(); commands.add(jre.getJavaExecutable()); diff --git a/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java index 4548862e2..45f43f3cb 100644 --- a/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.bosh.ls/src/org/springframework/tooling/bosh/ls/BoshLanguageServer.java @@ -24,13 +24,15 @@ import org.osgi.framework.Bundle; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*; + /** * @author Martin Lippert */ public class BoshLanguageServer extends STS4LanguageServerProcessStreamConnector { public BoshLanguageServer() { - super("Bosh Language Server"); + super(BOSH_SERVER); List commands = new ArrayList<>(); commands.add(JRE.currentJRE().getJavaExecutable()); diff --git a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java index 8a5c9b625..655b93677 100644 --- a/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.cloudfoundry.manifest.ls/src/org/springframework/tooling/cloudfoundry/manifest/ls/CloudFoundryManifestLanguageServer.java @@ -31,6 +31,8 @@ import org.osgi.framework.Bundle; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*; + /** * @author Martin Lippert */ @@ -43,7 +45,7 @@ public class CloudFoundryManifestLanguageServer extends STS4LanguageServerProces private static List servers = new CopyOnWriteArrayList<>(); public CloudFoundryManifestLanguageServer() { - super("Cloudfoundry Language Server"); + super(CLOUDFOUNDRY_SERVER); List commands = new ArrayList<>(); commands.add(JRE.currentJRE().getJavaExecutable()); diff --git a/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java index 86e87127a..d511ca904 100644 --- a/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.concourse.ls/src/org/springframework/tooling/concourse/ls/ConcourseLanguageServer.java @@ -24,13 +24,15 @@ import org.osgi.framework.Bundle; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*; + /** * @author Martin Lippert */ public class ConcourseLanguageServer extends STS4LanguageServerProcessStreamConnector { public ConcourseLanguageServer() { - super("Concourse Language Server"); + super(CONCOURSE_SERVER); List commands = new ArrayList<>(); commands.add(JRE.currentJRE().getJavaExecutable()); diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/META-INF/MANIFEST.MF index a190b73ae..a6f59c21c 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/META-INF/MANIFEST.MF +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/META-INF/MANIFEST.MF @@ -17,4 +17,6 @@ Require-Bundle: org.eclipse.jdt.launching;bundle-version="3.8.0", org.eclipse.ui.console Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy -Export-Package: org.springframework.tooling.ls.eclipse.commons +Export-Package: org.springframework.tooling.ls.eclipse.commons, + org.springframework.tooling.ls.eclipse.commons.console.preferences +Bundle-Activator: org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/plugin.xml b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/plugin.xml index 6472f5015..b3208c356 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/plugin.xml +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/plugin.xml @@ -26,5 +26,18 @@ verticalRulerPreferenceValue="true"> - + + + + + + + + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java new file mode 100644 index 000000000..bc4c2592b --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/LanguageServerCommonsActivator.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +public class LanguageServerCommonsActivator extends AbstractUIPlugin { + + private static LanguageServerCommonsActivator instance; + + public LanguageServerCommonsActivator() { + } + + @Override + public void start(BundleContext context) throws Exception { + instance = this; + super.start(context); + } + + public static LanguageServerCommonsActivator getInstance() { + return instance; + } + + +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageServerProcessStreamConnector.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageServerProcessStreamConnector.java index e87d0a0ac..e5f40eda9 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageServerProcessStreamConnector.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageServerProcessStreamConnector.java @@ -26,16 +26,16 @@ import org.springframework.tooling.ls.eclipse.commons.console.LanguageServerCons import com.google.common.base.Charsets; import com.google.common.base.Supplier; +import org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.ServerInfo; + public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConnectionProvider { private static LanguageServerProcessReaper processReaper = new LanguageServerProcessReaper(); private Supplier consoles = null; - public STS4LanguageServerProcessStreamConnector(String consoleLabel) { - if (consoleLabel!=null) { - this.consoles = LanguageServerConsoles.getConsoleFactory(consoleLabel); - } + public STS4LanguageServerProcessStreamConnector(ServerInfo server) { + this.consoles = LanguageServerConsoles.getConsoleFactory(server); } @Override @@ -55,6 +55,7 @@ public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConne } ProcessBuilder builder = new ProcessBuilder(getCommands()); builder.directory(new File(getWorkingDirectory())); + //Super does this, but we do not: //builder.redirectError(ProcessBuilder.Redirect.INHERIT); return builder; } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsoles.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsoles.java index 929512ea9..129345e20 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsoles.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/LanguageServerConsoles.java @@ -13,7 +13,9 @@ package org.springframework.tooling.ls.eclipse.commons.console; import java.util.HashMap; import java.util.Map; +import org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator; import org.springframework.tooling.ls.eclipse.commons.console.ConsoleUtil.Console; +import org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.ServerInfo; import com.google.common.base.Supplier; @@ -21,18 +23,21 @@ public class LanguageServerConsoles { private static Map> managers; - public static synchronized Supplier getConsoleFactory(String languageServerName) { + public static synchronized Supplier getConsoleFactory(ServerInfo server) { + if (!isConsoleEnabled(server)) { + return null; + } if (managers==null) { managers = new HashMap<>(); } - return managers.computeIfAbsent(languageServerName, label -> new Supplier() { + return managers.computeIfAbsent(server.label, label -> new Supplier() { ConsoleUtil consoleMgr = new ConsoleUtil(); //one console manager per language server type. This way each has their // own history (which limits number of open consoles per type) int consoleCounter = 0; @Override public Console get() { - return consoleMgr.getConsole(languageServerName+" "+consoleCounter()); + return consoleMgr.getConsole(server.label+" Language Server "+consoleCounter()); } private synchronized int consoleCounter() { @@ -41,4 +46,8 @@ public class LanguageServerConsoles { }); } + private static boolean isConsoleEnabled(ServerInfo server) { + return LanguageServerCommonsActivator.getInstance().getPreferenceStore().getBoolean(server.preferenceKey); + } + } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolePreferenceConstants.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolePreferenceConstants.java new file mode 100644 index 000000000..117228539 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolePreferenceConstants.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console.preferences; + +public class LanguageServerConsolePreferenceConstants { + + public static final boolean ENABLE_BY_DEFAULT = true; + + public static final String PREF_BOOT_JAVA_CONSOLE_ENABLED = "boot-java.console.enabled"; + public static final String PREF_BOOT_PROPS_CONSOLE_ENABLED = "boot-properties.console.enabled"; + public static final String PREF_CONCOURSE_CONSOLE_ENABLED = "concourse.console.enabled"; + public static final String PREF_CLOUDFOUNDRY_CONSOLE_ENABLED = "cloudfoundry.console.enabled"; + public static final String PREF_BOSH_CONSOLE_ENABLED = "bosh.console.enabled"; + + public static final ServerInfo BOOT_JAVA_SERVER = new ServerInfo(PREF_BOOT_JAVA_CONSOLE_ENABLED, "Boot Java"); + public static final ServerInfo BOOT_PROPS_SERVER = new ServerInfo(PREF_BOOT_PROPS_CONSOLE_ENABLED, "Boot Properties"); + public static final ServerInfo CLOUDFOUNDRY_SERVER = new ServerInfo(PREF_CLOUDFOUNDRY_CONSOLE_ENABLED, "Cloudfoundry"); + public static final ServerInfo CONCOURSE_SERVER = new ServerInfo(PREF_CONCOURSE_CONSOLE_ENABLED, "Concourse"); + public static final ServerInfo BOSH_SERVER = new ServerInfo(PREF_BOSH_CONSOLE_ENABLED, "Bosh"); + + public static final ServerInfo[] ALL_SERVERS = { + BOOT_JAVA_SERVER, + BOOT_PROPS_SERVER, + CLOUDFOUNDRY_SERVER, + CONCOURSE_SERVER, + BOSH_SERVER + }; + + public static class ServerInfo { + public final String preferenceKey; + public final String label; + public ServerInfo(String preferenceKey, String label) { + super(); + this.preferenceKey = preferenceKey; + this.label = label; + } + @Override + public String toString() { + return "ServerInfo [preferenceKey=" + preferenceKey + ", label=" + label + "]"; + } + } +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPreferencesPage.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPreferencesPage.java new file mode 100644 index 000000000..9cd27042f --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPreferencesPage.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console.preferences; + +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.ALL_SERVERS; + +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator; +import org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.ServerInfo; + +public class LanguageServerConsolesPreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { + + static IPreferenceStore getPrefsStoreFromPlugin() { + return LanguageServerCommonsActivator.getInstance().getPreferenceStore(); + } + + @Override + public void init(IWorkbench workbench) { + setDescription("Enablement of STS Language Server Debug Consoles. " + + "Changes only take effect the next time a Language Server is started."); + setPreferenceStore(getPrefsStoreFromPlugin()); + } + + @Override + protected void createFieldEditors() { + Composite parent = getFieldEditorParent(); + for (ServerInfo s : ALL_SERVERS) { + addField(new BooleanFieldEditor(s.preferenceKey, s.label, parent)); + } + } +} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPrefsInitializer.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPrefsInitializer.java new file mode 100644 index 000000000..795fcc4b3 --- /dev/null +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/console/preferences/LanguageServerConsolesPrefsInitializer.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.tooling.ls.eclipse.commons.console.preferences; + +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.jface.preference.IPreferenceStore; +import org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.ServerInfo; + +public class LanguageServerConsolesPrefsInitializer extends AbstractPreferenceInitializer { + @Override + public void initializeDefaultPreferences() { + IPreferenceStore store = LanguageServerConsolesPreferencesPage.getPrefsStoreFromPlugin(); + for (ServerInfo s : ALL_SERVERS) { + store.setDefault(s.preferenceKey, ENABLE_BY_DEFAULT); + } + } +} \ No newline at end of file diff --git a/eclipse-language-servers/org.springframework.tooling.properties.ls/src/org/springframework/tooling/properties/ls/SpringBootPropertiesLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.properties.ls/src/org/springframework/tooling/properties/ls/SpringBootPropertiesLanguageServer.java index 598d5a7e0..a4c47766e 100644 --- a/eclipse-language-servers/org.springframework.tooling.properties.ls/src/org/springframework/tooling/properties/ls/SpringBootPropertiesLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.properties.ls/src/org/springframework/tooling/properties/ls/SpringBootPropertiesLanguageServer.java @@ -24,13 +24,15 @@ import org.osgi.framework.Bundle; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; +import static org.springframework.tooling.ls.eclipse.commons.console.preferences.LanguageServerConsolePreferenceConstants.*; + /** * @author Martin Lippert */ public class SpringBootPropertiesLanguageServer extends STS4LanguageServerProcessStreamConnector { public SpringBootPropertiesLanguageServer() { - super("Boot Properties Language Server"); + super(BOOT_PROPS_SERVER); List commands = new ArrayList<>(); commands.add(JRE.currentJRE().getJavaExecutable());