1919import org .eclipse .jdt .annotation .Nullable ;
2020import org .eclipse .jface .action .Action ;
2121import org .eclipse .jface .dialogs .IDialogConstants ;
22+ import org .eclipse .jface .dialogs .MessageDialog ;
2223import org .eclipse .jface .layout .GridDataFactory ;
24+ import org .eclipse .jface .preference .IPreferenceStore ;
2325import org .eclipse .jface .preference .PreferencePage ;
2426import org .eclipse .jface .viewers .ArrayContentProvider ;
2527import org .eclipse .jface .viewers .CheckboxTableViewer ;
3335import org .eclipse .jface .viewers .ViewerComparator ;
3436import org .eclipse .lsp4e .ContentTypeToLSPLaunchConfigEntry ;
3537import org .eclipse .lsp4e .ContentTypeToLanguageServerDefinition ;
38+ import org .eclipse .lsp4e .LanguageServerPlugin ;
39+ import org .eclipse .lsp4e .LanguageServerWrapper ;
3640import org .eclipse .lsp4e .LanguageServersRegistry ;
3741import org .eclipse .lsp4e .enablement .EnablementTester ;
3842import 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
0 commit comments