diff options
author | Sergey Mashkov <sergey.mashkov@jetbrains.com> | 2015-07-10 18:47:46 +0300 |
---|---|---|
committer | Sergey Mashkov <sergey.mashkov@jetbrains.com> | 2015-07-13 17:59:30 +0300 |
commit | d9e7b5a0a4706669819e91dd19404891f437e6d8 (patch) | |
tree | 6d6639a1e36a5ed24f4c80be45f425498448daed /gradle-plugin/src | |
parent | 513af27ac95939e659d337b02d94b096bad7d970 (diff) | |
download | dokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.tar.gz dokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.tar.bz2 dokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.zip |
Gradle initial plugin implementation
Diffstat (limited to 'gradle-plugin/src')
3 files changed, 116 insertions, 0 deletions
diff --git a/gradle-plugin/src/main/kotlin/logger.kt b/gradle-plugin/src/main/kotlin/logger.kt new file mode 100644 index 00000000..715c1f04 --- /dev/null +++ b/gradle-plugin/src/main/kotlin/logger.kt @@ -0,0 +1,18 @@ +package org.jetbrains.dokka.gradle + +import org.gradle.api.logging.Logger +import org.jetbrains.dokka.DokkaLogger + +class DokkaGradleLogger(val logger: Logger) : DokkaLogger { + override fun error(message: String) { + logger.error(message) + } + + override fun info(message: String) { + logger.info(message) + } + + override fun warn(message: String) { + logger.warn(message) + } +}
\ No newline at end of file diff --git a/gradle-plugin/src/main/kotlin/main.kt b/gradle-plugin/src/main/kotlin/main.kt new file mode 100644 index 00000000..418af00f --- /dev/null +++ b/gradle-plugin/src/main/kotlin/main.kt @@ -0,0 +1,97 @@ +package org.jetbrains.dokka.gradle + +import groovy.lang.Closure +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +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.jetbrains.dokka.DokkaGenerator +import org.jetbrains.dokka.SourceLinkDefinition +import java.io.File +import java.util.ArrayList + +public open class DokkaPlugin : Plugin<Project> { + override fun apply(project: Project) { + val ext = project.getExtensions().create("dokka", javaClass<DokkaExtension>()) + project.getTasks().create("dokka", javaClass<DokkaTask>()) + + ext.moduleName = project.getName() + ext.outputDirectory = File(project.getBuildDir(), "dokka").getAbsolutePath() + } +} + +public open class DokkaTask : DefaultTask() { + init { + setGroup(JavaBasePlugin.DOCUMENTATION_GROUP) + setDescription("Generates dokka documentation for Kotlin") + } + + TaskAction + fun generate() { + val project = getProject() + val conf = getProject().getExtensions().getByType(javaClass<DokkaExtension>()) + val javaPluginConvention = getProject().getConvention().getPlugin(javaClass<JavaPluginConvention>()) + + val sourceSets = javaPluginConvention.getSourceSets()?.findByName(SourceSet.MAIN_SOURCE_SET_NAME) + val sourceDirectories = sourceSets?.getAllSource()?.getSrcDirs()?.filter { it.exists() } ?: emptyList() + val allConfigurations = getProject().getConfigurations() + + val classpath = + conf.processConfigurations + .map { allConfigurations?.getByName(it) ?: throw IllegalArgumentException("No configuration $it found") } + .flatMap { it } + + if (sourceDirectories.isEmpty()) { + getLogger().warn("No source directories found: skipping dokka generation") + return + } + + DokkaGenerator( + DokkaGradleLogger(getLogger()), + classpath.map { it.getAbsolutePath() }, + sourceDirectories.map { it.getAbsolutePath() }, + conf.samples, + conf.includes, + conf.moduleName, + conf.outputDirectory, + conf.outputFormat, + conf.linkMappings.map { SourceLinkDefinition(project.file(it.dir).getAbsolutePath(), 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 linkMapping(closure: Closure<Any?>) { + val mapping = LinkMapping() + closure.setDelegate(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) + } +} + +public open class LinkMapping { + var dir: String = "" + var url: String = "" + var suffix: String? = null +} diff --git a/gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties b/gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties new file mode 100644 index 00000000..b42cfe9f --- /dev/null +++ b/gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties @@ -0,0 +1 @@ +implementation-class=org.jetbrains.dokka.gradle.DokkaPlugin
\ No newline at end of file |