1616import java .util .ArrayList ;
1717import java .util .List ;
1818
19+ import org .eclipse .core .runtime .preferences .AbstractPreferenceInitializer ;
1920import org .eclipse .jdt .annotation .Nullable ;
2021import org .eclipse .jface .action .Action ;
2122import org .eclipse .jface .dialogs .IDialogConstants ;
23+ import org .eclipse .jface .dialogs .MessageDialog ;
2224import org .eclipse .jface .layout .GridDataFactory ;
25+ import org .eclipse .jface .preference .IPreferenceStore ;
2326import org .eclipse .jface .preference .PreferencePage ;
2427import org .eclipse .jface .viewers .ArrayContentProvider ;
2528import org .eclipse .jface .viewers .CheckboxTableViewer ;
3336import org .eclipse .jface .viewers .ViewerComparator ;
3437import org .eclipse .lsp4e .ContentTypeToLSPLaunchConfigEntry ;
3538import org .eclipse .lsp4e .ContentTypeToLanguageServerDefinition ;
39+ import org .eclipse .lsp4e .LanguageServerPlugin ;
3640import org .eclipse .lsp4e .LanguageServersRegistry ;
3741import org .eclipse .lsp4e .enablement .EnablementTester ;
3842import 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
0 commit comments