You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2020/02/26 18:24:56 UTC

[netbeans] branch master updated: Ensuring that 'newText' in TextEdit is non-null.

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6c69cc4  Ensuring that 'newText' in TextEdit is non-null.
6c69cc4 is described below

commit 6c69cc4566a5b269eb4692a548fe16d839f159f8
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Sun Feb 2 06:57:39 2020 +0100

    Ensuring that 'newText' in TextEdit is non-null.
---
 .../lsp/server/text/TextDocumentServiceImpl.java   |  3 +-
 .../modules/java/lsp/server/ServerTest.java        | 64 +++++++++++++++++++++-
 2 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/text/TextDocumentServiceImpl.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/text/TextDocumentServiceImpl.java
index be851be..583fd2e 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/text/TextDocumentServiceImpl.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/text/TextDocumentServiceImpl.java
@@ -716,9 +716,10 @@ public class TextDocumentServiceImpl implements TextDocumentService, LanguageCli
                         List<? extends ModificationResult.Difference> diffs = changes.getDifferences(changes.getModifiedFileObjects().iterator().next());
                         List<TextEdit> edits = new ArrayList<>();
                         for (ModificationResult.Difference diff : diffs) {
+                            String newText = diff.getNewText();
                             edits.add(new TextEdit(new Range(createPosition(lm[0], diff.getStartPosition().getOffset()),
                                                              createPosition(lm[0], diff.getEndPosition().getOffset())),
-                                                   diff.getNewText()));
+                                                   newText != null ? newText : ""));
                         }
                         TextDocumentEdit te = new TextDocumentEdit(new VersionedTextDocumentIdentifier(params.getTextDocument().getUri(),
                                                                                                        -1),
diff --git a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/ServerTest.java b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/ServerTest.java
index ddcd8bb..d785465 100644
--- a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/ServerTest.java
+++ b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/ServerTest.java
@@ -105,7 +105,7 @@ public class ServerTest extends NbTestCase {
     protected void setUp() throws Exception {
         super.setUp();
         clearWorkDir();
-        ServerSocket srv = new ServerSocket(0);
+        ServerSocket srv = new ServerSocket(0, 1, InetAddress.getLoopbackAddress());
         serverThread = new Thread(() -> {
             try {
                 Socket server = srv.accept();
@@ -133,7 +133,7 @@ public class ServerTest extends NbTestCase {
             }
         });
         serverThread.start();
-        client = new Socket(InetAddress.getLocalHost(), srv.getLocalPort());
+        client = new Socket(srv.getInetAddress(), srv.getLocalPort());
     }
 
     @Override
@@ -241,6 +241,66 @@ public class ServerTest extends NbTestCase {
         assertDiags(diags, "Error:1:0-1:9", "Warning:0:148-0:153", "Warning:0:152-0:153");//hints
     }
 
+    public void testCodeActionWithRemoval() throws Exception {
+        File src = new File(getWorkDir(), "Test.java");
+        src.getParentFile().mkdirs();
+        String code = "public class Test { private String c(String s) {\nreturn s.toString();\n} }";
+        try (Writer w = new FileWriter(src)) {
+            w.write(code);
+        }
+        List<Diagnostic>[] diags = new List[1];
+        Launcher<LanguageServer> serverLauncher = LSPLauncher.createClientLauncher(new LanguageClient() {
+            @Override
+            public void telemetryEvent(Object arg0) {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public void publishDiagnostics(PublishDiagnosticsParams params) {
+                synchronized (diags) {
+                    diags[0] = params.getDiagnostics();
+                    diags.notifyAll();
+                }
+            }
+
+            @Override
+            public void showMessage(MessageParams arg0) {
+            }
+
+            @Override
+            public CompletableFuture<MessageActionItem> showMessageRequest(ShowMessageRequestParams arg0) {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+
+            @Override
+            public void logMessage(MessageParams arg0) {
+                throw new UnsupportedOperationException("Not supported yet.");
+            }
+        }, client.getInputStream(), client.getOutputStream());
+        serverLauncher.startListening();
+        LanguageServer server = serverLauncher.getRemoteProxy();
+        InitializeResult result = server.initialize(new InitializeParams()).get();
+        server.getTextDocumentService().didOpen(new DidOpenTextDocumentParams(new TextDocumentItem(src.toURI().toString(), "java", 0, code)));
+        assertDiags(diags); //errors
+        List<Diagnostic> diagnostics = assertDiags(diags, "Warning:1:7-1:19");//hints
+        VersionedTextDocumentIdentifier id = new VersionedTextDocumentIdentifier(1);
+        id.setUri(src.toURI().toString());
+        List<Either<Command, CodeAction>> codeActions = server.getTextDocumentService().codeAction(new CodeActionParams(id, new Range(new Position(1, 7), new Position(1, 19)), new CodeActionContext(Arrays.asList(diagnostics.get(0))))).get();
+        String log = codeActions.toString();
+        assertEquals(log, 1, codeActions.size());
+        assertTrue(log, codeActions.get(0).isRight());
+        CodeAction action = codeActions.get(0).getRight();
+        assertEquals("Remove .toString()", action.getTitle());
+        assertEquals(1, action.getEdit().getDocumentChanges().size());
+        assertEquals(1, action.getEdit().getDocumentChanges().get(0).getEdits().size());
+        TextEdit edit = action.getEdit().getDocumentChanges().get(0).getEdits().get(0);
+        assertEquals(1, edit.getRange().getStart().getLine());
+        assertEquals(8, edit.getRange().getStart().getCharacter());
+        assertEquals(1, edit.getRange().getEnd().getLine());
+        assertEquals(19, edit.getRange().getEnd().getCharacter());
+        assertEquals("", edit.getNewText());
+    }
+
     private List<Diagnostic> assertDiags(List<Diagnostic>[] diags, String... expected) {
         synchronized (diags) {
             while (diags[0] == null) {


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

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