diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java index b4d2acaac50a..b7be9b7a2fc5 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/LSPBindings.java @@ -220,6 +220,7 @@ public static synchronized LSPBindings getBindingsImpl(Project prj, FileObject f for(String mt: description.mimeTypes) { mimeType2Server.put(mt, description); } + TextDocumentSyncServerCapabilityHandler.refreshOpenedFilesInServers(); WORKER.post(() -> cs.fireChange()); } } @@ -357,7 +358,6 @@ public void close() throws IOException { new LSPReference(b, Utilities.activeReferenceQueue()); lci.setBindings(b); LanguageServerProviderAccessor.getINSTANCE().setBindings(desc, b); - TextDocumentSyncServerCapabilityHandler.refreshOpenedFilesInServers(); return b; } catch (InterruptedException | ExecutionException ex) { LOG.log(Level.WARNING, null, ex); diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspStructureNavigatorPanel.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspStructureNavigatorPanel.java index 35fdbce6a53e..f6c524abd544 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspStructureNavigatorPanel.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspStructureNavigatorPanel.java @@ -18,32 +18,23 @@ */ package org.netbeans.modules.lsp.client.bindings; -import java.awt.BorderLayout; -import java.awt.EventQueue; import java.util.Collection; import java.util.logging.Level; -import java.util.logging.Logger; import javax.swing.Action; -import javax.swing.JComponent; -import javax.swing.JPanel; import javax.swing.text.StyledDocument; import org.netbeans.api.actions.Openable; import org.netbeans.api.editor.mimelookup.MimeLookup; import org.netbeans.api.lsp.StructureElement; import org.netbeans.spi.lsp.StructureProvider; -import org.netbeans.spi.navigator.NavigatorPanel; import org.openide.awt.Actions; import org.openide.cookies.EditorCookie; import org.openide.cookies.LineCookie; -import org.openide.explorer.ExplorerManager; -import org.openide.explorer.view.BeanTreeView; import org.openide.filesystems.FileObject; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.text.Line; import org.openide.text.NbDocument; -import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.RequestProcessor; import org.openide.util.lookup.AbstractLookup; diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/MarkOccurrences.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/MarkOccurrences.java index 8c94a9e58c5d..95cd466d24ca 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/MarkOccurrences.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/MarkOccurrences.java @@ -51,7 +51,6 @@ import org.openide.filesystems.FileObject; import org.openide.loaders.DataObject; import org.openide.util.Exceptions; -import org.openide.util.RequestProcessor; /** * @@ -59,7 +58,6 @@ */ public class MarkOccurrences implements BackgroundTask, CaretListener, PropertyChangeListener { - private static final RequestProcessor WORKER = new RequestProcessor(MarkOccurrences.class.getName(), 1, false, false); private final JTextComponent component; private Document doc; private int caretPos; @@ -139,13 +137,11 @@ public synchronized void caretUpdate(CaretEvent e) { } else { caretPos = -1; } - WORKER.post(() -> { - FileObject file = NbEditorUtilities.getFileObject(doc); + FileObject file = NbEditorUtilities.getFileObject(doc); - if (file != null) { - LSPBindings.rescheduleBackgroundTask(file, this); - } - }); + if (file != null) { + LSPBindings.rescheduleBackgroundTask(file, this); + } } @Override diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java index 2659afddcf67..25f074e162fe 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java @@ -57,7 +57,6 @@ import org.openide.modules.OnStart; import org.openide.text.NbDocument; import org.openide.util.Exceptions; -import org.openide.util.RequestProcessor; /** * @@ -65,7 +64,6 @@ */ public class TextDocumentSyncServerCapabilityHandler { - private final RequestProcessor WORKER = new RequestProcessor(TextDocumentSyncServerCapabilityHandler.class.getName(), 1, false, false); private final Set lastOpened = Collections.newSetFromMap(new IdentityHashMap<>()); private void handleChange() { @@ -97,17 +95,14 @@ private void ensureOpenedInServer(JTextComponent opened) { return; //ignore Document doc = opened.getDocument(); - ensureDidOpenSent(doc); + ensureDidOpenSent(doc, true); registerBackgroundTasks(opened); } public static void refreshOpenedFilesInServers() { - SwingUtilities.invokeLater(() -> { - assert SwingUtilities.isEventDispatchThread(); - for (JTextComponent c : EditorRegistry.componentList()) { - h.ensureOpenedInServer(c); - } - }); + for (JTextComponent c : EditorRegistry.componentList()) { + h.ensureOpenedInServer(c); + } } private static final TextDocumentSyncServerCapabilityHandler h = new TextDocumentSyncServerCapabilityHandler(); @@ -132,7 +127,7 @@ private void documentOpened(Document doc) { openDocument2PanesCount.computeIfAbsent(doc, d -> { doc.putProperty(TextDocumentSyncServerCapabilityHandler.class, true); - ensureDidOpenSent(doc); + ensureDidOpenSent(doc, false); doc.addDocumentListener(new DocumentListener() { //XXX: listener int version; //XXX: proper versioning! @Override @@ -160,12 +155,13 @@ private void fireEvent(int start, String newText, String oldText) { boolean typingModification = DocumentUtilities.isTypingModification(doc); long documentVersion = DocumentUtilities.getDocumentVersion(doc); - WORKER.post(() -> { - LSPBindings server = LSPBindings.getBindings(file); + LSPBindings server = LSPBindings.getBindings(file); - if (server == null) - return ; //ignore + if(server == null) { + return; + } + server.runOnBackground(() -> { TextDocumentSyncKind syncKind = TextDocumentSyncKind.None; Either sync = server.getInitResult().getCapabilities().getTextDocumentSync(); if (sync != null) { @@ -243,23 +239,25 @@ private synchronized void editorOpened(JTextComponent c) { private synchronized void editorClosed(JTextComponent c) { Document doc = c.getDocument(); + Integer count = openDocument2PanesCount.getOrDefault(doc, -1); if (count > 0) { openDocument2PanesCount.put(doc, --count); } if (count == 0) { - //TODO modified! - WORKER.post(() -> { - FileObject file = NbEditorUtilities.getFileObject(doc); + FileObject file = NbEditorUtilities.getFileObject(doc); - if (file == null) - return; //ignore + if (file == null) + return; //ignore - LSPBindings server = LSPBindings.getBindings(file); + //TODO modified! + LSPBindings server = LSPBindings.getBindings(file); - if (server == null) - return ; //ignore + if (server == null) { + return; + } + server.runOnBackground(() -> { TextDocumentIdentifier di = new TextDocumentIdentifier(); di.setUri(Utils.toURI(file)); DidCloseTextDocumentParams params = new DidCloseTextDocumentParams(di); @@ -271,17 +269,19 @@ private synchronized void editorClosed(JTextComponent c) { } } - private void ensureDidOpenSent(Document doc) { - WORKER.post(() -> { - FileObject file = NbEditorUtilities.getFileObject(doc); + @SuppressWarnings("AssignmentToMethodParameter") + private void ensureDidOpenSent(Document doc, boolean sync) { + FileObject file = NbEditorUtilities.getFileObject(doc); - if (file == null) - return; //ignore + if (file == null) + return; //ignore - LSPBindings server = LSPBindings.getBindings(file); + LSPBindings server = LSPBindings.getBindings(file); + + if (server == null) + return ; //ignore - if (server == null) - return ; //ignore + Runnable task = () -> { if (!server.getOpenedFiles().add(file)) { //already opened: @@ -309,22 +309,28 @@ private void ensureDidOpenSent(Document doc) { server.getTextDocumentService().didOpen(new DidOpenTextDocumentParams(textDocumentItem)); LSPBindings.scheduleBackgroundTasks(file); - }); + }; + + if (sync) { + task.run(); + } else { + server.runOnBackground(task); + } } private void registerBackgroundTasks(JTextComponent c) { Document doc = c.getDocument(); - WORKER.post(() -> { - FileObject file = NbEditorUtilities.getFileObject(doc); + FileObject file = NbEditorUtilities.getFileObject(doc); - if (file == null) - return; //ignore + if (file == null) + return; //ignore - LSPBindings server = LSPBindings.getBindings(file); + LSPBindings server = LSPBindings.getBindings(file); - if (server == null) - return ; //ignore + if (server == null) + return ; //ignore + server.runOnBackground(() -> { SwingUtilities.invokeLater(() -> { if (c.getClientProperty(MarkOccurrences.class) == null) { MarkOccurrences mo = new MarkOccurrences(c);