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