Skip to content

Commit c7e9636

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

5 files changed

Lines changed: 35 additions & 2 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1642,6 +1642,6 @@ public static boolean isReadOnly(final IResource resource) {
16421642

16431643
private static boolean isNonBufferedFileHandlingEnabled() {
16441644
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
1645-
return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
1645+
return store.getBoolean(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
16461646
}
16471647
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,8 @@ private static String getThrowableMessage(Throwable throwable) {
16631663
// Preference key: org.eclipse.lsp4e.resourceFallback.enabled (boolean). Default: false
16641664
private final boolean resourceFallbackEnabled;
16651665

1666+
public static final String LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY = "org.eclipse.lsp4e.resourceFallback.enabled"; //$NON-NLS-1$
1667+
16661668
/**
16671669
* Listener that translates workspace resource changes into LSP file-level
16681670
* events for files that are not backed by file buffers(Ex. Xtext Documents) and
@@ -1794,6 +1796,6 @@ private void handlePreChangeEvent(IResourceChangeEvent event) {
17941796

17951797
private boolean isNonBufferedFileListenerEnabled() {
17961798
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
1797-
return store.getBoolean("org.eclipse.lsp4e.resourceFallback.enabled"); //$NON-NLS-1$
1799+
return store.getBoolean(LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
17981800
}
17991801
}

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import org.eclipse.jdt.annotation.Nullable;
2020
import org.eclipse.jface.action.Action;
2121
import org.eclipse.jface.dialogs.IDialogConstants;
22+
import org.eclipse.jface.dialogs.MessageDialog;
2223
import org.eclipse.jface.layout.GridDataFactory;
24+
import org.eclipse.jface.preference.IPreferenceStore;
2325
import org.eclipse.jface.preference.PreferencePage;
2426
import org.eclipse.jface.viewers.ArrayContentProvider;
2527
import org.eclipse.jface.viewers.CheckboxTableViewer;
@@ -33,6 +35,8 @@
3335
import org.eclipse.jface.viewers.ViewerComparator;
3436
import org.eclipse.lsp4e.ContentTypeToLSPLaunchConfigEntry;
3537
import org.eclipse.lsp4e.ContentTypeToLanguageServerDefinition;
38+
import org.eclipse.lsp4e.LanguageServerPlugin;
39+
import org.eclipse.lsp4e.LanguageServerWrapper;
3640
import org.eclipse.lsp4e.LanguageServersRegistry;
3741
import org.eclipse.lsp4e.enablement.EnablementTester;
3842
import org.eclipse.swt.SWT;
@@ -56,6 +60,7 @@ 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;
@@ -174,6 +179,15 @@ public void widgetSelected(SelectionEvent e) {
174179
viewer.addSelectionChangedListener(event -> updateButtons());
175180
viewer.setInput(workingCopy);
176181
updateButtons();
182+
183+
// non-buffered file handling for Xtext like editors.
184+
resourceFallbackCheckbox = new Button(res, SWT.CHECK);
185+
GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).span(2, 1).applyTo(resourceFallbackCheckbox);
186+
resourceFallbackCheckbox.setText(Messages.non_buffered_file_support);
187+
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
188+
boolean enabled = store.getBoolean(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
189+
resourceFallbackCheckbox.setSelection(enabled);
190+
177191
return res;
178192
}
179193

@@ -296,6 +310,17 @@ public boolean performOk() {
296310
this.registry.setAssociations(this.workingCopy);
297311
final var enableDisableLSJob = new EnableDisableLSJob(changedDefinitions, getEditors());
298312
enableDisableLSJob.schedule();
313+
314+
IPreferenceStore store = LanguageServerPlugin.getDefault().getPreferenceStore();
315+
boolean oldValue = store.getBoolean(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY);
316+
boolean newValue = resourceFallbackCheckbox.getSelection();
317+
store.setValue(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY, newValue);
318+
if (oldValue != newValue) {
319+
var shell = getShell();
320+
String title = Messages.PreferencesPage_nonBufferedFileSupportRestartTitle;
321+
String msg = Messages.PreferencesPage_nonBufferedFileSupportWarningMessage;
322+
MessageDialog.openWarning(shell, title, msg);
323+
}
299324
return super.performOk();
300325
}
301326

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)