aboutsummaryrefslogtreecommitdiff
path: root/dokka-gradle-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'dokka-gradle-plugin')
-rw-r--r--dokka-gradle-plugin/src/main/kotlin/main.kt94
1 files changed, 53 insertions, 41 deletions
diff --git a/dokka-gradle-plugin/src/main/kotlin/main.kt b/dokka-gradle-plugin/src/main/kotlin/main.kt
index e56b2371..28600a6b 100644
--- a/dokka-gradle-plugin/src/main/kotlin/main.kt
+++ b/dokka-gradle-plugin/src/main/kotlin/main.kt
@@ -4,10 +4,10 @@ import groovy.lang.Closure
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
+import org.gradle.api.file.FileCollection
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPluginConvention
-import org.gradle.api.tasks.SourceSet
-import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.*
import org.jetbrains.dokka.DokkaGenerator
import org.jetbrains.dokka.SourceLinkDefinition
import java.io.File
@@ -15,11 +15,10 @@ import java.util.ArrayList
public open class DokkaPlugin : Plugin<Project> {
override fun apply(project: Project) {
- val ext = project.extensions.create("dokka", DokkaExtension::class.java)
- project.tasks.create("dokka", DokkaTask::class.java)
-
- ext.moduleName = project.name
- ext.outputDirectory = File(project.buildDir, "dokka").absolutePath
+ project.tasks.create("dokka", DokkaTask::class.java).apply {
+ moduleName = project.name
+ outputDirectory = File(project.buildDir, "dokka").absolutePath
+ }
}
}
@@ -29,18 +28,43 @@ public open class DokkaTask : DefaultTask() {
description = "Generates dokka documentation for Kotlin"
}
+ @Input
+ var moduleName: String = ""
+ @Input
+ var outputFormat: String = "html"
+ var outputDirectory: String = ""
+ @Input
+ var processConfigurations: ArrayList<String> = arrayListOf("compile")
+ @Input
+ var includes: ArrayList<String> = arrayListOf()
+ @Input
+ var linkMappings: ArrayList<LinkMapping> = arrayListOf()
+ @Input
+ var samples: ArrayList<String> = arrayListOf()
+
+ fun linkMapping(closure: Closure<Any?>) {
+ val mapping = LinkMapping()
+ closure.delegate = mapping
+ closure.call()
+
+ if (mapping.dir.isEmpty()) {
+ throw IllegalArgumentException("Link mapping should have dir")
+ }
+ if (mapping.url.isEmpty()) {
+ throw IllegalArgumentException("Link mapping should have url")
+ }
+
+ linkMappings.add(mapping)
+ }
+
@TaskAction
fun generate() {
val project = project
- val conf = project.extensions.getByType(DokkaExtension::class.java)
- val javaPluginConvention = project.convention.getPlugin(JavaPluginConvention::class.java)
-
- val sourceSets = javaPluginConvention.sourceSets?.findByName(SourceSet.MAIN_SOURCE_SET_NAME)
- val sourceDirectories = sourceSets?.allSource?.srcDirs?.filter { it.exists() } ?: emptyList()
+ val sourceDirectories = getSourceDirectories()
val allConfigurations = project.configurations
val classpath =
- conf.processConfigurations
+ processConfigurations
.map { allConfigurations?.getByName(it) ?: throw IllegalArgumentException("No configuration $it found") }
.flatMap { it }
@@ -53,41 +77,29 @@ public open class DokkaTask : DefaultTask() {
DokkaGradleLogger(logger),
classpath.map { it.absolutePath },
sourceDirectories.map { it.absolutePath },
- conf.samples,
- conf.includes,
- conf.moduleName,
- conf.outputDirectory,
- conf.outputFormat,
- conf.linkMappings.map { SourceLinkDefinition(project.file(it.dir).absolutePath, it.url, it.suffix) },
+ samples,
+ includes,
+ moduleName,
+ outputDirectory,
+ outputFormat,
+ linkMappings.map { SourceLinkDefinition(project.file(it.dir).absolutePath, it.url, it.suffix) },
false
).generate()
}
-}
-
-public open class DokkaExtension {
- var moduleName: String = ""
- var outputFormat: String = "html"
- var outputDirectory: String = ""
- var processConfigurations: ArrayList<String> = arrayListOf("compile")
- var includes: ArrayList<String> = arrayListOf()
- var linkMappings: ArrayList<LinkMapping> = arrayListOf()
- var samples: ArrayList<String> = arrayListOf()
+ fun getSourceDirectories(): List<File> {
+ val javaPluginConvention = project.convention.getPlugin(JavaPluginConvention::class.java)
+ val sourceSets = javaPluginConvention.sourceSets?.findByName(SourceSet.MAIN_SOURCE_SET_NAME)
+ return sourceSets?.allSource?.srcDirs?.filter { it.exists() } ?: emptyList()
+ }
- fun linkMapping(closure: Closure<Any?>) {
- val mapping = LinkMapping()
- closure.delegate = mapping
- closure.call()
+ @InputFiles
+ @SkipWhenEmpty
+ fun getIncludedFiles() : FileCollection = project.files(getSourceDirectories().map { project.fileTree(it) })
- if (mapping.dir.isEmpty()) {
- throw IllegalArgumentException("Link mapping should have dir")
- }
- if (mapping.url.isEmpty()) {
- throw IllegalArgumentException("Link mapping should have url")
- }
+ @OutputDirectory
+ fun getOutputDirectoryAsFile() : File = project.file(outputDirectory)
- linkMappings.add(mapping)
- }
}
public open class LinkMapping {