This is an automated email from the ASF dual-hosted git repository.

jlahoda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 7970e3e  Some more fixes for the Language Server Protocol client:
7970e3e is described below

commit 7970e3eea62f3bd0ea81459a023c576fd84b6ce4
Author: Jan Lahoda <lah...@gmail.com>
AuthorDate: Fri Feb 1 07:38:21 2019 +0100

    Some more fixes for the Language Server Protocol client:
    
    -following TextDocumentSyncKind requestes
    -sending client configuration also when connecting to a server manually
    -prevent NPE when closing IDE when a server is configured manually
---
 .../netbeans/modules/lsp/client/LSPBindings.java   | 24 ++++++------
 .../TextDocumentSyncServerCapabilityHandler.java   | 43 +++++++++++++++++++---
 2 files changed, 50 insertions(+), 17 deletions(-)

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 f68c1db..110eefb 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
@@ -109,12 +109,7 @@ public class LSPBindings {
                                                        
Launcher<LanguageServer> launcher = LSPLauncher.createClientLauncher(lci, in, 
out);
                                                        
launcher.startListening();
                                                        LanguageServer server = 
launcher.getRemoteProxy();
-                                                       InitializeParams 
initParams = new InitializeParams();
-                                                       
initParams.setRootUri(Utils.toURI(prj.getProjectDirectory())); //XXX: what if a 
different root is expected????
-                                                       
initParams.setRootPath(FileUtil.toFile(prj.getProjectDirectory()).getAbsolutePath());
 //some servers still expect root path
-                                                       
initParams.setProcessId(0);
-                                                       
initParams.setCapabilities(new ClientCapabilities(new 
WorkspaceClientCapabilities(), new TextDocumentClientCapabilities(), null));
-                                                       InitializeResult result 
= server.initialize(initParams).get();
+                                                       InitializeResult result 
= initServer(server, prj.getProjectDirectory()); //XXX: what if a different 
root is expected????
                                                        LSPBindings b = new 
LSPBindings(server, result, 
LanguageServerProviderAccessor.getINSTANCE().getProcess(desc));
                                                        lci.setBindings(b);
                                                        return b;
@@ -152,11 +147,7 @@ public class LSPBindings {
                 });
                 launcher.startListening();
                 LanguageServer server = launcher.getRemoteProxy();
-
-                InitializeParams initParams = new InitializeParams();
-                initParams.setRootUri(Utils.toURI(root));
-                initParams.setProcessId(0);
-                InitializeResult result = server.initialize(initParams).get();
+                InitializeResult result = initServer(server, root);
                 LSPBindings bindings = new LSPBindings(server, result, null);
 
                 lc.setBindings(bindings);
@@ -168,6 +159,15 @@ public class LSPBindings {
         }, Bundle.LBL_Connecting());
     }
 
+    private static InitializeResult initServer(LanguageServer server, 
FileObject root) throws InterruptedException, ExecutionException {
+       InitializeParams initParams = new InitializeParams();
+       initParams.setRootUri(Utils.toURI(root));
+       initParams.setRootPath(FileUtil.toFile(root).getAbsolutePath()); //some 
servers still expect root path
+       initParams.setProcessId(0);
+       initParams.setCapabilities(new ClientCapabilities(new 
WorkspaceClientCapabilities(), new TextDocumentClientCapabilities(), null));
+       return server.initialize(initParams).get();
+    }
+
     private final LanguageServer server;
     private final InitializeResult initResult;
     private final Process process;
@@ -246,7 +246,7 @@ public class LSPBindings {
             }
             for (Map<String, LSPBindings> mime2Bindings : 
workspace2Extension2Server.values()) {
                 for (LSPBindings b : mime2Bindings.values()) {
-                    if (b != null) {
+                    if (b != null && b.process != null) {
                         b.process.destroy();
                     }
                 }
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 9ac2f60..79c88af 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
@@ -34,7 +34,10 @@ import org.eclipse.lsp4j.Position;
 import org.eclipse.lsp4j.Range;
 import org.eclipse.lsp4j.TextDocumentContentChangeEvent;
 import org.eclipse.lsp4j.TextDocumentItem;
+import org.eclipse.lsp4j.TextDocumentSyncKind;
+import org.eclipse.lsp4j.TextDocumentSyncOptions;
 import org.eclipse.lsp4j.VersionedTextDocumentIdentifier;
+import org.eclipse.lsp4j.jsonrpc.messages.Either;
 import org.netbeans.api.editor.EditorRegistry;
 import org.netbeans.editor.BaseDocumentEvent;
 import org.netbeans.modules.editor.*;
@@ -133,14 +136,11 @@ public class TextDocumentSyncServerCapabilityHandler {
                         }
                         Position endPos = new Position(startPos.getLine() + 
additionalLines,
                                                        startPos.getCharacter() 
+ additionalChars);
-                        TextDocumentContentChangeEvent event;
-                        event = new TextDocumentContentChangeEvent(new 
Range(startPos,
+                        TextDocumentContentChangeEvent[] event = new 
TextDocumentContentChangeEvent[1];
+                        event[0] = new TextDocumentContentChangeEvent(new 
Range(startPos,
                                                                              
endPos),
                                                                    
oldText.length(),
                                                                    newText);
-                        VersionedTextDocumentIdentifier di = new 
VersionedTextDocumentIdentifier(++version);
-                        
di.setUri(org.netbeans.modules.lsp.client.Utils.toURI(file));
-                        DidChangeTextDocumentParams params = new 
DidChangeTextDocumentParams(di, Arrays.asList(event));
 
                         WORKER.post(() -> {
                             LSPBindings server = LSPBindings.getBindings(file);
@@ -148,6 +148,39 @@ public class TextDocumentSyncServerCapabilityHandler {
                             if (server == null)
                                 return ; //ignore
 
+                            TextDocumentSyncKind syncKind = 
TextDocumentSyncKind.None;
+                            Either<TextDocumentSyncKind, 
TextDocumentSyncOptions> sync = 
server.getInitResult().getCapabilities().getTextDocumentSync();
+                            if (sync != null) {
+                                if (sync.isLeft()) {
+                                    syncKind = sync.getLeft();
+                                } else {
+                                    TextDocumentSyncKind change = 
sync.getRight().getChange();
+                                    if (change != null)
+                                        syncKind = change;
+                                }
+                            }
+                            switch (syncKind) {
+                                case None:
+                                    return ;
+                                case Full:
+                                    doc.render(() -> {
+                                        try {
+                                            event[0] = new 
TextDocumentContentChangeEvent(doc.getText(0, doc.getLength()));
+                                        } catch (BadLocationException ex) {
+                                            Exceptions.printStackTrace(ex);
+                                            event[0] = new 
TextDocumentContentChangeEvent("");
+                                        }
+                                    });
+                                    break;
+                                case Incremental:
+                                    //event already filled
+                                    break;
+                            }
+
+                            VersionedTextDocumentIdentifier di = new 
VersionedTextDocumentIdentifier(++version);
+                            
di.setUri(org.netbeans.modules.lsp.client.Utils.toURI(file));
+                            DidChangeTextDocumentParams params = new 
DidChangeTextDocumentParams(di, Arrays.asList(event));
+
                             server.getTextDocumentService().didChange(params);
                             server.scheduleBackgroundTasks(file);
                         });


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to