package org.jetbrains.dokka.gradle import groovy.lang.Closure import org.gradle.api.Action import org.gradle.util.ConfigureUtil import org.jetbrains.dokka.DokkaConfiguration import org.jetbrains.dokka.Platform import org.jetbrains.dokka.SourceLinkDefinitionImpl import java.io.File import java.io.Serializable import java.net.URL class GradleSourceRootImpl: DokkaConfiguration.SourceRoot, Serializable{ override var path: String = "" set(value) { field = File(value).absolutePath } override fun toString(): String = path } open class GradlePassConfigurationImpl(@Transient val name: String = ""): DokkaConfiguration.PassConfiguration { override var classpath: List = emptyList() override var moduleName: String = "" override var sourceRoots: MutableList = mutableListOf() override var samples: List = emptyList() override var includes: List = emptyList() override var includeNonPublic: Boolean = false override var includeRootPackage: Boolean = false override var reportUndocumented: Boolean = false override var skipEmptyPackages: Boolean = false override var skipDeprecated: Boolean = false override var jdkVersion: Int = 6 override var sourceLinks: MutableList = mutableListOf() override var perPackageOptions: MutableList = mutableListOf() override var externalDocumentationLinks: MutableList = mutableListOf() override var languageVersion: String? = null override var apiVersion: String? = null override var noStdlibLink: Boolean = false override var noJdkLink: Boolean = false override var suppressedFiles: List = emptyList() override var collectInheritedExtensionsFromLibraries: Boolean = false override var analysisPlatform: Platform = Platform.DEFAULT override var targets: List = listOf("JVM") override var sinceKotlin: String = "1.0" fun sourceRoot(c: Closure){ val configured = ConfigureUtil.configure(c, GradleSourceRootImpl()) sourceRoots.add(configured) } fun sourceRoot(action: Action){ val sourceRoot = GradleSourceRootImpl() action.execute(sourceRoot) sourceRoots.add(sourceRoot) } fun sourceLink(c: Closure){ val configured = ConfigureUtil.configure(c, GradleSourceLinkDefinitionImpl()) sourceLinks.add(configured) } fun sourceLink(action: Action){ val sourceLink = GradleSourceLinkDefinitionImpl() action.execute(sourceLink) sourceLinks.add(sourceLink) } fun perPackageOption(c: Closure){ val configured = ConfigureUtil.configure(c, GradlePackageOptionsImpl()) perPackageOptions.add(configured) } fun perPackageOption(action: Action){ val option = GradlePackageOptionsImpl() action.execute(option) perPackageOptions.add(option) } fun externalDocumentationLink(c: Closure){ val link = ConfigureUtil.configure(c, GradleExternalDocumentationLinkImpl()) externalDocumentationLinks.add(link) } fun externalDocumentationLink(action: Action){ val link = GradleExternalDocumentationLinkImpl() action.execute(link) externalDocumentationLinks.add(link) } } class GradleSourceLinkDefinitionImpl : DokkaConfiguration.SourceLinkDefinition { override var path: String = "" override var url: String = "" override var lineSuffix: String? = null companion object { fun parseSourceLinkDefinition(srcLink: String): SourceLinkDefinitionImpl { val (path, urlAndLine) = srcLink.split('=') return SourceLinkDefinitionImpl( File(path).canonicalPath, urlAndLine.substringBefore("#"), urlAndLine.substringAfter("#", "").let { if (it.isEmpty()) null else "#$it" }) } } } class GradleExternalDocumentationLinkImpl : DokkaConfiguration.ExternalDocumentationLink { override var url: URL = URL("") override var packageListUrl: URL = URL("") } class GradleDokkaConfigurationImpl: DokkaConfiguration { override var outputDir: String = "" override var format: String = "html" override var generateIndexPages: Boolean = false override var cacheRoot: String? = null override var impliedPlatforms: List = emptyList() override var passesConfigurations: List = emptyList() } class GradlePackageOptionsImpl: DokkaConfiguration.PackageOptions { override var prefix: String = "" override val includeNonPublic: Boolean = false override val reportUndocumented: Boolean = true override val skipDeprecated: Boolean = true override val suppress: Boolean = false }