diff --git a/platform/lang-api/src/com/intellij/lang/documentation/ExternalDocumentationHandler.java b/platform/lang-api/src/com/intellij/lang/documentation/ExternalDocumentationHandler.java index 358a83f7f88e..e801c9a9bccb 100644 --- a/platform/lang-api/src/com/intellij/lang/documentation/ExternalDocumentationHandler.java +++ b/platform/lang-api/src/com/intellij/lang/documentation/ExternalDocumentationHandler.java @@ -27,4 +27,17 @@ public interface ExternalDocumentationHandler { @NotNull String fetchExternalDocumentation(@NotNull String link, @Nullable PsiElement element); + + /** + * Defines whether we will show external documentation + * link at the bottom of the documentation pane or not. + * + * + * @return true if external documentation link should be + * shown, false otherwise + */ + default boolean canHandleExternal(@Nullable PsiElement element, + @Nullable PsiElement originalElement) { + return true; + } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java index 791245bc410d..64ce16e561fe 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java @@ -1005,30 +1005,32 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr final PsiElement element = getElement(); if (element == null) return null; - String title = myManager.getTitle(element); final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element); - if (myEffectiveExternalUrl == null) { - if (!isExternalHandler(provider)) { - final PsiElement originalElement = DocumentationManager.getOriginalElement(element); - List urls = provider.getUrlFor(element, originalElement); - if (urls != null) { - boolean hasBadUrl = false; - StringBuilder result = new StringBuilder(); - for (String url : urls) { - String link = getLink(title, url); - if (link == null) { - hasBadUrl = true; - break; - } + final PsiElement originalElement = DocumentationManager.getOriginalElement(element); + if (!shouldShowExternalDocumentationLink(provider, element, originalElement)) { + return null; + } - if (result.length() > 0) result.append("

"); - result.append(link); + final String title = myManager.getTitle(element); + if (myEffectiveExternalUrl == null) { + List urls = provider.getUrlFor(element, originalElement); + if (urls != null) { + boolean hasBadUrl = false; + StringBuilder result = new StringBuilder(); + for (String url : urls) { + String link = getLink(title, url); + if (link == null) { + hasBadUrl = true; + break; } - if (!hasBadUrl) return result.toString(); - } - else { - return null; + + if (result.length() > 0) result.append("

"); + result.append(link); } + if (!hasBadUrl) return result.toString(); + } + else { + return null; } } else { String link = getLink(title, myEffectiveExternalUrl); @@ -1053,14 +1055,19 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr return result.toString(); } - private static boolean isExternalHandler(DocumentationProvider provider) { + private static boolean shouldShowExternalDocumentationLink(DocumentationProvider provider, + PsiElement element, + PsiElement originalElement) { if (provider instanceof CompositeDocumentationProvider) { for (DocumentationProvider documentationProvider : ((CompositeDocumentationProvider)provider).getProviders()) { - if (documentationProvider instanceof ExternalDocumentationHandler) return true; + if (documentationProvider instanceof ExternalDocumentationHandler) { + return ((ExternalDocumentationHandler)documentationProvider).canHandleExternal(element, originalElement); + } } - return false; + } else if (provider instanceof ExternalDocumentationHandler) { + return ((ExternalDocumentationHandler)provider).canHandleExternal(element, originalElement); } - return provider instanceof ExternalDocumentationHandler; + return true; } private static String getHostname(String url) {