diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/assets/OCIPropertiesProvider.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/assets/OCIPropertiesProvider.java index fd34f68dbb55..ca775b821cdc 100644 --- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/assets/OCIPropertiesProvider.java +++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/assets/OCIPropertiesProvider.java @@ -72,12 +72,12 @@ public CompletableFuture runCommand(String command, List argumen try { Path temp = configFileGenerator.writePropertiesFile(dbProps); result.put("MICRONAUT_CONFIG_FILES", temp.toAbsolutePath().toString()); // NOI18N - ret.complete(result); } catch (IOException ex) { ret.completeExceptionally(ex); return ret; } } + ret.complete(result); return ret; } diff --git a/enterprise/micronaut/src/org/netbeans/modules/micronaut/db/MicronautEntity.java b/enterprise/micronaut/src/org/netbeans/modules/micronaut/db/MicronautEntity.java index e9b7adf18b46..90bbfcd43413 100644 --- a/enterprise/micronaut/src/org/netbeans/modules/micronaut/db/MicronautEntity.java +++ b/enterprise/micronaut/src/org/netbeans/modules/micronaut/db/MicronautEntity.java @@ -54,6 +54,7 @@ import org.netbeans.api.java.source.JavaSource; import org.netbeans.api.java.source.TreeMaker; import org.netbeans.api.java.source.WorkingCopy; +import org.netbeans.api.lsp.WorkspaceEdit; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.aggregate.BasicAggregateProgressFactory; import org.netbeans.api.progress.aggregate.ProgressContributor; @@ -86,9 +87,9 @@ import org.netbeans.modules.project.dependency.DependencyChange; import org.netbeans.modules.project.dependency.DependencyChangeException; import org.netbeans.modules.project.dependency.ProjectDependencies; +import org.netbeans.modules.project.dependency.ProjectModificationResult; import org.netbeans.modules.project.dependency.ProjectOperationException; import org.netbeans.modules.project.dependency.Scopes; -import org.netbeans.modules.refactoring.spi.ModificationResult; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; @@ -154,9 +155,9 @@ protected List createFromTemplate(CreateDescriptor desc) throws IOEx Dependency dep = Dependency.make(spec, Scopes.COMPILE); DependencyChange change = DependencyChange.add(Collections.singletonList(dep), DependencyChange.Options.skipConflicts); try { - ModificationResult mod = ProjectDependencies.modifyDependencies(project, change); - mod.commit(); - } catch (IOException | DependencyChangeException | ProjectOperationException ex) { + ProjectModificationResult mod = ProjectDependencies.modifyDependencies(project, change); + WorkspaceEdit.applyEdits(Collections.singletonList(mod.getWorkspaceEdit()), true); + } catch (DependencyChangeException | ProjectOperationException ex) { throw new IllegalStateException(ex); } } diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractApplyEditsImplementation.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractApplyEditsImplementation.java index 477a6e581131..53782148fbf1 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractApplyEditsImplementation.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/ui/AbstractApplyEditsImplementation.java @@ -56,14 +56,7 @@ public CompletableFuture> applyChanges(List edits, b return null; } Worker wk = new Worker(client, edits, saveResources); - try { - wk.execute(); - return CompletableFuture.completedFuture(wk.getProcessedResources()); - } catch (ResourceModificationException ex) { - CompletableFuture failed = new CompletableFuture(); - failed.completeExceptionally(ex); - return failed; - } + return wk.execute().thenApply(v -> wk.getProcessedResources()); } final static class Worker { @@ -148,8 +141,11 @@ CompletableFuture handleClientResponse(WorkspaceEdit edit, ApplyWorkspaceE } } - public void execute() throws ResourceModificationException { + public CompletableFuture execute() { CompletableFuture response = null; + if (edits.isEmpty()) { + return CompletableFuture.completedFuture(null); + } for (WorkspaceEdit e : edits) { currentEdit = e; @@ -164,7 +160,13 @@ public void execute() throws ResourceModificationException { } if (doSave) { - client.requestDocumentSave(new SaveDocumentRequestParams(new ArrayList<>(processed))); + return response.thenCompose(v -> client.requestDocumentSave(new SaveDocumentRequestParams(new ArrayList<>(processed)))) + .thenApply(success -> { + saved.addAll(processed); + return null; + }); + } else { + return response; } } } diff --git a/java/java.lsp.server/vscode/src/extension.ts b/java/java.lsp.server/vscode/src/extension.ts index 4256b1660612..d5ed33c8d15e 100644 --- a/java/java.lsp.server/vscode/src/extension.ts +++ b/java/java.lsp.server/vscode/src/extension.ts @@ -1333,12 +1333,25 @@ function doActivateWithJDK(specifiedJDK: string | null, context: ExtensionContex // don't ask why vscode mangles URIs this way; in addition, it uses lowercase drive letter ??? return `file:///${re[1].toLowerCase()}%3A/${re[2]}`; }); + let ok = true; for (let ed of workspace.textDocuments) { - if (uriList.includes(ed.uri.toString())) { - return ed.save(); + let uri = ed.uri.toString(); + + if (uriList.includes(uri)) { + ed.save(); + continue; + } + if (uri.startsWith("file:///")) { + // make file:/// just file:/ + uri = "file:/" + uri.substring(8); + if (uriList.includes(uri)) { + ed.save(); + continue; + } } + ok = false; } - return false; + return ok; }); c.onRequest(InputBoxRequest.type, async param => { return await window.showInputBox({ title: param.title, prompt: param.prompt, value: param.value, password: param.password });