Skip to content

Commit 985558d

Browse files
Copilotnixel2007
andcommitted
Add support for LSP Cancellation notification in BSLTextDocumentService
Co-authored-by: nixel2007 <1132840+nixel2007@users.noreply.github.com>
1 parent 93c4dde commit 985558d

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentService.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
import org.eclipse.lsp4j.TextDocumentContentChangeEvent;
104104
import org.eclipse.lsp4j.TextEdit;
105105
import org.eclipse.lsp4j.WorkspaceEdit;
106+
import org.eclipse.lsp4j.jsonrpc.CompletableFutures;
106107
import org.eclipse.lsp4j.jsonrpc.messages.Either;
107108
import org.eclipse.lsp4j.jsonrpc.messages.Either3;
108109
import org.eclipse.lsp4j.services.TextDocumentService;
@@ -747,9 +748,13 @@ private void processDocumentChange(
747748
waitFuture = CompletableFuture.completedFuture(null);
748749
}
749750

750-
return waitFuture.thenApplyAsync(
751-
ignored -> supplier.get(),
752-
executorService
751+
return CompletableFutures.computeAsync(
752+
executorService,
753+
cancelChecker -> {
754+
waitFuture.join();
755+
cancelChecker.checkCanceled();
756+
return supplier.get();
757+
}
753758
);
754759
}
755760
}

src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLTextDocumentServiceTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.nio.charset.StandardCharsets;
5050
import java.util.ArrayList;
5151
import java.util.List;
52+
import java.util.concurrent.CancellationException;
5253
import java.util.concurrent.ExecutionException;
5354

5455
import static org.assertj.core.api.Assertions.assertThat;
@@ -288,6 +289,24 @@ void testRenamePrepare() {
288289
assertThat(result).isNotNull();
289290
}
290291

292+
@Test
293+
void testCancellationSupport() throws IOException {
294+
// given
295+
var textDocumentItem = getTextDocumentItem();
296+
var didOpenParams = new DidOpenTextDocumentParams(textDocumentItem);
297+
textDocumentService.didOpen(didOpenParams);
298+
299+
// when
300+
var params = new DocumentDiagnosticParams(getTextDocumentIdentifier());
301+
var future = textDocumentService.diagnostic(params);
302+
303+
// Cancel the future before it completes
304+
future.cancel(true);
305+
306+
// then - future should be cancelled
307+
assertThat(future.isCancelled()).isTrue();
308+
}
309+
291310
private File getTestFile() {
292311
return new File("./src/test/resources/BSLTextDocumentServiceTest.bsl");
293312
}

0 commit comments

Comments
 (0)