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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists