IDEA-137908 External documentation (from javadoc.jar) is not shown

This commit is contained in:
Dmitry Batrak
2015-03-23 17:43:55 +03:00
parent 2e5cbce6e6
commit bc8faca1b2
2 changed files with 22 additions and 10 deletions
@@ -21,13 +21,13 @@ import com.intellij.codeInsight.hint.ElementLocationUtil;
import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.codeInsight.hint.HintUtil;
import com.intellij.icons.AllIcons;
import com.intellij.ide.BrowserUtil;
import com.intellij.ide.DataManager;
import com.intellij.ide.actions.BaseNavigateToSourceAction;
import com.intellij.ide.actions.ExternalJavaDocAction;
import com.intellij.lang.documentation.CompositeDocumentationProvider;
import com.intellij.lang.documentation.DocumentationProvider;
import com.intellij.lang.documentation.ExternalDocumentationHandler;
import com.intellij.lang.documentation.ExternalDocumentationProvider;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.impl.ActionButton;
@@ -39,6 +39,7 @@ import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
import com.intellij.openapi.editor.ex.util.EditorUtil;
import com.intellij.openapi.options.FontSize;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
@@ -54,6 +55,7 @@ import com.intellij.ui.SideBorder;
import com.intellij.ui.components.JBLayeredPane;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.Consumer;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
import com.intellij.util.ui.GraphicsUtil;
import com.intellij.util.ui.UIUtil;
@@ -696,6 +698,12 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr
}
}
private static final Condition<String> BROWSABLE_URL = new Condition<String>() {
@Override
public boolean value(String s) {
return BrowserUtil.canBeBrowsed(s);
}
};
private class ExternalDocAction extends AnAction implements HintManagerImpl.ActionToIgnore {
public ExternalDocAction() {
@@ -722,10 +730,10 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr
if (!processed) {
final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(e.getDataContext());
final List<String> urls;
if (!StringUtil.isEmptyOrSpaces(myEffectiveExternalUrl)) {
if (!StringUtil.isEmptyOrSpaces(myEffectiveExternalUrl) && BROWSABLE_URL.value(myEffectiveExternalUrl)) {
urls = Collections.singletonList(myEffectiveExternalUrl);
} else {
urls = provider.getUrlFor(element, originalElement);
urls = getBrowsableUrls(provider.getUrlFor(element, originalElement));
assert urls != null : provider;
assert !urls.isEmpty() : provider;
}
@@ -742,15 +750,15 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr
final PsiElement element = myElement.getElement();
final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element);
final PsiElement originalElement = DocumentationManager.getOriginalElement(element);
if (provider instanceof ExternalDocumentationProvider) {
presentation.setEnabled(element != null && ((ExternalDocumentationProvider)provider).hasDocumentationFor(element, originalElement));
}
else {
final List<String> urls = provider.getUrlFor(element, originalElement);
presentation.setEnabled(element != null && urls != null && !urls.isEmpty());
}
List<String> urls = getBrowsableUrls(provider.getUrlFor(element, originalElement));
presentation.setEnabled(element != null && urls != null && !urls.isEmpty());
}
}
@Nullable
private List<String> getBrowsableUrls(@Nullable List<String> urls) {
return urls == null ? null : ContainerUtil.filter(urls, BROWSABLE_URL);
}
}
private void registerActions() {
@@ -57,6 +57,10 @@ public class BrowserUtil {
public static boolean isAbsoluteURL(String url) {
return ourExternalPrefix.matcher(url.toLowerCase(Locale.ENGLISH)).find();
}
public static boolean canBeBrowsed(String url) {
return url != null && !url.startsWith("jar:");
}
public static String getDocURL(String url) {
Matcher anchorMatcher = ourAnchorSuffix.matcher(url);