diff --git a/src/main/java/com/github/cameltooling/lsp/internal/diagnostic/DiagnosticRunner.java b/src/main/java/com/github/cameltooling/lsp/internal/diagnostic/DiagnosticRunner.java index f1ee537a..ee4e1b03 100644 --- a/src/main/java/com/github/cameltooling/lsp/internal/diagnostic/DiagnosticRunner.java +++ b/src/main/java/com/github/cameltooling/lsp/internal/diagnostic/DiagnosticRunner.java @@ -79,8 +79,12 @@ public void computeDiagnostics(String camelText, TextDocumentItem documentItem) diagnostics.addAll(configurationPropertiesDiagnosticService.converToLSPDiagnostics(configurationPropertiesErrors)); diagnostics.addAll(camelKModelineDiagnosticService.compute(camelText, documentItem)); diagnostics.addAll(connectedModeDiagnosticService.compute(camelText, documentItem)); - camelLanguageServer.getClient().publishDiagnostics(new PublishDiagnosticsParams(uri, diagnostics)); - lastTriggeredDiagnostic.remove(uri); + if(!Thread.currentThread().isInterrupted()) { + camelLanguageServer.getClient().publishDiagnostics(new PublishDiagnosticsParams(uri, diagnostics)); + lastTriggeredDiagnostic.remove(uri); + } else { + System.out.println("### Thread was interrupted (i.e. Future for diagnostic cancelled)"); + } }); lastTriggeredDiagnostic.put(uri, lastTriggeredComputation); } @@ -97,6 +101,7 @@ public void clear(String uri) { CompletableFuture previousComputation = lastTriggeredDiagnostic.get(uri); if (previousComputation != null) { previousComputation.cancel(true); + lastTriggeredDiagnostic.remove(uri); } camelLanguageServer.getClient().publishDiagnostics(new PublishDiagnosticsParams(uri, Collections.emptyList())); } diff --git a/src/test/java/com/github/cameltooling/lsp/internal/AbstractCamelLanguageServerTest.java b/src/test/java/com/github/cameltooling/lsp/internal/AbstractCamelLanguageServerTest.java index bc1faad3..d2e7c967 100644 --- a/src/test/java/com/github/cameltooling/lsp/internal/AbstractCamelLanguageServerTest.java +++ b/src/test/java/com/github/cameltooling/lsp/internal/AbstractCamelLanguageServerTest.java @@ -136,6 +136,7 @@ public void showMessage(MessageParams messageParams) { @Override public void publishDiagnostics(PublishDiagnosticsParams diagnostics) { + System.out.println("Published Diagnostics " + diagnostics.getUri() +" "+ diagnostics.getDiagnostics().size()); AbstractCamelLanguageServerTest.this.lastPublishedDiagnostics = diagnostics; } diff --git a/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/AbstractDiagnosticTest.java b/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/AbstractDiagnosticTest.java index 844328c4..f69707f0 100644 --- a/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/AbstractDiagnosticTest.java +++ b/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/AbstractDiagnosticTest.java @@ -53,6 +53,9 @@ protected void testDiagnostic(String fileUnderTest, int expectedNumberOfError, S protected void testDiagnostic(File file, int expectedNumberOfError, String extension) throws FileNotFoundException { camelLanguageServer = initializeLanguageServer(new FileInputStream(file), extension); + createAwait().untilAsserted(() -> assertThat(lastPublishedDiagnostics).isNotNull()); + createAwait().untilAsserted(() -> assertThat(lastPublishedDiagnostics.getDiagnostics()).isEmpty()); + DidSaveTextDocumentParams params = new DidSaveTextDocumentParams(new TextDocumentIdentifier(DUMMY_URI+extension)); camelLanguageServer.getTextDocumentService().didSave(params); diff --git a/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/CamelDiagnosticTest.java b/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/CamelDiagnosticTest.java index 8f8633e1..499f4e7f 100644 --- a/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/CamelDiagnosticTest.java +++ b/src/test/java/com/github/cameltooling/lsp/internal/diagnostic/CamelDiagnosticTest.java @@ -142,16 +142,22 @@ void testNoExceptionOnInvalidJavaFile() throws Exception { @Test void testValidationErrorClearedOnClose() throws Exception { + System.out.println("### Starting testValidationErrorClearedOnClose test "); testDiagnostic("camel-with-endpoint-error", 1, ".xml"); + System.out.println("### Will close"); + DidCloseTextDocumentParams params = new DidCloseTextDocumentParams(new TextDocumentIdentifier(DUMMY_URI+".xml")); camelLanguageServer.getTextDocumentService().didClose(params); - await().timeout(AWAIT_TIMEOUT).untilAsserted(() -> assertThat(lastPublishedDiagnostics.getDiagnostics()).isEmpty()); + System.out.println("### didClose sent"); + + await().timeout(AWAIT_TIMEOUT.multipliedBy(2)).untilAsserted(() -> assertThat(lastPublishedDiagnostics.getDiagnostics()).isEmpty()); } @Test void testValidationErrorUpdatedOnChange() throws Exception { + System.out.println("### Starting testValidationErrorUpdatedOnChange test "); testDiagnostic("camel-with-endpoint-error", 1, ".xml"); camelLanguageServer.getTextDocumentService().getOpenedDocument(DUMMY_URI+".xml").getText();