matthiasblaesing commented on code in PR #8655:
URL: https://github.com/apache/netbeans/pull/8655#discussion_r2270806315
##########
ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/refactoring/Refactoring.java:
##########
@@ -160,29 +148,28 @@ public Problem prepare(RefactoringElementsBag
refactoringElements) {
refactoringElements.add(query, new
LSPRefactoringElementImpl(annotatedLine, file, bounds));
}
}
- runningRequest = null;
- return null;
- } catch (CancellationException ex) {
- return new Problem(false, Bundle.TXT_Canceled());
- } catch (InterruptedException | ExecutionException ex) {
- Exceptions.printStackTrace(ex);
- return new Problem(true, ex.getLocalizedMessage());
- }
+ };
+
+ Utils.handleBindings(servers,
+ server -> true,
+ () -> params,
+ (server, params) ->
server.getTextDocumentService().references(params),
+ handleResult);
+
+ return getProblem();
}
}
- private static final class RenameRefactoringPlugin implements
RefactoringPlugin {
+ private static final class RenameRefactoringPlugin extends RefactoringBase
implements RefactoringPlugin {
private final RenameRefactoring refactoring;
- private final LSPBindings bindings;
+ private final List<LSPBindings> servers;
private final RenameParams params;
- private final AtomicBoolean cancel = new AtomicBoolean();
- private volatile CompletableFuture<WorkspaceEdit> runningRequest;
- public RenameRefactoringPlugin(RenameRefactoring refactoring,
LSPBindings bindings, RenameParams params) {
+ public RenameRefactoringPlugin(RenameRefactoring refactoring,
List<LSPBindings> servers, RenameParams params) {
Review Comment:
Is it intentional, that sometimes the unwrapped list is used and sometimes
the new record `LSPBindingsCollection` is?
##########
ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/NavigatorPanelImpl.java:
##########
@@ -94,7 +97,7 @@ private void setDisplayName(LSPBindings bindings) {
InitializeResult initResult = bindings.getInitResult();
ServerCapabilities capa = initResult.getCapabilities();
Either<Boolean, DocumentSymbolOptions> symbolProvider = capa != null ?
capa.getDocumentSymbolProvider() : null;
- String displayName = symbolProvider != null &&
symbolProvider.isRight() ? symbolProvider.getRight().getLabel() : null;
+ String displayName = symbolProvider != null &&
symbolProvider.isRight() ? symbolProvider.getRight().getLabel() :
initResult.getServerInfo().getName();
Review Comment:
This fails for the NetBeans bundled typescript support. The
`initResult.getServerInfo()` yields `null` there.
```suggestion
String displayName = null;
if(symbolProvider != null && symbolProvider.isRight()) {
displayName = symbolProvider.getRight().getLabel();
} else if (initResult.getServerInfo() != null) {
displayName = initResult.getServerInfo().getName();
}
```
##########
ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/refactoring/Refactoring.java:
##########
@@ -201,141 +188,129 @@ public Problem fastCheckParameters() {
return null;
}
- @Override
- public void cancelRequest() {
- cancel.set(true);
- CompletableFuture localRunningRequest = runningRequest;
- if(localRunningRequest != null) {
- localRunningRequest.cancel(true);
- }
- }
-
@Override
public Problem prepare(RefactoringElementsBag refactoringElements) {
- if (cancel.get()) {
- return new Problem(false, Bundle.TXT_Canceled());
- }
- Problem p = null;
- try {
- runningRequest =
bindings.getTextDocumentService().rename(params);
- WorkspaceEdit edit = runningRequest.get();
- List<Either<TextDocumentEdit, ResourceOperation>>
documentChanges = edit.getDocumentChanges();
- ModificationResult result = new ModificationResult();
- Map<FileObject, List<Difference>> file2Diffs = new HashMap<>();
- Map<String, String> newURI2Old = new HashMap<>();
- Map<String, String> newFileURI2Content = new HashMap<>();
-
- if (documentChanges != null) {
- for (Either<TextDocumentEdit, ResourceOperation> part :
documentChanges) {
- if(cancel.get()) {
- break;
- }
- if (part.isLeft()) {
- String uri =
part.getLeft().getTextDocument().getUri();
- uri = newURI2Old.getOrDefault(uri, uri);
- FileObject file = Utils.fromURI(uri);
-
- if (file != null) {
- for (TextEdit te : part.getLeft().getEdits()) {
- Difference diff =
textEdit2Difference(file, te);
- file2Diffs.computeIfAbsent(file, f -> new
ArrayList<>())
- .add(diff);
- }
- } else if (newFileURI2Content.containsKey(uri)) {
- FileObject temp =
FileUtil.createMemoryFileSystem().getRoot().createData("temp.txt");
- try (OutputStream out =
temp.getOutputStream()) {
-
out.write(newFileURI2Content.get(uri).getBytes()); //TODO: encoding - native,
OK?
- }
- List<Difference> diffs = new ArrayList<>();
- for (TextEdit te : part.getLeft().getEdits()) {
- diffs.add(textEdit2Difference(temp, te));
- }
- ModificationResult tempResult = new
ModificationResult();
- tempResult.addDifferences(temp, diffs);
- newFileURI2Content.put(uri,
tempResult.getResultingSource(temp));
- } else {
- //XXX: problem...
+// if (cancel.get()) {
+// return new Problem(false, Bundle.TXT_Canceled());
+// }
+// Problem p = null;
+// try {
+// runningRequest =
bindings.getTextDocumentService().rename(params);
Review Comment:
Remove?
##########
ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/HyperlinkProviderImpl.java:
##########
@@ -101,44 +96,34 @@ public void performClickAction(Document doc, int offset,
HyperlinkType type) {
//TODO: beep
return ;
}
- LSPBindings server = LSPBindings.getBindings(file);
- if (server == null) {
- return ;
- }
String uri = Utils.toURI(file);
- try {
- DefinitionParams params;
- params = new DefinitionParams(new TextDocumentIdentifier(uri),
- Utils.createPosition(doc, offset));
- //TODO: Location or Location[]
- CompletableFuture<Either<List<? extends Location>, List<? extends
LocationLink>>> def = server.getTextDocumentService().definition(params);
- def.handleAsync((locations, exception) -> {
- if (exception != null) {
- exception.printStackTrace();
- }
- if (locations == null) {
- return null;
- }
- String targetUri;
- Range targetRange;
- if (locations.isLeft() && locations.getLeft().size() == 1) {
//TODO: what to do when there are multiple locations?
- targetUri = locations.getLeft().get(0).getUri();
- targetRange = locations.getLeft().get(0).getRange();
- } else if (locations.isRight() && locations.getRight().size()
== 1) { //TODO: what to do when there are multiple locations?
- targetUri = locations.getRight().get(0).getTargetUri();
- targetRange = locations.getRight().get(0).getTargetRange();
- } else {
- return null;
- }
- Utils.open(targetUri, targetRange);
- return null;
- }).get();
- } catch (BadLocationException ex) {
- Exceptions.printStackTrace(ex);
- } catch (InterruptedException ex) {
- Exceptions.printStackTrace(ex);
- } catch (ExecutionException ex) {
- Exceptions.printStackTrace(ex);
+ List<Location> foundLocations = new ArrayList<>();
+ Utils.handleBindings(LSPBindings.getBindings(file),
+ capa ->
Utils.isEnabled(capa.getDefinitionProvider()),
+ () -> new DefinitionParams(new
TextDocumentIdentifier(uri),
+
Utils.createPosition(doc, offset)),
+
+ (server, params) ->
server.getTextDocumentService().definition(params),
+ (server, locations) -> {
+ if (locations == null) {
+ return ;
+ } else if (locations.isLeft()) {
+
foundLocations.addAll(locations.getLeft());
+ } else if (locations.isRight()) {
+ locations.getRight()
+ .stream()
+ .map(ll -> new
Location(ll.getTargetUri(), ll.getTargetRange()))
+ .forEach(foundLocations::add);
+ }
+ });
+ if (foundLocations.isEmpty()) {
+ //TODO: beep?
+ } else if (foundLocations.size() == 1) {
+ Location location = foundLocations.get(0);
+ Utils.open(location.getUri(), location.getRange());
+ } else {
+ //TODO: what to do when there are multiple locations?
+ //presumably show a popup
Review Comment:
For now use the first result? People might get icky if nothing happens
instead of one potential jump.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
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