diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java index 9a1a06113..71acc83de 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java @@ -1642,6 +1642,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(LanguageServerWrapper.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..cf8220820 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServerWrapper.java @@ -1663,6 +1663,8 @@ private static String getThrowableMessage(Throwable throwable) { // Preference key: org.eclipse.lsp4e.resourceFallback.enabled (boolean). Default: false private final boolean resourceFallbackEnabled; + public static final String LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY = "org.eclipse.lsp4e.resourceFallback.enabled"; //$NON-NLS-1$ + /** * Listener that translates workspace resource changes into LSP file-level * events for files that are not backed by file buffers(Ex. Xtext Documents) and @@ -1794,6 +1796,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(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..bd2b165f7 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/LanguageServerPreferencePage.java @@ -19,7 +19,9 @@ 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 +35,8 @@ 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.LanguageServerWrapper; import org.eclipse.lsp4e.LanguageServersRegistry; import org.eclipse.lsp4e.enablement.EnablementTester; import org.eclipse.swt.SWT; @@ -56,6 +60,7 @@ 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; @@ -174,6 +179,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(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY); + resourceFallbackCheckbox.setSelection(enabled); + return res; } @@ -296,6 +310,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(LanguageServerWrapper.LSP4E_RESOURCE_FALLBACK_ENABLED_PREF_KEY); + boolean newValue = resourceFallbackCheckbox.getSelection(); + store.setValue(LanguageServerWrapper.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