OC-16776 [Doc UI] Add ability to hide external doc link

Extend interface @ExternalDocumentationHandler to check whether
ExternalDocumentationHandler can handle external documentation or not.
This commit is contained in:
Alexander Luyblinsky
2018-03-13 16:17:55 +03:00
parent 842af1a95b
commit cb5b3e5885
2 changed files with 34 additions and 2 deletions
@@ -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;
}
}
@@ -990,10 +990,14 @@ 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);
final PsiElement originalElement = DocumentationManager.getOriginalElement(element);
if (!shouldShowExternalDocumentationLink(provider, element, originalElement)) {
return null;
}
final String title = myManager.getTitle(element);
if (myEffectiveExternalUrl == null) {
final PsiElement originalElement = DocumentationManager.getOriginalElement(element);
List<String> urls = provider.getUrlFor(element, originalElement);
if (urls != null) {
boolean hasBadUrl = false;
@@ -1036,6 +1040,21 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr
return result.toString();
}
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 ((ExternalDocumentationHandler)documentationProvider).canHandleExternal(element, originalElement);
}
}
} else if (provider instanceof ExternalDocumentationHandler) {
return ((ExternalDocumentationHandler)provider).canHandleExternal(element, originalElement);
}
return true;
}
private static String getHostname(String url) {
try {
return new URL(url).toURI().getHost();