From 7cf6cef37d8c629eb078570ab54d6c4d19e770eb Mon Sep 17 00:00:00 2001 From: "Mennig, Robin" Date: Thu, 6 Aug 2026 17:23:31 +0200 Subject: [PATCH] Asynchronously open internal browser for javadoc hover Open internal browser asynchronously when handling external link in javadoc hover. This fixes a deadlock under Windows with its Edge/WebView2 browser runtime as it avoids the new browser instance being created from within the (navigation) callback of another browser instance. Fixes https://github.com/eclipse-jdt/eclipse.jdt.ui/issues/3105 --- .../jdt/internal/ui/actions/OpenBrowserUtil.java | 12 +++++++++++- .../internal/ui/text/java/hover/JavadocHover.java | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java index 5e9b92b1ef5..d9038dc6f13 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/OpenBrowserUtil.java @@ -29,7 +29,7 @@ public class OpenBrowserUtil { /** - * Opens the given url in the browser as choosen in the preferences. + * Opens the given url in the browser as chosen in the preferences. * * @param url the URL * @param display the display @@ -39,6 +39,16 @@ public static void open(final URL url, Display display) { display.syncExec(() -> internalOpen(url, false)); } + /** + * Asynchronously opens the given url in the browser as chosen in the preferences. + * + * @param url the URL + * @param display the display + */ + public static void openAsync(final URL url, Display display) { + display.asyncExec(() -> internalOpen(url, false)); + } + /** * Opens the given URL in an external browser. * diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java index d16b8013e9c..041439bae2c 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java @@ -676,7 +676,7 @@ public boolean handleExternalLink(URL url, Display display) { control.dispose(); //FIXME: should have protocol to hide, rather than dispose // Open attached Javadoc links - OpenBrowserUtil.open(url, display); + OpenBrowserUtil.openAsync(url, display); return true; }