diff options
Diffstat (limited to 'runners/ant/src/main')
-rw-r--r-- | runners/ant/src/main/kotlin/ant/dokka.kt | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/runners/ant/src/main/kotlin/ant/dokka.kt b/runners/ant/src/main/kotlin/ant/dokka.kt new file mode 100644 index 00000000..38dc543b --- /dev/null +++ b/runners/ant/src/main/kotlin/ant/dokka.kt @@ -0,0 +1,101 @@ +package org.jetbrains.dokka.ant + +import org.apache.tools.ant.BuildException +import org.apache.tools.ant.Project +import org.apache.tools.ant.Task +import org.apache.tools.ant.types.Path +import org.apache.tools.ant.types.Reference +import org.jetbrains.dokka.DocumentationOptions +import org.jetbrains.dokka.DokkaGenerator +import org.jetbrains.dokka.DokkaLogger +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() { + var moduleName: String? = null + var outputDir: String? = null + var outputFormat: String = "html" + var jdkVersion: Int = 6 + + var skipDeprecated: Boolean = false + + val compileClasspath: Path by lazy { Path(getProject()) } + val sourcePath: Path by lazy { Path(getProject()) } + val samplesPath: Path by lazy { Path(getProject()) } + val includesPath: Path by lazy { Path(getProject()) } + + val antSourceLinks: MutableList<AntSourceLinkDefinition> = arrayListOf() + + fun setClasspath(classpath: Path) { + compileClasspath.append(classpath) + } + + fun setClasspathRef(ref: Reference) { + compileClasspath.createPath().refid = ref + } + + fun setSrc(src: Path) { + sourcePath.append(src) + } + + fun setSrcRef(ref: Reference) { + sourcePath.createPath().refid = ref + } + + fun setSamples(samples: Path) { + samplesPath.append(samples) + } + + fun setSamplesRef(ref: Reference) { + samplesPath.createPath().refid = ref + } + + fun setInclude(include: Path) { + includesPath.append(include) + } + + 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 ?: throw BuildException("'path' attribute of a <sourceLink> element is required") + val url = it.url ?: throw BuildException("'url' attribute of a <sourceLink> element is required") + SourceLinkDefinition(File(path).canonicalFile.absolutePath, url, it.lineSuffix) + } + + val generator = DokkaGenerator( + AntLogger(this), + compileClasspath.list().toList(), + sourcePath.list().toList(), + samplesPath.list().toList(), + includesPath.list().toList(), + moduleName!!, + DocumentationOptions(outputDir!!, outputFormat, + skipDeprecated = skipDeprecated, + sourceLinks = sourceLinks, + jdkVersion = jdkVersion) + ) + generator.generate() + } +}
\ No newline at end of file |