aboutsummaryrefslogtreecommitdiff
path: root/runners
diff options
context:
space:
mode:
Diffstat (limited to 'runners')
-rw-r--r--runners/ant/build.gradle18
-rw-r--r--runners/ant/src/main/kotlin/ant/dokka.kt210
-rw-r--r--runners/ant/src/main/resources/dokka-antlib.xml3
-rw-r--r--runners/cli/build.gradle.kts3
-rw-r--r--runners/cli/src/main/kotlin/cli/main.kt57
-rw-r--r--runners/gradle-plugin/build.gradle.kts2
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/ConfigurationExtractor.kt2
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaCollectorTask.kt8
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaSourceSetIDFactory.kt10
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaTask.kt36
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt93
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/main.kt4
-rw-r--r--runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/KotlinDslDokkaTaskConfigurationTest.kt77
-rw-r--r--runners/maven-plugin/src/main/kotlin/DokkaMojo.kt14
14 files changed, 231 insertions, 306 deletions
diff --git a/runners/ant/build.gradle b/runners/ant/build.gradle
deleted file mode 100644
index 216420c6..00000000
--- a/runners/ant/build.gradle
+++ /dev/null
@@ -1,18 +0,0 @@
-apply plugin: 'kotlin'
-
-sourceCompatibility = 1.8
-
-tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
- kotlinOptions {
- freeCompilerArgs += "-Xjsr305=strict"
- languageVersion = language_version
- apiVersion = language_version
- jvmTarget = "1.8"
- }
-}
-
-dependencies {
- compile project(":core")
- compileOnly group: 'org.apache.ant', name: 'ant', version: ant_version
-}
-
diff --git a/runners/ant/src/main/kotlin/ant/dokka.kt b/runners/ant/src/main/kotlin/ant/dokka.kt
deleted file mode 100644
index d275ed82..00000000
--- a/runners/ant/src/main/kotlin/ant/dokka.kt
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.jetbrains.dokka.ant
-
-import org.apache.tools.ant.BuildException
-import org.apache.tools.ant.Project
-import org.apache.tools.ant.Task
-import org.apache.tools.ant.types.Path
-import org.apache.tools.ant.types.Reference
-import org.jetbrains.dokka.*
-import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink
-import org.jetbrains.dokka.utilities.DokkaConsoleLogger
-import org.jetbrains.dokka.utilities.DokkaLogger
-import java.io.File
-
-class AntLogger(val task: Task): DokkaLogger {
- override var warningsCount: Int = 0
- override var errorsCount: Int = 0
- override fun debug(message: String) = task.log(message, Project.MSG_DEBUG)
- override fun info(message: String) = task.log(message, Project.MSG_VERBOSE)
- override fun progress(message: String) = task.log(message, Project.MSG_INFO)
- override fun warn(message: String) = task.log(message, Project.MSG_WARN).also { warningsCount++ }
- override fun error(message: String) = task.log(message, Project.MSG_ERR).also { errorsCount++ }
- override fun report() {
- if (warningsCount > 0 || errorsCount > 0) {
- task.log("Generation completed with $warningsCount warning" +
- (if(warningsCount == 1) "" else "s") +
- " and $errorsCount error" +
- if(errorsCount == 1) "" else "s"
- )
- } else {
- task.log("generation completed successfully")
- }
- }
-}
-
-class AntSourceLinkDefinition(var path: String? = null, var url: String? = null, var lineSuffix: String? = null)
-
-class AntSourceRoot(var path: String? = null) {
- fun toSourceRoot(): SourceRootImpl? = path?.let { path ->
- SourceRootImpl(path)
- }
-}
-
-class TextProperty(var value: String = "")
-
-class AntPassConfig(task: Task) : DokkaConfiguration.PassConfiguration {
- override var moduleName: String = ""
- override val classpath: List<String>
- get() = buildClassPath.list().toList()
-
- override val sourceRoots: List<DokkaConfiguration.SourceRoot>
- get() = sourcePath.list().map { SourceRootImpl(it) } + antSourceRoots.mapNotNull { it.toSourceRoot() }
-
- override val samples: List<String>
- get() = samplesPath.list().toList()
- override val includes: List<String>
- get() = includesPath.list().toList()
- override var includeNonPublic: Boolean = false
- override var includeRootPackage: Boolean = true
- override var reportUndocumented: Boolean = false
- override var skipEmptyPackages: Boolean = true
- override var skipDeprecated: Boolean = false
- override var jdkVersion: Int = 8
- override val sourceLinks: List<DokkaConfiguration.SourceLinkDefinition>
- get() = antSourceLinkDefinition.map {
- val path = it.path!!
- val url = it.url!!
- SourceLinkDefinitionImpl(File(path).canonicalFile.absolutePath, url, it.lineSuffix)
- }
- override val perPackageOptions: MutableList<DokkaConfiguration.PackageOptions> = mutableListOf()
- override val externalDocumentationLinks: List<ExternalDocumentationLink>
- get() = buildExternalLinksBuilders.map { it.build() } + defaultExternalDocumentationLinks
-
- override var languageVersion: String? = null
- override var apiVersion: String? = null
- override var noStdlibLink: Boolean = false
- override var noJdkLink: Boolean = false
- override var suppressedFiles: MutableList<String> = mutableListOf()
- override var collectInheritedExtensionsFromLibraries: Boolean = false
- override var analysisPlatform: Platform = Platform.DEFAULT
- override var targets: List<String> = listOf()
- get() = buildTargets.filter { it.value != "" }
- .map { it.value }
-
- override var sinceKotlin: String? = null
-
- private val samplesPath: Path by lazy { Path(task.project) }
- private val includesPath: Path by lazy { Path(task.project) }
- private val buildClassPath: Path by lazy { Path(task.project) }
- val sourcePath: Path by lazy { Path(task.project) }
- val antSourceRoots: MutableList<AntSourceRoot> = mutableListOf()
-
- private val buildTargets: MutableList<TextProperty> = mutableListOf()
- private val buildExternalLinksBuilders: MutableList<ExternalDocumentationLink.Builder> = mutableListOf()
- val antSourceLinkDefinition: MutableList<AntSourceLinkDefinition> = mutableListOf()
-
- private val defaultExternalDocumentationLinks: List<DokkaConfiguration.ExternalDocumentationLink>
- get() {
- val links = mutableListOf<DokkaConfiguration.ExternalDocumentationLink>()
- if (!noJdkLink)
- links += DokkaConfiguration.ExternalDocumentationLink.Builder("https://docs.oracle.com/javase/$jdkVersion/docs/api/").build()
-
- if (!noStdlibLink)
- links += DokkaConfiguration.ExternalDocumentationLink.Builder("https://kotlinlang.org/api/latest/jvm/stdlib/").build()
- return links
- }
-
-
- fun setSamples(ref: Path) {
- samplesPath.append(ref)
- }
-
- fun setSamplesRef(ref: Reference) {
- samplesPath.createPath().refid = ref
- }
-
- fun setInclude(ref: Path) {
- includesPath.append(ref)
- }
-
- fun setClasspath(classpath: Path) {
- buildClassPath.append(classpath)
- }
-
- fun createPackageOptions(): AntPackageOptions = AntPackageOptions().apply { perPackageOptions.add(this) }
-
- fun createSourceRoot(): AntSourceRoot = AntSourceRoot().apply { antSourceRoots.add(this) }
-
- fun createTarget(): TextProperty = TextProperty().apply {
- buildTargets.add(this)
- }
-
- fun setClasspathRef(ref: Reference) {
- buildClassPath.createPath().refid = ref
- }
-
- fun setSrc(src: Path) {
- sourcePath.append(src)
- }
-
- fun setSrcRef(ref: Reference) {
- sourcePath.createPath().refid = ref
- }
-
- fun createSourceLink(): AntSourceLinkDefinition {
- val def = AntSourceLinkDefinition()
- antSourceLinkDefinition.add(def)
- return def
- }
-
- fun createExternalDocumentationLink() =
- ExternalDocumentationLink.Builder().apply { buildExternalLinksBuilders.add(this) }
-
-}
-
-class AntPackageOptions(
- override var prefix: String = "",
- override var includeNonPublic: Boolean = false,
- override var reportUndocumented: Boolean = true,
- override var skipDeprecated: Boolean = false,
- override var suppress: Boolean = false) : DokkaConfiguration.PackageOptions
-
-class DokkaAntTask: Task(), DokkaConfiguration {
-
- override var format: String = "html"
- override var generateIndexPages: Boolean = false
- override var outputDir: String = ""
- override var impliedPlatforms: List<String> = listOf()
- get() = buildImpliedPlatforms.map { it.value }.toList()
- private val buildImpliedPlatforms: MutableList<TextProperty> = mutableListOf()
-
- override var cacheRoot: String? = null
- override val passesConfigurations: MutableList<AntPassConfig> = mutableListOf()
- override var pluginsClasspath: List<File> = mutableListOf()
-
- fun createPassConfig() = AntPassConfig(this).apply { passesConfigurations.add(this) }
- fun createImpliedPlatform(): TextProperty = TextProperty().apply { buildImpliedPlatforms.add(this) }
-
-
- override fun execute() {
- for (passConfig in passesConfigurations) {
- if (passConfig.sourcePath.list().isEmpty() && passConfig.antSourceRoots.isEmpty()) {
- throw BuildException("At least one source path needs to be specified")
- }
-
- if (passConfig.moduleName == "") {
- throw BuildException("Module name needs to be specified and not empty")
- }
-
- for (sourceLink in passConfig.antSourceLinkDefinition) {
- if (sourceLink.path == null) {
- throw BuildException("'path' attribute of a <sourceLink> element is required")
- }
- if (sourceLink.path!!.contains("\\")) {
- throw BuildException("'dir' attribute of a <sourceLink> - incorrect value, only Unix based path allowed")
- }
-
- if (sourceLink.url == null) {
- throw BuildException("'url' attribute of a <sourceLink> element is required")
- }
- }
- }
-
- if (outputDir == "") {
- throw BuildException("Output directory needs to be specified and not empty")
- }
-
- val generator = DokkaGenerator(this, AntLogger(this))
- generator.generate()
- }
-} \ No newline at end of file
diff --git a/runners/ant/src/main/resources/dokka-antlib.xml b/runners/ant/src/main/resources/dokka-antlib.xml
deleted file mode 100644
index 9c3373d5..00000000
--- a/runners/ant/src/main/resources/dokka-antlib.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<antlib>
- <taskdef name="dokka" classname="org.jetbrains.dokka.ant.DokkaAntTask"/>
-</antlib>
diff --git a/runners/cli/build.gradle.kts b/runners/cli/build.gradle.kts
index 8c4955ca..bc09f2cd 100644
--- a/runners/cli/build.gradle.kts
+++ b/runners/cli/build.gradle.kts
@@ -10,7 +10,6 @@ repositories {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-cli-jvm:0.2.1")
- implementation("com.google.code.gson:gson:2.8.5")
implementation(project(":core"))
implementation(kotlin("stdlib"))
}
@@ -36,4 +35,4 @@ publishing {
}
}
-configureBintrayPublication("dokkaCli") \ No newline at end of file
+configureBintrayPublication("dokkaCli")
diff --git a/runners/cli/src/main/kotlin/cli/main.kt b/runners/cli/src/main/kotlin/cli/main.kt
index b0fb45b2..5e5cd6b2 100644
--- a/runners/cli/src/main/kotlin/cli/main.kt
+++ b/runners/cli/src/main/kotlin/cli/main.kt
@@ -1,6 +1,5 @@
package org.jetbrains.dokka
-import com.google.gson.Gson
import kotlinx.cli.*
import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink
import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet.*
@@ -34,7 +33,7 @@ class GlobalArguments(args: Array<String>) : DokkaConfiguration {
override val sourceSets by parser.option(
ArgTypeArgument,
description = "Single dokka source set",
- fullName = "pass"
+ fullName = "sourceSet"
).multiple()
override val pluginsConfiguration by parser.option(
@@ -60,7 +59,7 @@ class GlobalArguments(args: Array<String>) : DokkaConfiguration {
val globalPackageOptions by parser.option(
ArgType.String,
- description = "List of package passConfiguration in format \"prefix,-deprecated,-privateApi,+warnUndocumented,+suppress;...\" "
+ description = "List of package source sets in format \"prefix,-deprecated,-privateApi,+warnUndocumented,+suppress;...\" "
).delimiter(";")
val globalLinks by parser.option(
@@ -73,9 +72,9 @@ class GlobalArguments(args: Array<String>) : DokkaConfiguration {
description = "Mapping between a source directory and a Web site for browsing the code (allows many paths separated by the semicolon `;`)"
).delimiter(";")
- val helpPass by parser.option(
- ArgTypeHelpPass,
- description = "Prints help for single -pass"
+ val helpSourceSet by parser.option(
+ ArgTypeHelpSourceSet,
+ description = "Prints help for single -sourceSet"
)
override val modules: List<DokkaConfiguration.DokkaModuleDescription> = emptyList()
@@ -94,8 +93,8 @@ class GlobalArguments(args: Array<String>) : DokkaConfiguration {
globalSrcLink.forEach {
if (it.isNotEmpty() && it.contains("="))
- sourceSets.all { pass ->
- pass.sourceLinks.cast<MutableList<SourceLinkDefinitionImpl>>()
+ sourceSets.all { sourceSet ->
+ sourceSet.sourceLinks.cast<MutableList<SourceLinkDefinitionImpl>>()
.add(SourceLinkDefinitionImpl.parseSourceLinkDefinition(it))
}
else {
@@ -112,9 +111,9 @@ class GlobalArguments(args: Array<String>) : DokkaConfiguration {
}
}
-fun passArguments(args: Array<String>): DokkaConfiguration.DokkaSourceSet {
+private fun parseSourceSet(args: Array<String>): DokkaConfiguration.DokkaSourceSet {
- val parser = ArgParser("passConfiguration", prefixStyle = ArgParser.OptionPrefixStyle.JVM)
+ val parser = ArgParser("sourceSet", prefixStyle = ArgParser.OptionPrefixStyle.JVM)
val moduleName by parser.option(
ArgType.String,
@@ -122,16 +121,21 @@ fun passArguments(args: Array<String>): DokkaConfiguration.DokkaSourceSet {
fullName = "module"
).required()
- val displayName by parser.option(
+ val moduleDisplayName by parser.option(
ArgType.String,
- description = "Name of the source set"
- ).default("JVM")
+ description = "Name of the documentation module"
+ )
- val sourceSetID by parser.option(
+ val name by parser.option(
ArgType.String,
- description = "ID of the source set"
+ description = "Name of the source set"
).default("main")
+ val displayName by parser.option(
+ ArgType.String,
+ description = "Displayed name of the source set"
+ ).default("JVM")
+
val classpath by parser.option(
ArgType.String,
description = "Classpath for symbol resolution (allows many paths separated by the semicolon `;`)"
@@ -213,7 +217,7 @@ fun passArguments(args: Array<String>): DokkaConfiguration.DokkaSourceSet {
val perPackageOptions by parser.option(
ArgType.String,
- description = "List of package passConfiguration in format \"prefix,-deprecated,-privateApi,+warnUndocumented,+suppress;...\" "
+ description = "List of package source set configuration in format \"prefix,-deprecated,-privateApi,+warnUndocumented,+suppress;...\" "
).delimiter(";")
val externalDocumentationLinks by parser.option(
@@ -230,12 +234,14 @@ fun passArguments(args: Array<String>): DokkaConfiguration.DokkaSourceSet {
parser.parse(args)
return object : DokkaConfiguration.DokkaSourceSet {
- override val moduleName = moduleName
+ override val moduleDisplayName = moduleDisplayName ?: moduleName
override val displayName = displayName
- override val sourceSetID = sourceSetID
+ override val sourceSetID = DokkaSourceSetID(moduleName, name)
override val classpath = classpath
override val sourceRoots = sourceRoots.map { SourceRootImpl(it.toAbsolutePath()) }
- override val dependentSourceSets: List<String> = dependentSourceSets
+ override val dependentSourceSets: Set<DokkaSourceSetID> = dependentSourceSets
+ .map { dependentSourceSetName -> DokkaSourceSetID(moduleName, dependentSourceSetName) }
+ .toSet()
override val samples = samples.map { it.toAbsolutePath() }
override val includes = includes.map { it.toAbsolutePath() }
override val includeNonPublic = includeNonPublic
@@ -294,15 +300,15 @@ object ArgTypeSourceLinkDefinition : ArgType<DokkaConfiguration.SourceLinkDefini
object ArgTypeArgument : ArgType<DokkaConfiguration.DokkaSourceSet>(true) {
override fun convert(value: kotlin.String, name: kotlin.String): DokkaConfiguration.DokkaSourceSet =
- passArguments(value.split(" ").filter { it.isNotBlank() }.toTypedArray())
+ parseSourceSet(value.split(" ").filter { it.isNotBlank() }.toTypedArray())
override val description: kotlin.String
get() = ""
}
// Workaround for printing nested parsers help
-object ArgTypeHelpPass : ArgType<Any>(false) {
- override fun convert(value: kotlin.String, name: kotlin.String): Any = Any().also { passArguments(arrayOf("-h")) }
+object ArgTypeHelpSourceSet : ArgType<Any>(false) {
+ override fun convert(value: kotlin.String, name: kotlin.String): Any = Any().also { parseSourceSet(arrayOf("-h")) }
override val description: kotlin.String
get() = ""
@@ -345,11 +351,10 @@ fun parseLinks(links: List<String>): List<ExternalDocumentationLink> {
fun main(args: Array<String>) {
val globalArguments = GlobalArguments(args)
val configuration = if (globalArguments.json != null)
- Gson().fromJson(
- Paths.get(globalArguments.json).toFile().readText(),
- DokkaConfigurationImpl::class.java
+ DokkaConfigurationImpl(
+ Paths.get(checkNotNull(globalArguments.json)).toFile().readText()
)
else
globalArguments
DokkaGenerator(configuration, DokkaConsoleLogger).generate()
-} \ No newline at end of file
+}
diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts
index 71d7e72f..2c25a707 100644
--- a/runners/gradle-plugin/build.gradle.kts
+++ b/runners/gradle-plugin/build.gradle.kts
@@ -19,6 +19,8 @@ dependencies {
compileOnly(gradleKotlinDsl())
testImplementation(gradleApi())
testImplementation(kotlin("test-junit"))
+ testImplementation("org.jetbrains.kotlin:kotlin-gradle-plugin")
+
constraints {
val kotlin_version: String by project
compileOnly("org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}") {
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/ConfigurationExtractor.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/ConfigurationExtractor.kt
index 3bd0b6ab..c9693467 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/ConfigurationExtractor.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/ConfigurationExtractor.kt
@@ -169,4 +169,4 @@ class ConfigurationExtractor(private val project: Project) {
val dependentSourceSets: List<String>,
val platform: String
) : Serializable
-} \ No newline at end of file
+}
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaCollectorTask.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaCollectorTask.kt
index ead0f90a..823206e3 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaCollectorTask.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaCollectorTask.kt
@@ -19,7 +19,7 @@ open class DokkaCollectorTask : DefaultTask() {
@TaskAction
fun collect() {
- val passesConfigurations = getProjects(project).filter { it.name in modules }.flatMap {
+ val sourceSets = getProjects(project).filter { it.name in modules }.flatMap {
val tasks = try {
it.tasks.withType(DokkaTask::class.java)
} catch (e: UnknownTaskException) {
@@ -30,11 +30,11 @@ open class DokkaCollectorTask : DefaultTask() {
val initial = GradleDokkaConfigurationImpl().apply {
outputDir = outputDirectory
- cacheRoot = passesConfigurations.first().cacheRoot
- format = passesConfigurations.first().format
+ cacheRoot = sourceSets.first().cacheRoot
+ format = sourceSets.first().format
}
- configuration = passesConfigurations.fold(initial) { acc, it: GradleDokkaConfigurationImpl ->
+ configuration = sourceSets.fold(initial) { acc, it: GradleDokkaConfigurationImpl ->
if(acc.format != it.format || acc.cacheRoot != it.cacheRoot)
throw IllegalStateException("Dokka task configurations differ on core arguments (format, cacheRoot)")
acc.sourceSets = acc.sourceSets + it.sourceSets
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaSourceSetIDFactory.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaSourceSetIDFactory.kt
new file mode 100644
index 00000000..3fadb4fd
--- /dev/null
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaSourceSetIDFactory.kt
@@ -0,0 +1,10 @@
+@file:Suppress("FunctionName")
+
+package org.jetbrains.dokka.gradle
+
+import org.gradle.api.Project
+import org.jetbrains.dokka.DokkaSourceSetID
+
+internal fun DokkaSourceSetID(project: Project, sourceSetName: String): DokkaSourceSetID {
+ return DokkaSourceSetID(moduleName = project.path, sourceSetName = sourceSetName)
+}
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaTask.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaTask.kt
index e27357c9..aac7e2a0 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaTask.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/DokkaTask.kt
@@ -7,11 +7,9 @@ import org.gradle.api.file.FileCollection
import org.gradle.api.internal.plugins.DslObject
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.*
-import org.jetbrains.dokka.DokkaBootstrap
+import org.jetbrains.dokka.*
import org.jetbrains.dokka.DokkaConfiguration.ExternalDocumentationLink.Builder
import org.jetbrains.dokka.DokkaConfiguration.SourceRoot
-import org.jetbrains.dokka.DokkaException
-import org.jetbrains.dokka.Platform
import org.jetbrains.dokka.ReflectDsl
import org.jetbrains.dokka.ReflectDsl.isNotInstance
import org.jetbrains.dokka.gradle.ConfigurationExtractor.PlatformData
@@ -183,10 +181,7 @@ open class DokkaTask : DefaultTask(), Configurable {
val defaultModulesConfiguration = configuredDokkaSourceSets
.map { configureDefault(it, globalConfig) }.takeIf { it.isNotEmpty() }
?: listOf(
- configureDefault(
- configureDokkaSourceSet(GradleDokkaSourceSet("main")),
- null
- )
+ configureDefault(configureDokkaSourceSet(GradleDokkaSourceSet("main", project)), null)
).takeIf { project.isNotMultiplatformProject() } ?: emptyList()
if (defaultModulesConfiguration.isEmpty()) {
@@ -288,28 +283,25 @@ open class DokkaTask : DefaultTask(), Configurable {
protected fun mergeUserConfigurationAndPlatformData(
userConfig: GradleDokkaSourceSet,
autoConfig: PlatformData
- ) =
- userConfig.copy().apply {
- sourceRoots.addAll(userConfig.sourceRoots.union(autoConfig.sourceRoots.toSourceRoots()).distinct())
- dependentSourceSets.addAll(userConfig.dependentSourceSets.union(autoConfig.dependentSourceSets).distinct())
- classpath = userConfig.classpath.union(autoConfig.classpath.map { it.absolutePath }).distinct()
- if (userConfig.platform == null && autoConfig.platform != "")
- platform = autoConfig.platform
- }
+ ) = userConfig.copy().apply {
+ sourceRoots.addAll(userConfig.sourceRoots.union(autoConfig.sourceRoots.toSourceRoots()).distinct())
+ dependentSourceSets.addAll(userConfig.dependentSourceSets)
+ dependentSourceSets.addAll(autoConfig.dependentSourceSets.map { DokkaSourceSetID(project, it) })
+ classpath = userConfig.classpath.union(autoConfig.classpath.map { it.absolutePath }).distinct()
+ if (userConfig.platform == null && autoConfig.platform != "")
+ platform = autoConfig.platform
+ }
protected fun configureDefault(
config: GradleDokkaSourceSet,
globalConfig: GradleDokkaSourceSet?
): GradleDokkaSourceSet {
- if (config.moduleName.isBlank()) {
- config.moduleName = project.name
+ if (config.moduleDisplayName.isBlank()) {
+ config.moduleDisplayName = project.name
}
- if (config.sourceSetID.isBlank()) {
- config.sourceSetID = config.moduleName + "/" + config.name
- }
- config.dependentSourceSets = config.dependentSourceSets.map { config.moduleName + "/" + it }.toMutableList()
+
if (config.displayName.isBlank()) {
- config.displayName = config.sourceSetID.substringBeforeLast("Main", config.platform.toString())
+ config.displayName = config.name.substringBeforeLast("Main", config.platform.toString())
}
config.classpath =
(config.classpath as List<Any>).map { it.toString() }.distinct() // Workaround for Groovy's GStringImpl
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt
index a28416d6..7b2d05a6 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/configurationImplementations.kt
@@ -1,13 +1,19 @@
+@file:Suppress("FunctionName")
+
package org.jetbrains.dokka.gradle
+import com.android.build.gradle.api.AndroidSourceSet
import groovy.lang.Closure
import org.gradle.api.Action
+import org.gradle.api.Project
import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.Optional
import org.gradle.util.ConfigureUtil
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.DokkaConfiguration.*
import org.jetbrains.dokka.DokkaDefaults
+import org.jetbrains.dokka.DokkaSourceSetID
import org.jetbrains.dokka.Platform
import java.io.File
import java.io.Serializable
@@ -15,6 +21,8 @@ import java.net.URL
import java.util.concurrent.Callable
import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.memberProperties
+import org.gradle.api.tasks.SourceSet as GradleSourceSet
+import org.jetbrains.kotlin.gradle.model.SourceSet as KotlinSourceSet
class GradleSourceRootImpl : SourceRoot, Serializable {
override var path: String = ""
@@ -25,64 +33,113 @@ class GradleSourceRootImpl : SourceRoot, Serializable {
override fun toString(): String = path
}
-open class GradleDokkaSourceSet(@Transient val name: String = "") : DokkaSourceSet {
+open class GradleDokkaSourceSet constructor(
+ @Transient val name: String,
+ @Transient internal val project: Project
+) : DokkaSourceSet {
+
@Input
@Optional
override var classpath: List<String> = emptyList()
+
@Input
- override var moduleName: String = ""
+ override var moduleDisplayName: String = ""
+
@Input
override var displayName: String = ""
- @Input
- override var sourceSetID: String = ""
+
+ @get:Internal
+ override val sourceSetID: DokkaSourceSetID = DokkaSourceSetID(project, name)
+
@Input
override var sourceRoots: MutableList<SourceRoot> = mutableListOf()
+
@Input
- override var dependentSourceSets: MutableList<String> = mutableListOf()
+ override var dependentSourceSets: MutableSet<DokkaSourceSetID> = mutableSetOf()
+
@Input
override var samples: List<String> = emptyList()
+
@Input
override var includes: List<String> = emptyList()
+
@Input
override var includeNonPublic: Boolean = DokkaDefaults.includeNonPublic
+
@Input
override var includeRootPackage: Boolean = DokkaDefaults.includeRootPackage
+
@Input
override var reportUndocumented: Boolean = DokkaDefaults.reportUndocumented
+
@Input
override var skipEmptyPackages: Boolean = DokkaDefaults.skipEmptyPackages
+
@Input
override var skipDeprecated: Boolean = DokkaDefaults.skipDeprecated
+
@Input
override var jdkVersion: Int = DokkaDefaults.jdkVersion
+
@Input
override var sourceLinks: MutableList<SourceLinkDefinition> = mutableListOf()
+
@Input
override var perPackageOptions: MutableList<PackageOptions> = mutableListOf()
+
@Input
override var externalDocumentationLinks: MutableList<ExternalDocumentationLink> = mutableListOf()
+
@Input
@Optional
override var languageVersion: String? = null
+
@Input
@Optional
override var apiVersion: String? = null
+
@Input
override var noStdlibLink: Boolean = DokkaDefaults.noStdlibLink
+
@Input
override var noJdkLink: Boolean = DokkaDefaults.noJdkLink
+
@Input
var noAndroidSdkLink: Boolean = false
+
@Input
override var suppressedFiles: List<String> = emptyList()
+
@Input
override var analysisPlatform: Platform = DokkaDefaults.analysisPlatform
+
@Input
@Optional
var platform: String? = null
+
@Transient
var collectKotlinTasks: (() -> List<Any?>?)? = null
+ fun DokkaSourceSetID(sourceSetName: String): DokkaSourceSetID {
+ return DokkaSourceSetID(project, sourceSetName)
+ }
+
+ fun dependsOn(sourceSet: GradleSourceSet) {
+ dependsOn(DokkaSourceSetID(sourceSet.name))
+ }
+
+ fun dependsOn(sourceSet: DokkaSourceSet) {
+ dependsOn(sourceSet.sourceSetID)
+ }
+
+ fun dependsOn(sourceSetName: String) {
+ dependsOn(DokkaSourceSetID(sourceSetName))
+ }
+
+ fun dependsOn(sourceSetID: DokkaSourceSetID) {
+ dependentSourceSets.add(sourceSetID)
+ }
+
fun kotlinTasks(taskSupplier: Callable<List<Any>>) {
collectKotlinTasks = { taskSupplier.call() }
}
@@ -136,6 +193,18 @@ open class GradleDokkaSourceSet(@Transient val name: String = "") : DokkaSourceS
}
}
+fun GradleDokkaSourceSet.dependsOn(sourceSet: KotlinSourceSet) {
+ dependsOn(DokkaSourceSetID(sourceSet.name))
+}
+
+fun GradleDokkaSourceSet.dependsOn(sourceSet: org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet) {
+ dependsOn(DokkaSourceSetID(sourceSet.name))
+}
+
+fun GradleDokkaSourceSet.dependsOn(sourceSet: AndroidSourceSet) {
+ dependsOn(DokkaSourceSetID(sourceSet.name))
+}
+
class GradleSourceLinkDefinitionImpl : SourceLinkDefinition, Serializable {
override var path: String = ""
override var url: String = ""
@@ -174,16 +243,16 @@ class GradlePackageOptionsImpl : PackageOptions, Serializable {
}
internal fun GradleDokkaSourceSet.copy(): GradleDokkaSourceSet {
- val newObj = GradleDokkaSourceSet(this.name)
+ val newObj = GradleDokkaSourceSet(this.name, this.project)
this::class.memberProperties.forEach { field ->
if (field is KMutableProperty<*>) {
- val value = field.getter.call(this)
- if (value is Collection<*>) {
- field.setter.call(newObj, value.toMutableList())
- } else {
- field.setter.call(newObj, field.getter.call(this))
+ when (val value = field.getter.call(this)) {
+ is List<*> -> field.setter.call(newObj, value.toMutableList())
+ is Set<*> -> field.setter.call(newObj, value.toMutableSet())
+ else -> field.setter.call(newObj, field.getter.call(this))
}
+
}
}
return newObj
-} \ No newline at end of file
+}
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/main.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/main.kt
index 92d63a40..a92f5475 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/main.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/main.kt
@@ -53,7 +53,9 @@ open class DokkaPlugin : Plugin<Project> {
project.tasks.create(DOKKA_TASK_NAME, taskClass)
}
project.tasks.withType(taskClass) { task ->
- task.dokkaSourceSets = project.container(GradleDokkaSourceSet::class.java)
+ task.dokkaSourceSets = project.container(GradleDokkaSourceSet::class.java) { name ->
+ GradleDokkaSourceSet(name, project)
+ }
task.dokkaRuntime = runtimeConfiguration
task.pluginsClasspathConfiguration = pluginsConfiguration
task.outputDirectory = File(project.buildDir, DOKKA_TASK_NAME).absolutePath
diff --git a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/KotlinDslDokkaTaskConfigurationTest.kt b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/KotlinDslDokkaTaskConfigurationTest.kt
index 0b80f4a2..da6daeea 100644
--- a/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/KotlinDslDokkaTaskConfigurationTest.kt
+++ b/runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/KotlinDslDokkaTaskConfigurationTest.kt
@@ -1,6 +1,9 @@
package org.jetbrains.dokka.gradle
+import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.testfixtures.ProjectBuilder
+import org.jetbrains.dokka.DokkaSourceSetID
+import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -16,4 +19,78 @@ class KotlinDslDokkaTaskConfigurationTest {
assertEquals("test", dokkaTask.outputFormat)
}
}
+
+ @Test
+ fun `sourceSet dependsOn by String`() {
+ val project = ProjectBuilder.builder().build()
+ project.plugins.apply("org.jetbrains.dokka")
+
+ project.dokka {
+ dokkaSourceSets.run {
+ val commonMain = create("commonMain")
+ val jvmMain = create("jvmMain") {
+ it.dependsOn("commonMain")
+ }
+
+ assertEquals(
+ 0, commonMain.dependentSourceSets.size,
+ "Expected no dependent source set in commonMain"
+ )
+
+ assertEquals(
+ 1, jvmMain.dependentSourceSets.size,
+ "Expected only one dependent source set in jvmMain"
+ )
+
+ assertEquals(
+ commonMain.sourceSetID, jvmMain.dependentSourceSets.single(),
+ "Expected jvmMain to depend on commonMain"
+ )
+
+ assertEquals(
+ DokkaSourceSetID(project.path, "commonMain"), commonMain.sourceSetID
+ )
+ }
+ }
+ }
+
+ @Test
+ fun `sourceSet dependsOn by DokkaSourceSet`() {
+ val project = ProjectBuilder.builder().build()
+ project.plugins.apply("org.jetbrains.dokka")
+
+ project.dokka {
+ dokkaSourceSets.run {
+ val commonMain = create("commonMain")
+ val jvmMain = create("jvmMain") {
+ it.dependsOn(commonMain)
+ }
+
+ assertEquals(
+ commonMain.sourceSetID, jvmMain.dependentSourceSets.single()
+ )
+ }
+ }
+ }
+
+ @Test
+ fun `sourceSet dependsOn by KotlinSourceSet`() {
+ val project = ProjectBuilder.builder().build()
+ project.plugins.apply("org.jetbrains.dokka")
+ project.plugins.apply("org.jetbrains.kotlin.jvm")
+
+ val kotlin = project.extensions.getByName("kotlin") as KotlinJvmProjectExtension
+
+ project.dokka {
+ dokkaSourceSets.run {
+ val special = create("special") {
+ it.dependsOn(kotlin.sourceSets.getByName("main"))
+ }
+
+ assertEquals(
+ DokkaSourceSetID(project, "main"), special.dependentSourceSets.single()
+ )
+ }
+ }
+ }
}
diff --git a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
index 4c10568c..8160ab87 100644
--- a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
+++ b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
@@ -91,9 +91,6 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
var sourceRoots: List<SourceRoot> = emptyList()
@Parameter
- var dependentSourceSets: List<String> = emptyList()
-
- @Parameter
var samples: List<String> = emptyList()
@Parameter
@@ -108,6 +105,9 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
@Parameter(required = true, defaultValue = "\${project.artifactId}")
var moduleName: String = ""
+ @Parameter
+ var moduleDisplayName: String = ""
+
@Parameter(required = false, defaultValue = "false")
var skip: Boolean = false
@@ -201,12 +201,12 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
}
val sourceSet = DokkaSourceSetImpl(
- moduleName = moduleName,
+ moduleDisplayName = moduleDisplayName.takeIf(String::isNotBlank) ?: moduleName,
displayName = displayName,
- sourceSetID = sourceSetName,
+ sourceSetID = DokkaSourceSetID(moduleName, sourceSetName),
classpath = classpath,
sourceRoots = sourceDirectories.map { SourceRootImpl(it) },
- dependentSourceSets = dependentSourceSets,
+ dependentSourceSets = emptySet(),
samples = samples,
includes = includes,
includeNonPublic = includeNonPublic,
@@ -246,7 +246,7 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
offlineMode = offlineMode,
cacheRoot = cacheRoot,
sourceSets = listOf(sourceSet).also {
- if (sourceSet.moduleName.isEmpty()) logger.warn("Not specified module name. It can result in unexpected behaviour while including documentation for module")
+ if (sourceSet.moduleDisplayName.isEmpty()) logger.warn("Not specified module name. It can result in unexpected behaviour while including documentation for module")
},
pluginsClasspath = getArtifactByAether("org.jetbrains.dokka", "dokka-base", dokkaVersion) +
dokkaPlugins.map { getArtifactByAether(it.groupId, it.artifactId, it.version) }.flatten(),