diff --git a/kobalt/src/Build.kt b/kobalt/src/Build.kt index 1f256e14..d8ecc25b 100644 --- a/kobalt/src/Build.kt +++ b/kobalt/src/Build.kt @@ -3,11 +3,8 @@ import com.beust.kobalt.* import com.beust.kobalt.api.* import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.plugin.application.application -import com.beust.kobalt.plugin.dokka.* -import com.beust.kobalt.plugin.java.javaCompiler -import com.beust.kobalt.plugin.java.javaProject -import com.beust.kobalt.plugin.kotlin.kotlinCompiler -import com.beust.kobalt.plugin.kotlin.kotlinProject +import com.beust.kobalt.plugin.java.* +import com.beust.kobalt.plugin.kotlin.* import com.beust.kobalt.plugin.packaging.assemble import com.beust.kobalt.plugin.publish.github import com.beust.kobalt.plugin.publish.jcenter diff --git a/src/main/kotlin/com/beust/kobalt/plugin/dokka/DokkaPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/dokka/DokkaPlugin.kt deleted file mode 100644 index 1c107247..00000000 --- a/src/main/kotlin/com/beust/kobalt/plugin/dokka/DokkaPlugin.kt +++ /dev/null @@ -1,103 +0,0 @@ -package com.beust.kobalt.plugin.dokka - -import com.beust.kobalt.TaskResult -import com.beust.kobalt.api.ConfigsPlugin -import com.beust.kobalt.api.Kobalt -import com.beust.kobalt.api.Project -import com.beust.kobalt.api.annotation.Directive -import com.beust.kobalt.api.annotation.Task -import com.beust.kobalt.misc.KobaltLogger -import com.beust.kobalt.misc.log -import com.beust.kobalt.plugin.packaging.PackagingPlugin -import org.jetbrains.dokka.DokkaGenerator -import org.jetbrains.dokka.DokkaLogger -import org.jetbrains.dokka.SourceLinkDefinition -import java.util.* -import javax.inject.Singleton - -@Singleton -class DokkaPlugin : ConfigsPlugin() { - override val name = PLUGIN_NAME - - companion object { - const val PLUGIN_NAME = "Dokka" - } - - /** - * Probably no point in running this task if "assemble" hasn't completed so we're running after. - */ - @Task(name = "dokka", description = "Run dokka", runAfter = arrayOf(PackagingPlugin.TASK_ASSEMBLE)) - fun taskDokka(project: Project) : TaskResult { - val configs = configurationFor(project) - val classpath = context.dependencyManager.calculateDependencies(project, context) - val buildDir = project.buildDirectory!! - val classpathList = classpath.map { it.jarFile.get().absolutePath } + listOf(buildDir) - var success = true - configs.forEach { config -> - if (!config.skip) { - val outputDir = buildDir + "/" + - if (config.outputDir.isBlank()) "doc" else config.outputDir - - val gen = DokkaGenerator( - KobaltDokkaLogger { success = false }, - classpathList, - project.sourceDirectories.toList(), - config.samplesDirs, - config.includeDirs, - config.moduleName, - outputDir, - config.outputFormat, - config.sourceLinks.map { SourceLinkDefinition(it.dir, it.url, it.urlSuffix) } - ) - gen.generate() - log(2, "Documentation generated in $outputDir") - } else { - log(2, "skip is true, not generating the documentation") - } - } - return TaskResult(success) - } -} - -class KobaltDokkaLogger(val onErrorCallback: () -> Unit = {}) : DokkaLogger { - override fun error(message: String) { - KobaltLogger.logger.error("Dokka", message) - onErrorCallback() - } - - override fun info(message: String) { - KobaltLogger.logger.log(2, message) - } - - override fun warn(message: String) { - KobaltLogger.logger.warn("Dokka", message) - } -} - -class SourceLinkMapItem { - var dir: String = "" - var url: String = "" - var urlSuffix: String? = null -} - -class DokkaConfig( - var samplesDirs: List = emptyList(), - var includeDirs: List = emptyList(), - var outputDir: String = "", - var outputFormat: String = "html", - var sourceLinks : ArrayList = arrayListOf(), - var moduleName: String = "", - var skip: Boolean = false) { - - fun sourceLinks(init: SourceLinkMapItem.() -> Unit) - = sourceLinks.add(SourceLinkMapItem().apply { init() }) -} - -@Directive -public fun Project.dokka(init: DokkaConfig.() -> Unit) = let { project -> - with(DokkaConfig()) { - init() - (Kobalt.findPlugin(DokkaPlugin.PLUGIN_NAME) as DokkaPlugin).addConfiguration(project, this) - } -} - diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt index bb722fd9..e43b3ae3 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -11,10 +11,13 @@ import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.maven.dependency.FileDependency import com.beust.kobalt.maven.dependency.MavenDependency -import com.beust.kobalt.misc.KFiles -import com.beust.kobalt.misc.KobaltExecutors -import com.beust.kobalt.misc.warn +import com.beust.kobalt.misc.* +import com.google.common.collect.ArrayListMultimap +import org.jetbrains.dokka.DokkaGenerator +import org.jetbrains.dokka.DokkaLogger +import org.jetbrains.dokka.SourceLinkDefinition import java.io.File +import java.util.* import javax.inject.Inject import javax.inject.Singleton @@ -40,8 +43,34 @@ class KotlinPlugin @Inject constructor( override fun accept(project: Project) = project is KotlinProject override fun doJavadoc(project: Project, cai: CompilerActionInfo): TaskResult { - warn("javadoc task not implemented for Kotlin, call the dokka task instead") - return TaskResult() + val configs = dokkaConfigurations[project.name] + val classpath = context.dependencyManager.calculateDependencies(project, context) + val buildDir = project.buildDirectory + val classpathList = classpath.map { it.jarFile.get().absolutePath } + listOf(buildDir) + var success = true + configs.forEach { config -> + if (!config.skip) { + val outputDir = buildDir + "/" + + if (config.outputDir.isBlank()) "doc" else config.outputDir + + val gen = DokkaGenerator( + KobaltDokkaLogger { success = false }, + classpathList, + project.sourceDirectories.filter { File(it).exists() }.toList(), + config.samplesDirs, + config.includeDirs, + config.moduleName, + outputDir, + config.outputFormat, + config.sourceLinks.map { SourceLinkDefinition(it.dir, it.url, it.urlSuffix) } + ) + gen.generate() + log(2, "Documentation generated in $outputDir") + } else { + log(2, "skip is true, not generating the documentation") + } + } + return TaskResult(success) } @Task(name = TASK_COMPILE_TEST, description = "Compile the tests", runAfter = arrayOf(TASK_COMPILE)) @@ -112,6 +141,12 @@ class KotlinPlugin @Inject constructor( lp(project, "Compilation " + if (result.success) "succeeded" else "failed") return result } + + private val dokkaConfigurations = ArrayListMultimap.create() + + fun addDokkaConfiguration(project: Project, dokkaConfig: DokkaConfig) { + dokkaConfigurations.put(project.name, dokkaConfig) + } } /** @@ -135,3 +170,45 @@ class KotlinCompilerConfig(val project: Project) { fun Project.kotlinCompiler(init: KotlinCompilerConfig.() -> Unit) = let { KotlinCompilerConfig(it).init() } + +class KobaltDokkaLogger(val onErrorCallback: () -> Unit = {}) : DokkaLogger { + override fun error(message: String) { + KobaltLogger.logger.error("Dokka", message) + onErrorCallback() + } + + override fun info(message: String) { + KobaltLogger.logger.log(2, message) + } + + override fun warn(message: String) { + KobaltLogger.logger.warn("Dokka", message) + } +} + +class SourceLinkMapItem { + var dir: String = "" + var url: String = "" + var urlSuffix: String? = null +} + +class DokkaConfig( + var samplesDirs: List = emptyList(), + var includeDirs: List = emptyList(), + var outputDir: String = "", + var outputFormat: String = "html", + var sourceLinks : ArrayList = arrayListOf(), + var moduleName: String = "", + var skip: Boolean = false) { + + fun sourceLinks(init: SourceLinkMapItem.() -> Unit) + = sourceLinks.add(SourceLinkMapItem().apply { init() }) +} + +@Directive +public fun Project.dokka(init: DokkaConfig.() -> Unit) = let { project -> + with(DokkaConfig()) { + init() + (Kobalt.findPlugin(KotlinPlugin.PLUGIN_NAME) as KotlinPlugin).addDokkaConfiguration(project, this) + } +} diff --git a/src/main/resources/META-INF/kobalt-plugin.xml b/src/main/resources/META-INF/kobalt-plugin.xml index d1cd9526..2c347056 100644 --- a/src/main/resources/META-INF/kobalt-plugin.xml +++ b/src/main/resources/META-INF/kobalt-plugin.xml @@ -10,7 +10,6 @@ com.beust.kobalt.plugin.packaging.PackagingPlugin com.beust.kobalt.plugin.publish.PublishPlugin com.beust.kobalt.plugin.apt.AptPlugin - com.beust.kobalt.plugin.dokka.DokkaPlugin com.beust.kobalt.plugin.android.AndroidPlugin