aboutsummaryrefslogtreecommitdiff
path: root/ant
diff options
context:
space:
mode:
authorDmitry Jemerov <intelliyole@gmail.com>2015-01-30 19:23:08 +0100
committerDmitry Jemerov <intelliyole@gmail.com>2015-01-30 19:23:08 +0100
commitda1b31b03bc70bf6feb1111e68e5ffd032a6d82c (patch)
tree871bafd9851a6508395e3d7a4a920129b23e006a /ant
parentb5286f576f470ad1665a7b1acc9ea276bc1a0c18 (diff)
parent1602b0f593cd0b9d0895177ce71827d934c8982b (diff)
downloaddokka-da1b31b03bc70bf6feb1111e68e5ffd032a6d82c.tar.gz
dokka-da1b31b03bc70bf6feb1111e68e5ffd032a6d82c.tar.bz2
dokka-da1b31b03bc70bf6feb1111e68e5ffd032a6d82c.zip
Merge pull request #19 from orangy/ant-task
Ant task for Dokka
Diffstat (limited to 'ant')
-rw-r--r--ant/ant.iml14
-rw-r--r--ant/src/dokka-antlib.xml3
-rw-r--r--ant/src/dokka.kt105
3 files changed, 122 insertions, 0 deletions
diff --git a/ant/ant.iml b/ant/ant.iml
new file mode 100644
index 00000000..0761035c
--- /dev/null
+++ b/ant/ant.iml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="kotlin" level="project" />
+ <orderEntry type="library" name="ant-1.9.4" level="project" />
+ <orderEntry type="module" module-name="dokka" />
+ </component>
+</module> \ No newline at end of file
diff --git a/ant/src/dokka-antlib.xml b/ant/src/dokka-antlib.xml
new file mode 100644
index 00000000..9c3373d5
--- /dev/null
+++ b/ant/src/dokka-antlib.xml
@@ -0,0 +1,3 @@
+<antlib>
+ <taskdef name="dokka" classname="org.jetbrains.dokka.ant.DokkaAntTask"/>
+</antlib>
diff --git a/ant/src/dokka.kt b/ant/src/dokka.kt
new file mode 100644
index 00000000..051b6fe7
--- /dev/null
+++ b/ant/src/dokka.kt
@@ -0,0 +1,105 @@
+package org.jetbrains.dokka.ant
+
+import org.apache.tools.ant.Task
+import org.apache.tools.ant.types.Path
+import org.apache.tools.ant.types.Reference
+import org.apache.tools.ant.BuildException
+import org.apache.tools.ant.Project
+import org.jetbrains.dokka.DokkaLogger
+import org.jetbrains.dokka.DokkaGenerator
+import org.jetbrains.dokka.SourceLinkDefinition
+import java.io.File
+
+class AntLogger(val task: Task): DokkaLogger {
+ override fun info(message: String) = task.log(message, Project.MSG_INFO)
+ override fun warn(message: String) = task.log(message, Project.MSG_WARN)
+ override fun error(message: String) = task.log(message, Project.MSG_ERR)
+}
+
+class AntSourceLinkDefinition(var path: String? = null, var url: String? = null, var lineSuffix: String? = null)
+
+class DokkaAntTask(): Task() {
+ public var moduleName: String? = null
+ public var outputDir: String? = null
+ public var outputFormat: String = "html"
+
+ public val compileClasspath: Path = Path(getProject())
+ public val sourcePath: Path = Path(getProject())
+ public val samplesPath: Path = Path(getProject())
+ public val includesPath: Path = Path(getProject())
+
+ public val antSourceLinks: MutableList<AntSourceLinkDefinition> = arrayListOf()
+
+ public fun setClasspath(classpath: Path) {
+ compileClasspath.append(classpath)
+ }
+
+ public fun setClasspathRef(ref: Reference) {
+ compileClasspath.createPath().setRefid(ref)
+ }
+
+ public fun setSrc(src: Path) {
+ sourcePath.append(src)
+ }
+
+ public fun setSrcRef(ref: Reference) {
+ sourcePath.createPath().setRefid(ref)
+ }
+
+ public fun setSamples(samples: Path) {
+ samplesPath.append(samples)
+ }
+
+ public fun setSamplesRef(ref: Reference) {
+ samplesPath.createPath().setRefid(ref)
+ }
+
+ public fun setInclude(include: Path) {
+ includesPath.append(include)
+ }
+
+ public fun createSourceLink(): AntSourceLinkDefinition {
+ val def = AntSourceLinkDefinition()
+ antSourceLinks.add(def)
+ return def
+ }
+
+ override fun execute() {
+ if (sourcePath.list().size() == 0) {
+ throw BuildException("At least one source path needs to be specified")
+ }
+ if (moduleName == null) {
+ throw BuildException("Module name needs to be specified")
+ }
+ if (outputDir == null) {
+ throw BuildException("Output directory needs to be specified")
+ }
+ val sourceLinks = antSourceLinks.map {
+ val path = it.path
+ if (path == null) {
+ throw BuildException("Path attribute of a <sourceLink> element is required")
+ }
+ val url = it.url
+ if (url == null) {
+ throw BuildException("Path attribute of a <sourceLink> element is required")
+ }
+ SourceLinkDefinition(File(path).getCanonicalFile().getAbsolutePath(), url, it.lineSuffix)
+ }
+
+ val url = javaClass<DokkaAntTask>().getResource("/org/jetbrains/dokka/ant/DokkaAntTask.class")
+ val jarRoot = url.getPath().substringBefore("!/").trimLeading("file:")
+
+ val generator = DokkaGenerator(
+ AntLogger(this),
+ listOf(jarRoot) + compileClasspath.list().toList(),
+ sourcePath.list().toList(),
+ samplesPath.list().toList(),
+ includesPath.list().toList(),
+ moduleName!!,
+ outputDir!!,
+ outputFormat,
+ sourceLinks
+ )
+ generator.generate()
+ }
+} \ No newline at end of file