aboutsummaryrefslogtreecommitdiff
path: root/gradle-plugin/src
diff options
context:
space:
mode:
authorSergey Mashkov <sergey.mashkov@jetbrains.com>2015-07-10 18:47:46 +0300
committerSergey Mashkov <sergey.mashkov@jetbrains.com>2015-07-13 17:59:30 +0300
commitd9e7b5a0a4706669819e91dd19404891f437e6d8 (patch)
tree6d6639a1e36a5ed24f4c80be45f425498448daed /gradle-plugin/src
parent513af27ac95939e659d337b02d94b096bad7d970 (diff)
downloaddokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.tar.gz
dokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.tar.bz2
dokka-d9e7b5a0a4706669819e91dd19404891f437e6d8.zip
Gradle initial plugin implementation
Diffstat (limited to 'gradle-plugin/src')
-rw-r--r--gradle-plugin/src/main/kotlin/logger.kt18
-rw-r--r--gradle-plugin/src/main/kotlin/main.kt97
-rw-r--r--gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties1
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