diff --git a/lsp/org.eclipse.cdt.lsp.core/META-INF/MANIFEST.MF b/lsp/org.eclipse.cdt.lsp.core/META-INF/MANIFEST.MF index 212c701adca..f361e02d61c 100644 --- a/lsp/org.eclipse.cdt.lsp.core/META-INF/MANIFEST.MF +++ b/lsp/org.eclipse.cdt.lsp.core/META-INF/MANIFEST.MF @@ -27,6 +27,7 @@ Export-Package: org.eclipse.cdt.cquery;x-friends:="org.eclipse.cdt.lsp.ui", org.eclipse.cdt.internal.clangd;x-friends:="org.eclipse.cdt.lsp.ui", org.eclipse.cdt.internal.cquery;x-friends:="org.eclipse.cdt.lsp.ui", org.eclipse.cdt.internal.cquery.ui;x-internal:=true, + org.eclipse.cdt.lsp;x-friends:="org.eclipse.cdt.lsp.ui", org.eclipse.cdt.lsp.core;x-friends:="org.eclipse.cdt.lsp.ui", org.eclipse.cdt.lsp.internal.core;x-internal:=true, org.eclipse.cdt.lsp.internal.text;x-friends:="org.eclipse.cdt.lsp.ui" diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdLanguageServer.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdLanguageServer.java index 13248a3b819..43f97ec74f1 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdLanguageServer.java +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdLanguageServer.java @@ -19,17 +19,14 @@ import org.osgi.service.component.annotations.Component; @Component public class ClangdLanguageServer implements LanguageServerConfiguration { - //FIXME: remove this constant, it is not needed outside the class - public static final String CLANGD_ID = "clangd"; //$NON-NLS-1$ - @Override public String identifier() { - return ClangdLanguageServer.CLANGD_ID; + return "clangd"; //$NON-NLS-1$ } @Override public String label() { - return "ClangD"; + return ClangdMessages.ClangdLanguageServer_label; } @Override diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.java new file mode 100644 index 00000000000..ef31ff2245e --- /dev/null +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Alexander Fedorov (ArSysOp) - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.internal.clangd; + +import org.eclipse.osgi.util.NLS; + +public class ClangdMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.clangd.ClangdMessages"; //$NON-NLS-1$ + public static String ClangdLanguageServer_label; + static { + // initialize resource bundle + NLS.initializeMessages(BUNDLE_NAME, ClangdMessages.class); + } + + private ClangdMessages() { + } +} diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.properties b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.properties new file mode 100644 index 00000000000..5eca9ccc679 --- /dev/null +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/clangd/ClangdMessages.properties @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2020 ArSysOp and others. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# https://www.eclipse.org/legal/epl-2.0/. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Alexander Fedorov (ArSysOp) - initial API and implementation +############################################################################### + +ClangdLanguageServer_label=ClangD diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryLanguageServer.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryLanguageServer.java index 4d744eeb70c..83502c72df4 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryLanguageServer.java +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryLanguageServer.java @@ -25,17 +25,14 @@ import com.google.gson.JsonObject; @Component public class CqueryLanguageServer implements LanguageServerConfiguration { - //FIXME: remove this constant, it is not needed outside the class - public static final String CQUERY_ID = "cquery"; //$NON-NLS-1$ - @Override public String identifier() { - return CqueryLanguageServer.CQUERY_ID; + return "cquery"; //$NON-NLS-1$ } @Override public String label() { - return "CQuery"; + return CqueryMessages.CqueryLanguageServer_label; } @Override diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.java index e279b7888e3..76351e8158b 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.java +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.java @@ -1,14 +1,11 @@ /******************************************************************************* - * Copyright (c) 2019 Eclipse Foundation and others. + * Copyright (c) 2019, 2020 Eclipse contributors and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * https://www.eclipse.org/legal/epl-2.0/. * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Alexander Fedorov - initial API and implementatin *******************************************************************************/ package org.eclipse.cdt.internal.cquery; @@ -23,6 +20,7 @@ public class CqueryMessages extends NLS { NLS.initializeMessages(BUNDLE_NAME, CqueryMessages.class); } + public static String CqueryLanguageServer_label; public static String CquerySymbolKind_e_illegal_value; public static String Server2ClientProtocolExtension_cquery_name; public static String StorageClass_e_illegal_value; diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.properties b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.properties index 2bc2141f500..f01272e9988 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.properties +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/internal/cquery/CqueryMessages.properties @@ -1,17 +1,13 @@ ############################################################################### -# Copyright (c) 2019 Eclipse Foundation and others +# Copyright (c) 2019, 2020 Eclipse contributors and others. # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at # https://www.eclipse.org/legal/epl-2.0/. # # SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Eclipse Foundation - initial API and implementation -# Alexander Fedorov - Bug 558484 ############################################################################### +CqueryLanguageServer_label=CQuery CquerySymbolKind_e_illegal_value=Illegal value {0} for cquery symbol kind -Server2ClientProtocolExtension_cquery_name=CQuery StorageClass_e_illegal_value=Illegal enum value: {0} diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/PreferenceInitializer.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/PreferenceInitializer.java index 9954a5055b3..ab9f00c5da5 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/PreferenceInitializer.java +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/PreferenceInitializer.java @@ -23,6 +23,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer { @Override public void initializeDefaultPreferences() { IEclipsePreferences node = DefaultScope.INSTANCE.getNode(Activator.PLUGIN_ID); + //FIXME: how to determine the preferred LS implementation? node.put(PreferenceConstants.P_SERVER_CHOICE, "clangd"); //$NON-NLS-1$ node.put(PreferenceConstants.P_SERVER_OPTIONS, ""); //$NON-NLS-1$ } diff --git a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/Server2ClientProtocolExtension.java b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/Server2ClientProtocolExtension.java index 36a45ae2799..6391cde5983 100644 --- a/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/Server2ClientProtocolExtension.java +++ b/lsp/org.eclipse.cdt.lsp.core/src/org/eclipse/cdt/lsp/core/Server2ClientProtocolExtension.java @@ -58,8 +58,7 @@ public class Server2ClientProtocolExtension extends LanguageClientImpl { public Server2ClientProtocolExtension() { this.uri = new ResolveDocumentUri(); - this.progress = new ShowStatus(() -> CqueryMessages.Server2ClientProtocolExtension_cquery_name, - new StatusLineMessage()); + this.progress = new ShowStatus(() -> CqueryMessages.CqueryLanguageServer_label, new StatusLineMessage()); } @JsonNotification("$cquery/progress") diff --git a/lsp/org.eclipse.cdt.lsp.ui/META-INF/MANIFEST.MF b/lsp/org.eclipse.cdt.lsp.ui/META-INF/MANIFEST.MF index d560c99d9de..78a7b3ec283 100644 --- a/lsp/org.eclipse.cdt.lsp.ui/META-INF/MANIFEST.MF +++ b/lsp/org.eclipse.cdt.lsp.ui/META-INF/MANIFEST.MF @@ -7,6 +7,7 @@ Bundle-Name: %Bundle-Name Bundle-Vendor: %Bundle-Vendor Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.eclipse.osgi;bundle-version="[3.15.0,4.0.0)", + org.eclipse.core.runtime;bundle-version="3.19.0", org.eclipse.equinox.preferences;bundle-version="[3.7.0,4.0.0)", org.eclipse.jface.text;bundle-version="3.16.0", org.eclipse.ui;bundle-version="[3.115.0,4.0.0)", diff --git a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.java b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.java index 8e97df5ab6c..ba20d2fe840 100644 --- a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.java +++ b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019 Eclipse Foundation and others. + * Copyright (c) 2019, 2020 Eclipse Foundation and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -24,9 +24,6 @@ public class LspUiMessages extends NLS { NLS.initializeMessages(BUNDLE_NAME, LspUiMessages.class); } - public static String CPPLanguageServerPreferencePage_clangd; - public static String CPPLanguageServerPreferencePage_cquery; - public static String CPPLanguageServerPreferencePage_description; public static String CPPLanguageServerPreferencePage_server_options; public static String CPPLanguageServerPreferencePage_server_path; diff --git a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.properties b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.properties index 9f6f0b68048..d6ca6401afe 100644 --- a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.properties +++ b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/LspUiMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2019-2020 Eclipse Foundation and others +# Copyright (c) 2019, 2020 Eclipse Foundation and others # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License 2.0 which is available at @@ -13,10 +13,6 @@ # Philip Langer - Bug 563280 ############################################################################### -CPPLanguageServerPreferencePage_clangd=ClangD - -CPPLanguageServerPreferencePage_cquery=CQuery - CPPLanguageServerPreferencePage_description=Preferences for the C/C++ Language Server\n\n CPPLanguageServerPreferencePage_server_options=Command-line options for the server CPPLanguageServerPreferencePage_server_path=Path to the server executable diff --git a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/preferences/CPPLanguageServerPreferencePage.java b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/preferences/CPPLanguageServerPreferencePage.java index 7cdc3522248..c89d6282813 100644 --- a/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/preferences/CPPLanguageServerPreferencePage.java +++ b/lsp/org.eclipse.cdt.lsp.ui/src/org/eclipse/cdt/lsp/internal/ui/preferences/CPPLanguageServerPreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018-2020 Manish Khurana, Nathan Ridge and others. + * Copyright (c) 2018, 2020 Manish Khurana, Nathan Ridge and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -17,14 +17,18 @@ package org.eclipse.cdt.lsp.internal.ui.preferences; import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; -import org.eclipse.cdt.internal.clangd.ClangdLanguageServer; -import org.eclipse.cdt.internal.cquery.CqueryLanguageServer; +import org.eclipse.cdt.lsp.LanguageServerConfiguration; +import org.eclipse.cdt.lsp.SupportedLanguageServers; import org.eclipse.cdt.lsp.core.CPPStreamConnectionProvider; import org.eclipse.cdt.lsp.core.PreferenceConstants; import org.eclipse.cdt.lsp.internal.ui.LspUiActivator; import org.eclipse.cdt.lsp.internal.ui.LspUiMessages; import org.eclipse.cdt.ui.newui.MultiLineTextFieldEditor; +import org.eclipse.core.runtime.ServiceCaller; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.FileFieldEditor; @@ -52,10 +56,7 @@ public class CPPLanguageServerPreferencePage extends FieldEditorPreferencePage i @Override public void createFieldEditors() { serverChoice = new RadioGroupFieldEditor(PreferenceConstants.P_SERVER_CHOICE, - LspUiMessages.CPPLanguageServerPreferencePage_server_selector, 1, - new String[][] { - { LspUiMessages.CPPLanguageServerPreferencePage_clangd, ClangdLanguageServer.CLANGD_ID }, - { LspUiMessages.CPPLanguageServerPreferencePage_cquery, CqueryLanguageServer.CQUERY_ID } }, + LspUiMessages.CPPLanguageServerPreferencePage_server_selector, 1, contributedServers(), getFieldEditorParent()); addField(serverChoice); @@ -82,4 +83,12 @@ public class CPPLanguageServerPreferencePage extends FieldEditorPreferencePage i @Override public void init(IWorkbench workbench) { } + + private String[][] contributedServers() { + List servers = new ArrayList<>(); + ServiceCaller.callOnce(getClass(), SupportedLanguageServers.class, x -> servers.addAll(x.all())); + return servers.stream()// + .map(x -> new String[] { x.label(), x.identifier() })// + .collect(Collectors.toList()).toArray(new String[0][]); + } } \ No newline at end of file