Merge branch 'aliublinskii/OC-16776_broken_external_link'

This commit is contained in:
Alexander Luyblinsky
2018-03-14 17:20:50 +03:00
2 changed files with 44 additions and 24 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;
}
}
@@ -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<String> 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("<p>");
result.append(link);
final String title = myManager.getTitle(element);
if (myEffectiveExternalUrl == null) {
List<String> 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("<p>");
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) {