diff options
-rw-r--r-- | dokka-gradle-plugin/src/main/kotlin/main.kt | 94 |
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 { |