diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServers.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServers.java index e58bad99f..bd2932321 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServers.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LanguageServers.java @@ -30,6 +30,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jface.text.IDocument; import org.eclipse.lsp4j.ServerCapabilities; +import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.LanguageServer; /** @@ -182,6 +183,16 @@ public E withFilter(final @NonNull Predicate filter) { return (E)this; } + /** + * Specifies the capabilities that a server must have to process this request + * @param serverCapabilities + * @return + */ + public E withCapability(final @NonNull Function> serverCapabilities) { + this.filter = f -> LSPEclipseUtils.hasCapability(serverCapabilities.apply(f)); + return (E)this; + } + /** * * @return Predicate that will be used to determine which servers this executor will use diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/hover/LSPTextHover.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/hover/LSPTextHover.java index cdc90b4e6..b2c167b55 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/hover/LSPTextHover.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/hover/LSPTextHover.java @@ -45,6 +45,7 @@ import org.eclipse.lsp4j.HoverParams; import org.eclipse.lsp4j.MarkedString; import org.eclipse.lsp4j.MarkupContent; +import org.eclipse.lsp4j.ServerCapabilities; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.mylyn.wikitext.markdown.MarkdownLanguage; import org.eclipse.mylyn.wikitext.parser.MarkupParser; @@ -62,7 +63,7 @@ public class LSPTextHover implements ITextHover, ITextHoverExtension { private IRegion lastRegion; private ITextViewer lastViewer; - private CompletableFuture> request; + private CompletableFuture<@NonNull List<@NonNull Hover>> request; @Override public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { @@ -193,13 +194,16 @@ public IRegion getHoverRegion(ITextViewer textViewer, int offset) { */ private void initiateHoverRequest(@NonNull ITextViewer viewer, int offset) { final IDocument document = viewer.getDocument(); + if (document == null) { + return; + } this.lastViewer = viewer; try { HoverParams params = LSPEclipseUtils.toHoverParams(offset, document); this.request = LanguageServers.forDocument(document) - .withFilter(capabilities -> LSPEclipseUtils.hasCapability(capabilities.getHoverProvider())) - .collectAll((wapper, server) -> server.getTextDocumentService().hover(params)); + .withCapability(ServerCapabilities::getHoverProvider) + .collectAll(server -> server.getTextDocumentService().hover(params)); } catch (BadLocationException e) { LanguageServerPlugin.logError(e); }