Skip to content

Commit f4d9c7d

Browse files
committed
Add preference option for non-buffered file handling in Xtext editors.
see #1500
1 parent 2380ada commit f4d9c7d

6 files changed

Lines changed: 47 additions & 2 deletions

File tree

org.eclipse.lsp4e/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
<initializer
146146
class="org.eclipse.lsp4e.operations.linkedediting.LSPLinkedEditingBase$PreferenceInitializer">
147147
</initializer>
148+
<initializer class="org.eclipse.lsp4e.ui.LanguageServerPreferencePage$PreferenceInitializer"/>
148149
</extension>
149150

150151
<extension point="org.eclipse.ui.genericeditor.foldingReconcilers">

org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import org.eclipse.lsp4e.refactoring.CreateFileChange;
9696
import org.eclipse.lsp4e.refactoring.DeleteExternalFile;
9797
import org.eclipse.lsp4e.refactoring.LSPTextChange;
98+
import org.eclipse.lsp4e.ui.LanguageServerPreferencePage;
9899
import org.eclipse.lsp4e.ui.Messages;
99100
import org.eclipse.lsp4e.ui.UI;
100101
import org.eclipse.lsp4j.CallHierarchyPrepareParams;
@@ -1642,6 +1643,6 @@ public static boolean isReadOnly(final IResource resource) {
16421643

16431644
private static boolean isNonBufferedFileHandlingEnabled() {
16441645
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
1645-
return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
1646+
return store.getBoolean(LanguageServerPreferencePage.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
16461647
}
16471648
}

org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
import org.eclipse.lsp4e.internal.SupportedFeatures;
8888
import org.eclipse.lsp4e.internal.files.FileSystemWatcherManager;
8989
import org.eclipse.lsp4e.server.StreamConnectionProvider;
90+
import org.eclipse.lsp4e.ui.LanguageServerPreferencePage;
9091
import org.eclipse.lsp4e.ui.Messages;
9192
import org.eclipse.lsp4j.ClientCapabilities;
9293
import org.eclipse.lsp4j.ClientInfo;
@@ -1794,6 +1795,6 @@ private void handlePreChangeEvent(IResourceChangeEvent event) {
17941795

17951796
private boolean isNonBufferedFileListenerEnabled() {
17961797
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
1797-
return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
1798+
return store.getBoolean(LanguageServerPreferencePage.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
17981799
}
17991800
}

org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
import java.util.ArrayList;
1717
import java.util.List;
1818

19+
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
1920
import org.eclipse.jdt.annotation.Nullable;
2021
import org.eclipse.jface.action.Action;
2122
import org.eclipse.jface.dialogs.IDialogConstants;
23+
import org.eclipse.jface.dialogs.MessageDialog;
2224
import org.eclipse.jface.layout.GridDataFactory;
25+
import org.eclipse.jface.preference.IPreferenceStore;
2326
import org.eclipse.jface.preference.PreferencePage;
2427
import org.eclipse.jface.viewers.ArrayContentProvider;
2528
import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -33,6 +36,7 @@
3336
import org.eclipse.jface.viewers.ViewerComparator;
3437
import org.eclipse.lsp4e.ContentTypeToLSPLaunchConfigEntry;
3538
import org.eclipse.lsp4e.ContentTypeToLanguageServerDefinition;
39+
import org.eclipse.lsp4e.LanguageServerPlugin;
3640
import org.eclipse.lsp4e.LanguageServersRegistry;
3741
import org.eclipse.lsp4e.enablement.EnablementTester;
3842
import org.eclipse.swt.SWT;
@@ -56,11 +60,23 @@ public class LanguageServerPreferencePage extends PreferencePage implements IWor
5660
private final LanguageServersRegistry registry = LanguageServersRegistry.getInstance();
5761
private List<ContentTypeToLSPLaunchConfigEntry> workingCopy = lateNonNull();
5862
private Button removeButton = lateNonNull();
63+
private Button resourceFallbackCheckbox = lateNonNull();
5964
private CheckboxTableViewer checkboxViewer = lateNonNull();
6065
private TableViewer viewer = lateNonNull();
6166
private final SelectionAdapter contentTypeLinkListener;
6267
private final List<ContentTypeToLanguageServerDefinition> changedDefinitions = new ArrayList<>();
6368

69+
public static final String LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY = "org.eclipse.lsp4e.resourceFallback.enabled"; //$NON-NLS-1$
70+
public static final boolean LSP4E_RESOURCE_FALLBACK_DEFAULT = true;
71+
72+
public static final class PreferenceInitializer extends AbstractPreferenceInitializer {
73+
@Override
74+
public void initializeDefaultPreferences() {
75+
final var store = LanguageServerPlugin.getDefault().getPreferenceStore();
76+
store.setDefault(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY, LSP4E_RESOURCE_FALLBACK_DEFAULT);
77+
}
78+
}
79+
6480
public LanguageServerPreferencePage() {
6581
contentTypeLinkListener = new SelectionAdapter() {
6682
@Override
@@ -174,6 +190,15 @@ public void widgetSelected(SelectionEvent e) {
174190
viewer.addSelectionChangedListener(event -> updateButtons());
175191
viewer.setInput(workingCopy);
176192
updateButtons();
193+
194+
// non-buffered file handling for Xtext like editors.
195+
resourceFallbackCheckbox = new Button(res, SWT.CHECK);
196+
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).applyTo(resourceFallbackCheckbox);
197+
resourceFallbackCheckbox.setText(Messages.non_buffered_file_support);
198+
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
199+
boolean enabled = store.getBoolean(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
200+
resourceFallbackCheckbox.setSelection(enabled);
201+
177202
return res;
178203
}
179204

@@ -296,6 +321,17 @@ public boolean performOk() {
296321
this.registry.setAssociations(this.workingCopy);
297322
final var enableDisableLSJob = new EnableDisableLSJob(changedDefinitions, getEditors());
298323
enableDisableLSJob.schedule();
324+
325+
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
326+
boolean oldValue = store.getBoolean(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
327+
boolean newValue = resourceFallbackCheckbox.getSelection();
328+
store.setValue(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY, newValue);
329+
if (oldValue != newValue) {
330+
var shell = getShell();
331+
String title = Messages.PreferencesPage_nonBufferedFileSupportRestartTitle;
332+
String msg = Messages.PreferencesPage_nonBufferedFileSupportWarningMessage;
333+
MessageDialog.openWarning(shell, title, msg);
334+
}
299335
return super.performOk();
300336
}
301337

org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ public final class Messages extends NLS {
106106
public static String TH_diplay_hint;
107107
public static String TH_cannot_find_file;
108108
public static String occurrences;
109+
public static String non_buffered_file_support;
110+
public static String PreferencesPage_nonBufferedFileSupportRestartTitle;
111+
public static String PreferencesPage_nonBufferedFileSupportWarningMessage;
109112

110113
static {
111114
NLS.initializeMessages("org.eclipse.lsp4e.ui.messages", Messages.class); //$NON-NLS-1$

org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ PreferencesPage_restartWarning_restart=Restart Now
4444
PreferencesPage_enableOnTypeFormatting=Enable on type formatting
4545
NewContentTypeLSPLaunchDialog_associateContentType=Associate content-type...
4646
NewContentTypeLSPLaunchDialog_withLSPLaunch=...with Language Server Launch Configuration
47+
non_buffered_file_support=Enable non-buffered file handling (support for Xtext-like editors)
48+
PreferencesPage_nonBufferedFileSupportRestartTitle=Non-buffered File Support Restart Required
49+
PreferencesPage_nonBufferedFileSupportWarningMessage=Change in non-buffered file support may require a restart of all opened editors to take effect.
4750

4851
codeActions_description=Code Actions from language server.
4952
codeActions_label=Code Actions

0 commit comments

Comments
 (0)