Skip to content

Commit

Permalink
Convert interfaces to functional (#2360)
Browse files Browse the repository at this point in the history
  • Loading branch information
Goooler committed Feb 15, 2022
1 parent b0244f6 commit 2372302
Show file tree
Hide file tree
Showing 26 changed files with 55 additions and 71 deletions.
2 changes: 1 addition & 1 deletion core/src/main/kotlin/configuration.kt
Expand Up @@ -61,7 +61,7 @@ enum class Platform(val key: String) {
}
}

interface DokkaConfigurationBuilder<T : Any> {
fun interface DokkaConfigurationBuilder<T : Any> {
fun build(): T
}

Expand Down
2 changes: 1 addition & 1 deletion core/src/main/kotlin/plugability/DokkaContext.kt
Expand Up @@ -43,7 +43,7 @@ interface DokkaContext {
inline fun <reified T : DokkaPlugin> DokkaContext.plugin(): T = plugin(T::class)
?: throw java.lang.IllegalStateException("Plugin ${T::class.qualifiedName} is not present in context.")

interface DokkaContextConfiguration {
fun interface DokkaContextConfiguration {
fun installExtension(extension: Extension<*, *, *>)
}

Expand Down
2 changes: 1 addition & 1 deletion core/src/main/kotlin/renderers/PostAction.kt
@@ -1,3 +1,3 @@
package org.jetbrains.dokka.renderers

interface PostAction : () -> Unit
fun interface PostAction : () -> Unit
2 changes: 1 addition & 1 deletion core/src/main/kotlin/renderers/Renderer.kt
Expand Up @@ -2,6 +2,6 @@ package org.jetbrains.dokka.renderers

import org.jetbrains.dokka.pages.RootPageNode

interface Renderer {
fun interface Renderer {
fun render(root: RootPageNode)
}
Expand Up @@ -3,6 +3,6 @@ package org.jetbrains.dokka.transformers.documentation
import org.jetbrains.dokka.model.DModule
import org.jetbrains.dokka.plugability.DokkaContext

interface DocumentableMerger {
fun interface DocumentableMerger {
operator fun invoke(modules: Collection<DModule>): DModule?
}
Expand Up @@ -4,6 +4,6 @@ import org.jetbrains.dokka.model.DModule
import org.jetbrains.dokka.pages.ModulePageNode
import org.jetbrains.dokka.pages.RootPageNode

interface DocumentableToPageTranslator {
fun interface DocumentableToPageTranslator {
operator fun invoke(module: DModule): RootPageNode
}
Expand Up @@ -4,6 +4,6 @@ import org.jetbrains.dokka.model.DModule
import org.jetbrains.dokka.model.Documentable
import org.jetbrains.dokka.plugability.DokkaContext

interface DocumentableTransformer {
fun interface DocumentableTransformer {
operator fun invoke(original: DModule, context: DokkaContext): DModule
}
2 changes: 1 addition & 1 deletion core/src/main/kotlin/transformers/pages/PageTransformer.kt
Expand Up @@ -2,6 +2,6 @@ package org.jetbrains.dokka.transformers.pages

import org.jetbrains.dokka.pages.RootPageNode

interface PageTransformer {
fun interface PageTransformer {
operator fun invoke(input: RootPageNode): RootPageNode
}
Expand Up @@ -3,17 +3,11 @@ package org.jetbrains.dokka.transformers.pages
import org.jetbrains.dokka.pages.PageNode
import org.jetbrains.dokka.pages.RootPageNode

fun pageScanner(block: PageNode.() -> Unit) = object : PageTransformer {
override fun invoke(input: RootPageNode): RootPageNode = input.invokeOnAll(block) as RootPageNode
}
fun pageScanner(block: PageNode.() -> Unit) = PageTransformer { input -> input.invokeOnAll(block) as RootPageNode }

fun pageMapper(block: PageNode.() -> PageNode) = object : PageTransformer {
override fun invoke(input: RootPageNode): RootPageNode = input.alterChildren(block) as RootPageNode
}
fun pageMapper(block: PageNode.() -> PageNode) = PageTransformer { input -> input.alterChildren(block) as RootPageNode }

fun pageStructureTransformer(block: RootPageNode.() -> RootPageNode) = object : PageTransformer {
override fun invoke(input: RootPageNode): RootPageNode = block(input)
}
fun pageStructureTransformer(block: RootPageNode.() -> RootPageNode) = PageTransformer { input -> block(input) }

fun PageNode.invokeOnAll(block: PageNode.() -> Unit): PageNode =
this.also(block).also { it.children.forEach { it.invokeOnAll(block) } }
Expand Down
Expand Up @@ -4,6 +4,6 @@ import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet
import org.jetbrains.dokka.model.DModule
import org.jetbrains.dokka.plugability.DokkaContext

interface SourceToDocumentableTranslator {
fun interface SourceToDocumentableTranslator {
fun invoke(sourceSet: DokkaSourceSet, context: DokkaContext): DModule
}
2 changes: 1 addition & 1 deletion core/src/main/kotlin/validity/PreGenerationChecker.kt
@@ -1,6 +1,6 @@
package org.jetbrains.dokka.validity

interface PreGenerationChecker : () -> PreGenerationCheckerOutput {
fun interface PreGenerationChecker : () -> PreGenerationCheckerOutput {

override fun invoke(): PreGenerationCheckerOutput
}
Expand Down
@@ -1,21 +1,19 @@
package org.jetbrains.dokka.base.resolvers.external

import org.jetbrains.dokka.base.resolvers.shared.ExternalDocumentation
import org.jetbrains.dokka.base.resolvers.shared.RecognizedLinkFormat
import org.jetbrains.dokka.plugability.DokkaContext

class DefaultExternalLocationProviderFactory(val context: DokkaContext) :
ExternalLocationProviderFactory by ExternalLocationProviderFactoryWithCache(
object : ExternalLocationProviderFactory {
override fun getExternalLocationProvider(doc: ExternalDocumentation): ExternalLocationProvider? =
when (doc.packageList.linkFormat) {
RecognizedLinkFormat.KotlinWebsite,
RecognizedLinkFormat.KotlinWebsiteHtml,
RecognizedLinkFormat.DokkaOldHtml -> Dokka010ExternalLocationProvider(doc, ".html", context)
RecognizedLinkFormat.DokkaHtml -> DefaultExternalLocationProvider(doc, ".html", context)
RecognizedLinkFormat.DokkaGFM,
RecognizedLinkFormat.DokkaJekyll -> DefaultExternalLocationProvider(doc, ".md", context)
else -> null
}
{ doc ->
when (doc.packageList.linkFormat) {
RecognizedLinkFormat.KotlinWebsite,
RecognizedLinkFormat.KotlinWebsiteHtml,
RecognizedLinkFormat.DokkaOldHtml -> Dokka010ExternalLocationProvider(doc, ".html", context)
RecognizedLinkFormat.DokkaHtml -> DefaultExternalLocationProvider(doc, ".html", context)
RecognizedLinkFormat.DokkaGFM,
RecognizedLinkFormat.DokkaJekyll -> DefaultExternalLocationProvider(doc, ".md", context)
else -> null
}
}
)
Expand Up @@ -5,7 +5,7 @@ import org.jetbrains.dokka.links.DRI
/**
* Provides the path to the page documenting a [DRI] in an external documentation source
*/
interface ExternalLocationProvider {
fun interface ExternalLocationProvider {
/**
* @return Path to the page containing the [dri] or null if the path cannot be created
* (eg. when the package-list does not contain [dri]'s package)
Expand Down
Expand Up @@ -2,6 +2,6 @@ package org.jetbrains.dokka.base.resolvers.external

import org.jetbrains.dokka.base.resolvers.shared.ExternalDocumentation

interface ExternalLocationProviderFactory {
fun interface ExternalLocationProviderFactory {
fun getExternalLocationProvider(doc: ExternalDocumentation): ExternalLocationProvider?
}
Expand Up @@ -3,32 +3,29 @@ package org.jetbrains.dokka.base.resolvers.external.javadoc
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.androidSdk
import org.jetbrains.dokka.androidX
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.ExternalDocumentation
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(doc: ExternalDocumentation): ExternalLocationProvider? =
when (doc.packageList.url) {
DokkaConfiguration.ExternalDocumentationLink.androidX().packageListUrl,
DokkaConfiguration.ExternalDocumentationLink.androidSdk().packageListUrl ->
AndroidExternalLocationProvider(doc, context)
else ->
when (doc.packageList.linkFormat) {
RecognizedLinkFormat.Javadoc1 ->
JavadocExternalLocationProvider(doc, "()", ", ", context) // Covers JDK 1 - 7
RecognizedLinkFormat.Javadoc8 ->
JavadocExternalLocationProvider(doc, "--", "-", context) // Covers JDK 8 - 9
RecognizedLinkFormat.Javadoc10,
RecognizedLinkFormat.DokkaJavadoc ->
JavadocExternalLocationProvider(doc, "()", ",", context) // Covers JDK 10
else -> null
}
}
{ doc ->
when (doc.packageList.url) {
DokkaConfiguration.ExternalDocumentationLink.androidX().packageListUrl,
DokkaConfiguration.ExternalDocumentationLink.androidSdk().packageListUrl ->
AndroidExternalLocationProvider(doc, context)
else ->
when (doc.packageList.linkFormat) {
RecognizedLinkFormat.Javadoc1 ->
JavadocExternalLocationProvider(doc, "()", ", ", context) // Covers JDK 1 - 7
RecognizedLinkFormat.Javadoc8 ->
JavadocExternalLocationProvider(doc, "--", "-", context) // Covers JDK 8 - 9
RecognizedLinkFormat.Javadoc10,
RecognizedLinkFormat.DokkaJavadoc ->
JavadocExternalLocationProvider(doc, "()", ",", context) // Covers JDK 10
else -> null
}
}
}
)
Expand Up @@ -2,6 +2,6 @@ package org.jetbrains.dokka.base.resolvers.local

import org.jetbrains.dokka.pages.RootPageNode

interface LocationProviderFactory {
fun interface LocationProviderFactory {
fun getLocationProvider(pageNode: RootPageNode): LocationProvider
}
Expand Up @@ -3,6 +3,6 @@ package org.jetbrains.dokka.base.signatures
import org.jetbrains.dokka.model.Documentable
import org.jetbrains.dokka.pages.ContentNode

interface SignatureProvider {
fun interface SignatureProvider {
fun signature(documentable: Documentable): List<ContentNode>
}
Expand Up @@ -2,7 +2,7 @@ package org.jetbrains.dokka.base.transformers.pages.merger

import org.jetbrains.dokka.pages.PageNode

interface PageMergerStrategy {
fun interface PageMergerStrategy {

fun tryMerge(pages: List<PageNode>, path: List<String>): List<PageNode>

Expand Down
Expand Up @@ -7,6 +7,6 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
/**
* Service translating [ClassDescriptor]s of symbols defined outside of documented project to [DClasslike]s.
*/
interface ExternalClasslikesTranslator {
fun interface ExternalClasslikesTranslator {
fun translateClassDescriptor(descriptor: ClassDescriptor, sourceSet: DokkaSourceSet): DClasslike
}
Expand Up @@ -11,7 +11,7 @@ import org.jetbrains.dokka.model.DClasslike
* in the project itself but are somehow related to the symbols defined in the documented project (e.g. are supertypes
* of classes defined in project).
*/
interface ExternalDocumentablesProvider {
fun interface ExternalDocumentablesProvider {

/**
* Returns [DClasslike] matching provided [DRI] in specified source set.
Expand Down
Expand Up @@ -30,7 +30,7 @@ import org.jsoup.nodes.Node
import org.jsoup.nodes.TextNode
import java.util.*

interface JavaDocumentationParser {
fun interface JavaDocumentationParser {
fun parseDocumentation(element: PsiNamedElement): DocumentationNode
}

Expand Down
Expand Up @@ -22,7 +22,7 @@ interface WithJavadocExtra<T : Documentable> : WithExtraProperties<T> {
throw IllegalStateException("Merging extras is not applicable for javadoc")
}

interface WithNavigable {
fun interface WithNavigable {
fun getAllNavigables(): List<NavigableJavadocNode>
}

Expand Down
Expand Up @@ -11,7 +11,7 @@ import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.utilities.urlEncoded
import java.io.File

interface VersionsNavigationCreator {
fun interface VersionsNavigationCreator {
operator fun invoke(output: File): String
}

Expand Down
Expand Up @@ -8,7 +8,7 @@ import java.io.File
* @see NoCopy
* @see CompactInParent
*/
interface DokkaMultiModuleFileLayout {
fun interface DokkaMultiModuleFileLayout {

/**
* @param parent: The [DokkaMultiModuleTask] that is initiating a composite documentation run
Expand All @@ -24,7 +24,6 @@ interface DokkaMultiModuleFileLayout {
object NoCopy : DokkaMultiModuleFileLayout {
override fun targetChildOutputDirectory(parent: DokkaMultiModuleTask, child: AbstractDokkaTask): File =
child.outputDirectory.getSafe()

}

/**
Expand Down
Expand Up @@ -105,10 +105,8 @@ class DokkaMultiModuleFileLayoutTest {
val project = ProjectBuilder.builder().build()
val childTask = project.tasks.create<DokkaTask>("child")
val parentTask = project.tasks.create<DokkaMultiModuleTask>("parent")
parentTask.fileLayout by object : DokkaMultiModuleFileLayout {
override fun targetChildOutputDirectory(parent: DokkaMultiModuleTask, child: AbstractDokkaTask): File {
return child.outputDirectory.getSafe().resolve("subfolder")
}
parentTask.fileLayout by DokkaMultiModuleFileLayout { _, child ->
child.outputDirectory.getSafe().resolve("subfolder")
}
assertFailsWith<DokkaException> { parentTask.copyChildOutputDirectory(childTask) }
}
Expand Down
Expand Up @@ -201,10 +201,8 @@ class DokkaMultiModuleTaskTest {
val childTask = child.tasks.create<DokkaTask>("child")

parentTask.addChildTask(childTask)
parentTask.fileLayout by object : DokkaMultiModuleFileLayout {
override fun targetChildOutputDirectory(parent: DokkaMultiModuleTask, child: AbstractDokkaTask): File {
return parent.project.buildDir.resolve(child.name)
}
parentTask.fileLayout by DokkaMultiModuleFileLayout { parent, child ->
parent.project.buildDir.resolve(child.name)
}

assertEquals(
Expand Down

0 comments on commit 2372302

Please sign in to comment.