This is an automated email from the ASF dual-hosted git repository.
dbalek 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 fe150eb806 LSP: Fix broken source for workspace symbol resolution.
new 72b63fdba3 Merge pull request #6374 from
dbalek/dbalek/lsp-open-source-for-symbol
fe150eb806 is described below
commit fe150eb80611be2b025087a56592eba42281337f
Author: Dusan Balek <[email protected]>
AuthorDate: Thu Aug 24 10:59:54 2023 +0200
LSP: Fix broken source for workspace symbol resolution.
---
.../lsp/server/protocol/WorkspaceServiceImpl.java | 72 ++++++++++------------
.../java/lsp/server/TestCodeLanguageClient.java | 1 -
.../java/lsp/server/protocol/ServerTest.java | 58 ++++++-----------
3 files changed, 50 insertions(+), 81 deletions(-)
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
index 0c42c372a8..afa8ed4782 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
@@ -32,9 +32,6 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -950,10 +947,6 @@ public final class WorkspaceServiceImpl implements
WorkspaceService, LanguageCli
return UnitTestForSourceQuery.findSources(sg.getRootFolder()).length >
0;
}
- private static final Position NO_POS = new Position(0, 0);
- private static final Range NO_RANGE = new Range(NO_POS, NO_POS);
- private static final String SOURCE_FOR = "sourceFor:";
-
@Override
public CompletableFuture<Either<List<? extends SymbolInformation>, List<?
extends WorkspaceSymbol>>> symbol(WorkspaceSymbolParams params) {
String query = params.getQuery();
@@ -1132,8 +1125,8 @@ public final class WorkspaceServiceImpl implements
WorkspaceService, LanguageCli
int idx = fqn.lastIndexOf('.');
String simpleName = idx < 0 ? fqn :
fqn.substring(idx + 1);
String contextName = idx < 0 ? null :
fqn.substring(0, idx);
- String uri =
URLEncoder.encode(pair.second().toURI().toString() + '?' +
handle.getKind().name() + '#' + handle.getBinaryName(),
StandardCharsets.UTF_8.toString());
- WorkspaceSymbol symbol = new
WorkspaceSymbol(simpleName, Utils.elementKind2SymbolKind(handle.getKind()),
Either.forRight(new WorkspaceSymbolLocation(SOURCE_FOR + uri)), contextName);
+ String uri =
(pair.second().toURI().toString()) + '?' + handle.getKind().name() + '#' +
handle.getBinaryName();
+ WorkspaceSymbol symbol = new
WorkspaceSymbol(simpleName, Utils.elementKind2SymbolKind(handle.getKind()),
Either.forRight(new WorkspaceSymbolLocation(uri)), contextName);
symbols.add(symbol);
}
}
@@ -1157,44 +1150,41 @@ public final class WorkspaceServiceImpl implements
WorkspaceService, LanguageCli
@Override
public CompletableFuture<WorkspaceSymbol>
resolveWorkspaceSymbol(WorkspaceSymbol workspaceSymbol) {
String sourceUri = workspaceSymbol.getLocation().isLeft() ?
workspaceSymbol.getLocation().getLeft().getUri() :
workspaceSymbol.getLocation().getRight().getUri();
- if (!sourceUri.startsWith(SOURCE_FOR)) {
- return CompletableFuture.completedFuture(workspaceSymbol);
- }
CompletableFuture<WorkspaceSymbol> result = new CompletableFuture<>();
try {
- sourceUri =
URLDecoder.decode(sourceUri.substring(SOURCE_FOR.length()),
StandardCharsets.UTF_8.toString());
int qIdx = sourceUri.lastIndexOf('?');
int hIdx = sourceUri.lastIndexOf('#');
if (qIdx < 0 || hIdx < 0 || hIdx <= qIdx) {
- throw new IllegalArgumentException("Invalid uri: " +
sourceUri);
- }
- String rootUri = sourceUri.substring(0, qIdx);
- FileObject root =
URLMapper.findFileObject(URI.create(rootUri).toURL());
- if (root == null) {
- throw new IllegalStateException("Unable to find root: " +
rootUri);
- }
- ElementHandle typeHandle =
ElementHandleAccessor.getInstance().create(ElementKind.valueOf(sourceUri.substring(qIdx
+ 1, hIdx)), sourceUri.substring(hIdx + 1));
- CompletableFuture<ElementOpen.Location> location =
ElementOpen.getLocation(ClasspathInfo.create(root), typeHandle,
typeHandle.getQualifiedName().replace('.', '/') + ".class");
- location.exceptionally(ex -> {
- result.completeExceptionally(ex);
- return null;
- }).thenAccept(loc -> {
- if (loc != null) {
- ShowDocumentParams sdp = new
ShowDocumentParams(Utils.toUri(loc.getFileObject()));
- Position position =
Utils.createPosition(loc.getFileObject(), loc.getStartOffset());
- sdp.setSelection(new Range(position, position));
- client.showDocument(sdp).thenAccept(res -> {
- if (res.isSuccess()) {
- workspaceSymbol.setLocation(Either.forLeft(new
Location(Utils.toUri(loc.getFileObject()), new Range(position, position))));
- result.complete(workspaceSymbol);
- } else {
- result.completeExceptionally(new
IllegalStateException("Cannot open source for: " +
typeHandle.getQualifiedName()));
- }
- });
- } else if (!result.isCompletedExceptionally()) {
- result.completeExceptionally(new
IllegalStateException("Cannot find source for: " +
typeHandle.getQualifiedName()));
+ result.complete(workspaceSymbol);
+ } else {
+ String rootUri = sourceUri.substring(0, qIdx);
+ FileObject root = Utils.fromUri(rootUri);
+ if (root == null) {
+ throw new IllegalStateException("Unable to find root: " +
rootUri);
}
- });
+ ElementHandle typeHandle =
ElementHandleAccessor.getInstance().create(ElementKind.valueOf(sourceUri.substring(qIdx
+ 1, hIdx)), sourceUri.substring(hIdx + 1));
+ CompletableFuture<ElementOpen.Location> location =
ElementOpen.getLocation(ClasspathInfo.create(root), typeHandle,
typeHandle.getQualifiedName().replace('.', '/') + ".class");
+ location.exceptionally(ex -> {
+ result.completeExceptionally(ex);
+ return null;
+ }).thenAccept(loc -> {
+ if (loc != null) {
+ ShowDocumentParams sdp = new
ShowDocumentParams(Utils.toUri(loc.getFileObject()));
+ Position position =
Utils.createPosition(loc.getFileObject(), loc.getStartOffset());
+ sdp.setSelection(new Range(position, position));
+ client.showDocument(sdp).thenAccept(res -> {
+ if (res.isSuccess()) {
+ workspaceSymbol.setLocation(Either.forLeft(new
Location(Utils.toUri(loc.getFileObject()), new Range(position, position))));
+ result.complete(workspaceSymbol);
+ } else {
+ result.completeExceptionally(new
IllegalStateException("Cannot open source for: " +
typeHandle.getQualifiedName()));
+ }
+ });
+ } else if (!result.isCompletedExceptionally()) {
+ result.completeExceptionally(new
IllegalStateException("Cannot find source for: " +
typeHandle.getQualifiedName()));
+ }
+ });
+ }
} catch (Throwable t) {
result.completeExceptionally(t);
}
diff --git
a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/TestCodeLanguageClient.java
b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/TestCodeLanguageClient.java
index 33523b8041..d26ba5d8a6 100644
---
a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/TestCodeLanguageClient.java
+++
b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/TestCodeLanguageClient.java
@@ -125,7 +125,6 @@ public abstract class TestCodeLanguageClient implements
NbCodeLanguageClient {
@Override
public void telemetryEvent(Object params) {
- throw new UnsupportedOperationException();
}
@Override
diff --git
a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
index 4a7645dbca..9d3412e0aa 100644
---
a/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
+++
b/java/java.lsp.server/test/unit/src/org/netbeans/modules/java/lsp/server/protocol/ServerTest.java
@@ -53,6 +53,7 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
@@ -122,6 +123,8 @@ import org.eclipse.lsp4j.SemanticTokensCapabilities;
import org.eclipse.lsp4j.SemanticTokensLegend;
import org.eclipse.lsp4j.SemanticTokensParams;
import org.eclipse.lsp4j.ResourceOperationKind;
+import org.eclipse.lsp4j.ShowDocumentParams;
+import org.eclipse.lsp4j.ShowDocumentResult;
import org.eclipse.lsp4j.ShowMessageRequestParams;
import org.eclipse.lsp4j.SymbolInformation;
import org.eclipse.lsp4j.TextDocumentClientCapabilities;
@@ -329,7 +332,6 @@ public class ServerTest extends NbTestCase {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -671,7 +673,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -781,7 +782,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -924,7 +924,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1008,7 +1007,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1073,7 +1071,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object params) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1137,7 +1134,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object params) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1239,7 +1235,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1307,7 +1302,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1357,7 +1351,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1416,7 +1409,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1555,7 +1547,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1717,7 +1708,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new TestCodeLanguageClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1822,7 +1812,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -1848,6 +1837,11 @@ public class ServerTest extends NbTestCase {
public void logMessage(MessageParams arg0) {
throw new UnsupportedOperationException("Not supported yet.");
}
+
+ @Override
+ public CompletableFuture<ShowDocumentResult>
showDocument(ShowDocumentParams params) {
+ return CompletableFuture.completedFuture(new
ShowDocumentResult(true));
+ }
}, client.getInputStream(), client.getOutputStream());
serverLauncher.startListening();
LanguageServer server = serverLauncher.getRemoteProxy();
@@ -1856,13 +1850,20 @@ public class ServerTest extends NbTestCase {
InitializeResult result = server.initialize(initParams).get();
indexingComplete.await();
Either<List<? extends SymbolInformation>, List<? extends
WorkspaceSymbol>> symbols = server.getWorkspaceService().symbol(new
WorkspaceSymbolParams("Tes")).get();
- List<String> actual = symbols.getRight().stream().map(ws ->
ws.getKind() + ":" + ws.getName() + ":" + ws.getContainerName() + ":"
- + (ws.getLocation().isLeft() ?
toString(ws.getLocation().getLeft()) :
toString(ws.getLocation().getRight()))).collect(Collectors.toList());
+ List<String> actual = symbols.getRight().stream().map(symbol -> {
+ WorkspaceSymbol ws;
+ try {
+ ws =
server.getWorkspaceService().resolveWorkspaceSymbol(symbol).get();
+ } catch (Exception ex) {
+ ws = symbol;
+ }
+ return ws.getKind() + ":" + ws.getName() + ":" +
ws.getContainerName() + ":" + (ws.getLocation().isLeft() ?
toString(ws.getLocation().getLeft()) : toString(ws.getLocation().getRight()));
+ }).collect(Collectors.toList());
assertEquals(Arrays.asList("Constructor:Test():Test:Test.java:0:7-0:7",
"Method:testMethod():Test:Test.java:2:4-2:38",
"Constructor:TestNested():Test.TestNested:Test.java:1:18-1:18",
- "Class:Test:null:Test",
- "Class:TestNested:Test:Test%24TestNested"),
+ "Class:Test:null:Test.java:0:13-0:13",
+
"Class:TestNested:Test:Test.java:1:24-1:24"),
actual);
}
@@ -1882,7 +1883,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2022,7 +2022,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2112,7 +2111,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2203,7 +2201,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2297,7 +2294,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2388,7 +2384,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2480,7 +2475,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2589,7 +2583,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2693,7 +2686,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2797,7 +2789,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -2904,7 +2895,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -3038,7 +3028,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -3558,7 +3547,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -3692,7 +3680,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -4581,7 +4568,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -4661,7 +4647,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -4745,7 +4730,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -4824,7 +4808,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -4893,7 +4876,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LspClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -5028,7 +5010,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LanguageClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
@@ -5091,7 +5072,6 @@ public class ServerTest extends NbTestCase {
Launcher<LanguageServer> serverLauncher =
createClientLauncherWithLogging(new LanguageClient() {
@Override
public void telemetryEvent(Object arg0) {
- throw new UnsupportedOperationException("Not supported yet.");
}
@Override
---------------------------------------------------------------------
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