From 852a6ce6c0f43c9b2044320dcceb4c6cc0a3b302 Mon Sep 17 00:00:00 2001 From: Kamil Doległo Date: Tue, 11 Aug 2020 21:47:26 +0200 Subject: Refactor location providers --- .../javadoc/JavadocExternalLocationProvider.kt | 31 ++++++++++++++++++++++ .../JavadocExternalLocationProviderFactory.kt | 25 +++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProvider.kt create mode 100644 plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProviderFactory.kt (limited to 'plugins/base/src/main/kotlin/resolvers/external/javadoc') diff --git a/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProvider.kt b/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProvider.kt new file mode 100644 index 00000000..d42b5b5c --- /dev/null +++ b/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProvider.kt @@ -0,0 +1,31 @@ +package org.jetbrains.dokka.base.resolvers.external.javadoc + +import org.jetbrains.dokka.base.resolvers.external.DefaultExternalLocationProvider +import org.jetbrains.dokka.base.resolvers.shared.ExternalDocumentationInfo +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.plugability.DokkaContext +import org.jetbrains.dokka.utilities.htmlEscape + +class JavadocExternalLocationProvider( + externalDocumentationInfo: ExternalDocumentationInfo, + val brackets: String, + val separator: String, + dokkaContext: DokkaContext +) : DefaultExternalLocationProvider(externalDocumentationInfo, ".html", dokkaContext) { + + override fun resolve(dri: DRI): String? { + val docURL = externalDocumentationInfo.documentationURL.toString().removeSuffix("/") + "/" + val packageLink = dri.packageName?.replace(".", "/") + if (dri.classNames == null) { + return "$docURL$packageLink/package-summary$extension".htmlEscape() + } + val classLink = if (packageLink == null) "${dri.classNames}$extension" else "$packageLink/${dri.classNames}$extension" + val callableChecked = dri.callable ?: return "$docURL$classLink".htmlEscape() + + return ("$docURL$classLink#" + + callableChecked.name + + "${brackets.first()}" + + callableChecked.params.joinToString(separator) + + "${brackets.last()}").htmlEscape() + } +} \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProviderFactory.kt b/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProviderFactory.kt new file mode 100644 index 00000000..1cfd73a8 --- /dev/null +++ b/plugins/base/src/main/kotlin/resolvers/external/javadoc/JavadocExternalLocationProviderFactory.kt @@ -0,0 +1,25 @@ +package org.jetbrains.dokka.base.resolvers.external.javadoc + +import org.jetbrains.dokka.base.resolvers.external.ExternalLocationProvider +import org.jetbrains.dokka.base.resolvers.external.ExternalLocationProviderFactory +import org.jetbrains.dokka.base.resolvers.external.ExternalLocationProviderFactoryWithCache +import org.jetbrains.dokka.base.resolvers.shared.ExternalDocumentationInfo +import org.jetbrains.dokka.base.resolvers.shared.RecognizedLinkFormat +import org.jetbrains.dokka.plugability.DokkaContext + +class JavadocExternalLocationProviderFactory(val context: DokkaContext) : + ExternalLocationProviderFactory by ExternalLocationProviderFactoryWithCache( + object : ExternalLocationProviderFactory { + override fun getExternalLocationProvider(docInfo: ExternalDocumentationInfo): ExternalLocationProvider? = + when (docInfo.packageList.linkFormat) { + RecognizedLinkFormat.Javadoc1 -> + JavadocExternalLocationProvider(docInfo, "()", ", ", context) // Covers JDK 1 - 7 + RecognizedLinkFormat.Javadoc8, + RecognizedLinkFormat.DokkaJavadoc -> + JavadocExternalLocationProvider(docInfo, "--", "-", context) // Covers JDK 8 - 9 + RecognizedLinkFormat.Javadoc10 -> + JavadocExternalLocationProvider(docInfo, "()", ",", context) // Covers JDK 10 + else -> null + } + } + ) \ No newline at end of file -- cgit