diff options
Diffstat (limited to 'xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java')
-rw-r--r-- | xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java index e5795d1d6db5..688191fcef19 100644 --- a/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java +++ b/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java @@ -16,6 +16,7 @@ package com.intellij.ide.browsers; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -34,16 +35,30 @@ public abstract class WebBrowserUrlProvider { } } - @NotNull - /** - * URL must not be encoded (space as is) - */ - public abstract String getUrl(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull VirtualFile virtualFile) throws BrowserException; + public boolean canHandleElement(@NotNull PsiElement element, @NotNull PsiFile psiFile, Ref<Url> result) { + VirtualFile file = psiFile.getVirtualFile(); + if (file == null) { + return false; + } - /** - * Invariant: element has not null containing psi file with not null virtual file - */ - public abstract boolean canHandleElement(@NotNull final PsiElement element); + Url url; + try { + url = getUrl(element, psiFile, file); + } + catch (BrowserException ignored) { + return false; + } + + if (url == null) { + return false; + } + + result.set(url); + return true; + } + + @Nullable + public abstract Url getUrl(@NotNull PsiElement element, @NotNull PsiFile psiFile, @NotNull VirtualFile virtualFile) throws BrowserException; @Nullable public String getOpenInBrowserActionText(@NotNull PsiFile file) { |