diff --git a/org.eclipse.lsp4e/plugin.xml b/org.eclipse.lsp4e/plugin.xml
index fc7d6aeee..71046548d 100644
--- a/org.eclipse.lsp4e/plugin.xml
+++ b/org.eclipse.lsp4e/plugin.xml
@@ -145,9 +145,7 @@
-
-
+
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
index 9a1a06113..7ee34174a 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
@@ -95,6 +95,7 @@
import org.eclipse.lsp4e.refactoring.CreateFileChange;
import org.eclipse.lsp4e.refactoring.DeleteExternalFile;
import org.eclipse.lsp4e.refactoring.LSPTextChange;
+import org.eclipse.lsp4e.ui.LanguageServerPreferencePage;
import org.eclipse.lsp4e.ui.Messages;
import org.eclipse.lsp4e.ui.UI;
import org.eclipse.lsp4j.CallHierarchyPrepareParams;
@@ -1642,6 +1643,6 @@ public static boolean isReadOnly(final IResource resource) {
private static boolean isNonBufferedFileHandlingEnabled() {
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
- return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
+ return store.getBoolean(LanguageServerPreferencePage.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
}
}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java
index 9cb545995..0696e95cd 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java
@@ -87,6 +87,7 @@
import org.eclipse.lsp4e.internal.SupportedFeatures;
import org.eclipse.lsp4e.internal.files.FileSystemWatcherManager;
import org.eclipse.lsp4e.server.StreamConnectionProvider;
+import org.eclipse.lsp4e.ui.LanguageServerPreferencePage;
import org.eclipse.lsp4e.ui.Messages;
import org.eclipse.lsp4j.ClientCapabilities;
import org.eclipse.lsp4j.ClientInfo;
@@ -1794,6 +1795,6 @@ private void handlePreChangeEvent(IResourceChangeEvent event) {
private boolean isNonBufferedFileListenerEnabled() {
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
- return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
+ return store.getBoolean(LanguageServerPreferencePage.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
}
}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java
index ea2ed2460..9a2eeecbb 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java
@@ -16,10 +16,13 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -33,6 +36,7 @@
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.lsp4e.ContentTypeToLSPLaunchConfigEntry;
import org.eclipse.lsp4e.ContentTypeToLanguageServerDefinition;
+import org.eclipse.lsp4e.LanguageServerPlugin;
import org.eclipse.lsp4e.LanguageServersRegistry;
import org.eclipse.lsp4e.enablement.EnablementTester;
import org.eclipse.swt.SWT;
@@ -56,11 +60,23 @@ public class LanguageServerPreferencePage extends PreferencePage implements IWor
private final LanguageServersRegistry registry = LanguageServersRegistry.getInstance();
private List workingCopy = lateNonNull();
private Button removeButton = lateNonNull();
+ private Button resourceFallbackCheckbox = lateNonNull();
private CheckboxTableViewer checkboxViewer = lateNonNull();
private TableViewer viewer = lateNonNull();
private final SelectionAdapter contentTypeLinkListener;
private final List changedDefinitions = new ArrayList<>();
+ public static final String LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY = "org.eclipse.lsp4e.resourceFallback.enabled"; //$NON-NLS-1$
+ public static final boolean LSP4E_RESOURCE_FALLBACK_DEFAULT = true;
+
+ public static final class PreferenceInitializer extends AbstractPreferenceInitializer {
+ @Override
+ public void initializeDefaultPreferences() {
+ final var store = LanguageServerPlugin.getDefault().getPreferenceStore();
+ store.setDefault(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY, LSP4E_RESOURCE_FALLBACK_DEFAULT);
+ }
+ }
+
public LanguageServerPreferencePage() {
contentTypeLinkListener = new SelectionAdapter() {
@Override
@@ -174,6 +190,15 @@ public void widgetSelected(SelectionEvent e) {
viewer.addSelectionChangedListener(event -> updateButtons());
viewer.setInput(workingCopy);
updateButtons();
+
+ // non-buffered file handling for Xtext like editors.
+ resourceFallbackCheckbox = new Button(res, SWT.CHECK);
+ GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).applyTo(resourceFallbackCheckbox);
+ resourceFallbackCheckbox.setText(Messages.non_buffered_file_support);
+ IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
+ boolean enabled = store.getBoolean(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
+ resourceFallbackCheckbox.setSelection(enabled);
+
return res;
}
@@ -296,6 +321,17 @@ public boolean performOk() {
this.registry.setAssociations(this.workingCopy);
final var enableDisableLSJob = new EnableDisableLSJob(changedDefinitions, getEditors());
enableDisableLSJob.schedule();
+
+ IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
+ boolean oldValue = store.getBoolean(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
+ boolean newValue = resourceFallbackCheckbox.getSelection();
+ store.setValue(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY, newValue);
+ if (oldValue != newValue) {
+ var shell = getShell();
+ String title = Messages.PreferencesPage_nonBufferedFileSupportRestartTitle;
+ String msg = Messages.PreferencesPage_nonBufferedFileSupportWarningMessage;
+ MessageDialog.openWarning(shell, title, msg);
+ }
return super.performOk();
}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
index 8c300685d..fa527d17e 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
@@ -106,6 +106,9 @@ public final class Messages extends NLS {
public static String TH_diplay_hint;
public static String TH_cannot_find_file;
public static String occurrences;
+ public static String non_buffered_file_support;
+ public static String PreferencesPage_nonBufferedFileSupportRestartTitle;
+ public static String PreferencesPage_nonBufferedFileSupportWarningMessage;
static {
NLS.initializeMessages("org.eclipse.lsp4e.ui.messages", Messages.class); //$NON-NLS-1$
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
index 96a22c16c..bf344b360 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
@@ -44,6 +44,9 @@ PreferencesPage_restartWarning_restart=Restart Now
PreferencesPage_enableOnTypeFormatting=Enable on type formatting
NewContentTypeLSPLaunchDialog_associateContentType=Associate content-type...
NewContentTypeLSPLaunchDialog_withLSPLaunch=...with Language Server Launch Configuration
+non_buffered_file_support=Enable non-buffered file handling (support for Xtext-like editors)
+PreferencesPage_nonBufferedFileSupportRestartTitle=Non-buffered File Support Restart Required
+PreferencesPage_nonBufferedFileSupportWarningMessage=Change in non-buffered file support may require a restart of all opened editors to take effect.
codeActions_description=Code Actions from language server.
codeActions_label=Code Actions