summaryrefslogtreecommitdiff
path: root/xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java')
-rw-r--r--xml/openapi/src/com/intellij/ide/browsers/WebBrowserUrlProvider.java33
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) {