mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-137908 External documentation (from javadoc.jar) is not shown
This commit is contained in:
+18
-10
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user