From 7875ccc69f329f0cb269d8eefe7b0a1aeadeaa4a Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Fri, 26 Feb 2021 12:32:38 +0100 Subject: [PATCH] added cancel handling to highlight requests --- .../languageserver/util/DocumentHighlightHandler.java | 5 +++-- .../languageserver/util/SimpleTextDocumentService.java | 2 +- .../java/handlers/BootJavaDocumentHighlightEngine.java | 9 +++++---- .../ide/vscode/boot/java/handlers/HighlightProvider.java | 5 +++-- .../requestmapping/WebfluxRouteHighlightProdivder.java | 5 ++++- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentHighlightHandler.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentHighlightHandler.java index 71bd3cf74..6573f837b 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentHighlightHandler.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/DocumentHighlightHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2020 Pivotal, Inc. + * Copyright (c) 2018, 2021 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -14,10 +14,11 @@ import java.util.List; import org.eclipse.lsp4j.DocumentHighlight; import org.eclipse.lsp4j.DocumentHighlightParams; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; @FunctionalInterface public interface DocumentHighlightHandler { - List handle(DocumentHighlightParams highligtParams); + List handle(CancelChecker cancelToken, DocumentHighlightParams highligtParams); } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index 19a57b8bb..5f9113076 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -473,7 +473,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE DocumentHighlightHandler handler = this.documentHighlightHandler; if (handler != null) { return CompletableFutures.computeAsync(cancelToken -> { - return handler.handle(highlightParams); + return handler.handle(cancelToken, highlightParams); }); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaDocumentHighlightEngine.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaDocumentHighlightEngine.java index e93b466a3..0a25a4e34 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaDocumentHighlightEngine.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/BootJavaDocumentHighlightEngine.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.lsp4j.DocumentHighlight; import org.eclipse.lsp4j.DocumentHighlightParams; import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.boot.java.BootJavaLanguageServerComponents; @@ -40,7 +41,7 @@ public class BootJavaDocumentHighlightEngine implements DocumentHighlightHandler } @Override - public List handle(DocumentHighlightParams params) { + public List handle(CancelChecker cancelToken, DocumentHighlightParams params) { SimpleTextDocumentService documents = server.getTextDocumentService(); TextDocument doc = documents.getLatestSnapshot(params); @@ -48,7 +49,7 @@ public class BootJavaDocumentHighlightEngine implements DocumentHighlightHandler // Spring Boot LS get events from boot properties files as well, so filter them out if (doc != null && server.getInterestingLanguages().contains(doc.getLanguageId())) { try { - return provideDocumentHighlights(doc, params.getPosition()); + return provideDocumentHighlights(cancelToken, doc, params.getPosition()); } catch (Exception e) { log.error("", e); @@ -59,10 +60,10 @@ public class BootJavaDocumentHighlightEngine implements DocumentHighlightHandler return SimpleTextDocumentService.NO_HIGHLIGHTS; } - private List provideDocumentHighlights(TextDocument document, Position position) { + private List provideDocumentHighlights(CancelChecker cancelToken, TextDocument document, Position position) { List result = new ArrayList<>(); for (HighlightProvider highlightProvider : highlightProviders) { - highlightProvider.provideHighlights(document, position, result); + highlightProvider.provideHighlights(cancelToken, document, position, result); } return result; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/HighlightProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/HighlightProvider.java index 2235d4393..f122afc41 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/HighlightProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/handlers/HighlightProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 Pivotal, Inc. + * Copyright (c) 2018, 2021 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -14,6 +14,7 @@ import java.util.List; import org.eclipse.lsp4j.DocumentHighlight; import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.springframework.ide.vscode.commons.util.text.TextDocument; /** @@ -21,6 +22,6 @@ import org.springframework.ide.vscode.commons.util.text.TextDocument; */ public interface HighlightProvider { - public void provideHighlights(TextDocument document, Position position, List resultAccumulator); + public void provideHighlights(CancelChecker cancelToken, TextDocument document, Position position, List resultAccumulator); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouteHighlightProdivder.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouteHighlightProdivder.java index 0d1462ab1..cc7909474 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouteHighlightProdivder.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouteHighlightProdivder.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.lsp4j.DocumentHighlight; import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.boot.app.SpringSymbolIndex; @@ -35,8 +36,10 @@ public class WebfluxRouteHighlightProdivder implements HighlightProvider { } @Override - public void provideHighlights(TextDocument document, Position position, List resultAccumulator) { + public void provideHighlights(CancelChecker cancelToken, TextDocument document, Position position, List resultAccumulator) { log.info("PROVIDE HIGHLIGHTS: {} / {}", position.getLine(), position.getCharacter()); + + cancelToken.checkCanceled(); this.springIndexer.getAdditonalInformation(document.getUri()) .stream()