diff --git a/bundles/org.eclipse.cdt.lsp.clangd/META-INF/MANIFEST.MF b/bundles/org.eclipse.cdt.lsp.clangd/META-INF/MANIFEST.MF
index e93dcaeb..04dc92f4 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.cdt.lsp.clangd/META-INF/MANIFEST.MF
@@ -34,5 +34,4 @@ Bundle-Activator: org.eclipse.cdt.lsp.internal.clangd.editor.ClangdPlugin
Service-Component: OSGI-INF/org.eclipse.cdt.lsp.clangd.BuiltinClangdOptionsDefaults.xml,
OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml,
OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdFallbackManager.xml,
- OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdMetadataDefaults.xml,
- OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.editor.DefaultClangdConfigurationVisibility.xml
+ OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdMetadataDefaults.xml
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/l10n/bundle.properties
index ad5eb63e..678f0106 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/l10n/bundle.properties
+++ b/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/l10n/bundle.properties
@@ -25,3 +25,4 @@ SPDX-License-Identifier: EPL-2.0\n\
Commands.ToggleSourceAndHeader.name=Toggle Source/Header
PopupMenu.ToggleSourceAndHeader.label=Toggle Source/Header
+ClangdConfigurationPage.name=clangd
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml b/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml
index 26aa0b27..82ffd03b 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml
+++ b/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml
@@ -3,7 +3,6 @@
-
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.editor.DefaultClangdConfigurationVisibility.xml b/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.editor.DefaultClangdConfigurationVisibility.xml
deleted file mode 100644
index 1cd72145..00000000
--- a/bundles/org.eclipse.cdt.lsp.clangd/OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.editor.DefaultClangdConfigurationVisibility.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/plugin.xml b/bundles/org.eclipse.cdt.lsp.clangd/plugin.xml
index d5e57c65..85e8603c 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/plugin.xml
+++ b/bundles/org.eclipse.cdt.lsp.clangd/plugin.xml
@@ -22,20 +22,19 @@
+ id="org.eclipse.cdt.lsp.clangd.editor.preferencePage"
+ name="%ClangdConfigurationPage.name">
-
+ id="org.eclipse.cdt.lsp.clangd.editor.propertyPage"
+ name="%ClangdConfigurationPage.name">
@@ -49,8 +48,6 @@
-
-
null.
- *
- * @return the metadata for the "Prefer clangd" option
- *
- * @see ClangdOptions#preferClangd()
- */
- PreferenceMetadata preferClangd();
-
/**
* Returns the metadata for the "Clangd path" option, must not return null
.
*
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/clangd/ClangdOptions.java b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/clangd/ClangdOptions.java
index fbf63464..d8d452f5 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/clangd/ClangdOptions.java
+++ b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/clangd/ClangdOptions.java
@@ -21,13 +21,6 @@
*/
public interface ClangdOptions {
- /**
- * Prefer to use clangd language server and related editor implementation
- *
- * @return if clangd language server should be preferred
- */
- boolean preferClangd();
-
/**
* Path to clangd executable to be launched, must not return null
*
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdConfigurationAccess.java b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdConfigurationAccess.java
index 52eb83d9..3fd44255 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdConfigurationAccess.java
+++ b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdConfigurationAccess.java
@@ -18,14 +18,13 @@
import java.util.Optional;
import org.eclipse.cdt.lsp.clangd.ClangdConfiguration;
-import org.eclipse.cdt.lsp.clangd.ClangdEnable;
import org.eclipse.cdt.lsp.clangd.ClangdMetadata;
import org.eclipse.cdt.lsp.clangd.ClangdOptions;
import org.eclipse.cdt.lsp.clangd.ClangdQualifier;
+import org.eclipse.cdt.lsp.editor.ConfigurationAccess;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.preferences.DefaultScope;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IPreferenceMetadataStore;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.core.runtime.preferences.InstanceScope;
@@ -33,11 +32,9 @@
import org.eclipse.osgi.util.NLS;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
@Component
-public final class ClangdConfigurationAccess implements ClangdConfiguration {
- private final String qualifier;
+public final class ClangdConfigurationAccess extends ConfigurationAccess implements ClangdConfiguration {
@Reference
private ClangdMetadata metadata;
@@ -45,11 +42,8 @@ public final class ClangdConfigurationAccess implements ClangdConfiguration {
@Reference
private IWorkspace workspace;
- @Reference(cardinality = ReferenceCardinality.OPTIONAL)
- private ClangdEnable enable;
-
public ClangdConfigurationAccess() {
- this.qualifier = new ClangdQualifier().get();
+ super(new ClangdQualifier().get());
}
@Override
@@ -59,26 +53,26 @@ public ClangdMetadata metadata() {
@Override
public ClangdOptions defaults() {
- return new ClangdPreferredOptions(qualifier, new IScopeContext[] { DefaultScope.INSTANCE }, metadata, enable);
+ return new ClangdPreferredOptions(qualifier, new IScopeContext[] { DefaultScope.INSTANCE }, metadata);
}
@Override
public ClangdOptions options(Object context) {
- Optional project = projectScope(context);
+ Optional project = projectScope(workspace, context);
IScopeContext[] scopes;
if (project.isPresent()) {
scopes = new IScopeContext[] { project.get(), InstanceScope.INSTANCE, DefaultScope.INSTANCE };
} else {
scopes = new IScopeContext[] { InstanceScope.INSTANCE, DefaultScope.INSTANCE };
}
- return new ClangdPreferredOptions(qualifier, scopes, metadata, enable);
+ return new ClangdPreferredOptions(qualifier, scopes, metadata);
}
@Override
public IPreferenceMetadataStore storage(Object context) {
return new OsgiPreferenceMetadataStore(//
preferences(//
- projectScope(context)//
+ projectScope(workspace, context)//
.map(IScopeContext.class::cast)//
.orElse(InstanceScope.INSTANCE)));
}
@@ -113,17 +107,4 @@ public List commands(Object context) {
return list;
}
- private Optional projectScope(Object context) {
- return new ResolveProjectScope(workspace).apply(context);
- }
-
- private IEclipsePreferences preferences(IScopeContext scope) {
- return Optional.ofNullable(scope.getNode(qualifier))//
- .filter(IEclipsePreferences.class::isInstance)//
- .map(IEclipsePreferences.class::cast)//
- .orElseThrow(() -> new IllegalStateException(//
- NLS.bind("Unable to get preferences for node: {0}", //
- qualifier)));
- }
-
}
diff --git a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdLanguageServerProvider.java b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdLanguageServerProvider.java
index c725cb8d..6050f6b0 100644
--- a/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdLanguageServerProvider.java
+++ b/bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdLanguageServerProvider.java
@@ -21,8 +21,9 @@
import java.util.Objects;
import org.eclipse.cdt.lsp.clangd.ClangdConfiguration;
-import org.eclipse.cdt.lsp.clangd.ClangdEnable;
import org.eclipse.cdt.lsp.clangd.ClangdFallbackFlags;
+import org.eclipse.cdt.lsp.editor.EditorConfiguration;
+import org.eclipse.cdt.lsp.editor.LanguageServerEnable;
import org.eclipse.cdt.lsp.server.ICLanguageServerProvider;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.ServiceCaller;
@@ -32,6 +33,9 @@ public final class ClangdLanguageServerProvider implements ICLanguageServerProvi
private final ServiceCaller configuration = new ServiceCaller<>(getClass(),
ClangdConfiguration.class);
+ private final ServiceCaller editorConfiguration = new ServiceCaller<>(getClass(),
+ EditorConfiguration.class);
+
@Override
public Object getInitializationOptions(URI rootUri) {
List