aboutsummaryrefslogtreecommitdiff
path: root/runners
diff options
context:
space:
mode:
authorSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2019-03-18 22:05:22 +0300
committerSimon Ogorodnik <Simon.Ogorodnik@jetbrains.com>2019-03-18 22:05:22 +0300
commitfd2f36301e95f8d100e1c2b942f1590144d8c6c2 (patch)
treedcbf109f14de5301848c29e9721c8e0af6881b3e /runners
parentf2359e05347708e625d5a6b339010cda2adc30de (diff)
parent4b22ebab09ce3b934443d063df6b905e5347c390 (diff)
downloaddokka-fd2f36301e95f8d100e1c2b942f1590144d8c6c2.tar.gz
dokka-fd2f36301e95f8d100e1c2b942f1590144d8c6c2.tar.bz2
dokka-fd2f36301e95f8d100e1c2b942f1590144d8c6c2.zip
Merge branch 'dev'
Diffstat (limited to 'runners')
-rw-r--r--runners/android-gradle-plugin/build.gradle2
-rw-r--r--runners/android-gradle-plugin/src/main/kotlin/mainAndroid.kt1
-rw-r--r--runners/ant/src/main/kotlin/ant/dokka.kt6
-rw-r--r--runners/cli/src/main/kotlin/cli/main.kt32
-rw-r--r--runners/gradle-integration-tests/build.gradle1
-rw-r--r--runners/gradle-integration-tests/src/test/kotlin/org/jetbrains/dokka/gradle/TypeSafeConfigurationTest.kt36
-rw-r--r--runners/gradle-integration-tests/testData/androidApp/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/androidApp/fileTree.txt1
-rw-r--r--runners/gradle-integration-tests/testData/androidAppJavadoc/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/androidMultiFlavourApp/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/androidMultiFlavourApp/fileTree.txt2
-rw-r--r--runners/gradle-integration-tests/testData/basic/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/multiProjectSingleOut/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/sourcesChange/build.gradle4
-rw-r--r--runners/gradle-integration-tests/testData/typeSafeConfiguration/build.gradle84
-rw-r--r--runners/gradle-integration-tests/testData/typeSafeConfiguration/settings.gradle1
-rw-r--r--runners/gradle-plugin/build.gradle2
-rw-r--r--runners/gradle-plugin/src/main/kotlin/main.kt128
-rw-r--r--runners/maven-plugin/build.gradle98
-rw-r--r--runners/maven-plugin/src/main/kotlin/DokkaMojo.kt13
20 files changed, 339 insertions, 92 deletions
diff --git a/runners/android-gradle-plugin/build.gradle b/runners/android-gradle-plugin/build.gradle
index 72d1be9e..28b0cbb9 100644
--- a/runners/android-gradle-plugin/build.gradle
+++ b/runners/android-gradle-plugin/build.gradle
@@ -76,7 +76,7 @@ artifacts {
}
pluginBundle {
- website = 'http://www.kotlinlang.org/'
+ website = 'https://www.kotlinlang.org/'
vcsUrl = 'https://github.com/kotlin/dokka.git'
description = 'Dokka, the Kotlin documentation tool'
tags = ['dokka', 'kotlin', 'kdoc', 'android']
diff --git a/runners/android-gradle-plugin/src/main/kotlin/mainAndroid.kt b/runners/android-gradle-plugin/src/main/kotlin/mainAndroid.kt
index bd2e88c2..b1996da0 100644
--- a/runners/android-gradle-plugin/src/main/kotlin/mainAndroid.kt
+++ b/runners/android-gradle-plugin/src/main/kotlin/mainAndroid.kt
@@ -10,6 +10,7 @@ open class DokkaAndroidPlugin : Plugin<Project> {
override fun apply(project: Project) {
DokkaVersion.loadFrom(javaClass.getResourceAsStream("/META-INF/gradle-plugins/org.jetbrains.dokka-android.properties"))
project.tasks.create("dokka", DokkaAndroidTask::class.java).apply {
+ dokkaRuntime = project.configurations.create("dokkaRuntime")
moduleName = project.name
outputDirectory = File(project.buildDir, "dokka").absolutePath
}
diff --git a/runners/ant/src/main/kotlin/ant/dokka.kt b/runners/ant/src/main/kotlin/ant/dokka.kt
index d1b6bef5..b23328e0 100644
--- a/runners/ant/src/main/kotlin/ant/dokka.kt
+++ b/runners/ant/src/main/kotlin/ant/dokka.kt
@@ -40,6 +40,7 @@ class DokkaAntTask: Task() {
var jdkVersion: Int = 6
var noStdlibLink: Boolean = false
+ var noJdkLink: Boolean = false
var skipDeprecated: Boolean = false
@@ -110,6 +111,10 @@ class DokkaAntTask: Task() {
}
val sourceLinks = antSourceLinks.map {
val path = it.path ?: throw BuildException("'path' attribute of a <sourceLink> element is required")
+ if (path.contains("\\")) {
+ throw BuildException("'dir' attribute of a <sourceLink> - incorrect value, only Unix based path allowed.")
+ }
+
val url = it.url ?: throw BuildException("'url' attribute of a <sourceLink> element is required")
SourceLinkDefinitionImpl(File(path).canonicalFile.absolutePath, url, it.lineSuffix)
}
@@ -131,6 +136,7 @@ class DokkaAntTask: Task() {
perPackageOptions = antPackageOptions,
externalDocumentationLinks = antExternalDocumentationLinks.map { it.build() },
noStdlibLink = noStdlibLink,
+ noJdkLink = noJdkLink,
cacheRoot = cacheRoot,
languageVersion = languageVersion,
apiVersion = apiVersion
diff --git a/runners/cli/src/main/kotlin/cli/main.kt b/runners/cli/src/main/kotlin/cli/main.kt
index fe945ed3..f871f406 100644
--- a/runners/cli/src/main/kotlin/cli/main.kt
+++ b/runners/cli/src/main/kotlin/cli/main.kt
@@ -53,6 +53,9 @@ class DokkaArguments {
@set:Argument(value = "noStdlibLink", description = "Disable documentation link to stdlib")
var noStdlibLink: Boolean = false
+ @set:Argument(value = "noJdkLink", description = "Disable documentation link to jdk")
+ var noJdkLink: Boolean = false
+
@set:Argument(value = "cacheRoot", description = "Path to cache folder, or 'default' to use ~/.cache/dokka, if not provided caching is disabled")
var cacheRoot: String? = null
@@ -62,6 +65,9 @@ class DokkaArguments {
@set:Argument(value = "apiVersion", description = "Kotlin Api Version to pass to Kotlin Analysis")
var apiVersion: String? = null
+ @set:Argument(value = "collectInheritedExtensionsFromLibraries", description = "Search for applicable extensions in libraries")
+ var collectInheritedExtensionsFromLibraries: Boolean = false
+
}
@@ -106,18 +112,20 @@ object MainKt {
val classPath = arguments.classpath.split(File.pathSeparatorChar).toList()
val documentationOptions = DocumentationOptions(
- arguments.outputDir.let { if (it.endsWith('/')) it else it + '/' },
- arguments.outputFormat,
- skipDeprecated = arguments.nodeprecated,
- sourceLinks = sourceLinks,
- impliedPlatforms = arguments.impliedPlatforms.split(','),
- perPackageOptions = parsePerPackageOptions(arguments.packageOptions),
- jdkVersion = arguments.jdkVersion,
- externalDocumentationLinks = parseLinks(arguments.links),
- noStdlibLink = arguments.noStdlibLink,
- cacheRoot = arguments.cacheRoot,
- languageVersion = arguments.languageVersion,
- apiVersion = arguments.apiVersion
+ arguments.outputDir.let { if (it.endsWith('/')) it else it + '/' },
+ arguments.outputFormat,
+ skipDeprecated = arguments.nodeprecated,
+ sourceLinks = sourceLinks,
+ impliedPlatforms = arguments.impliedPlatforms.split(','),
+ perPackageOptions = parsePerPackageOptions(arguments.packageOptions),
+ jdkVersion = arguments.jdkVersion,
+ externalDocumentationLinks = parseLinks(arguments.links),
+ noStdlibLink = arguments.noStdlibLink,
+ cacheRoot = arguments.cacheRoot,
+ languageVersion = arguments.languageVersion,
+ apiVersion = arguments.apiVersion,
+ collectInheritedExtensionsFromLibraries = arguments.collectInheritedExtensionsFromLibraries,
+ noJdkLink = arguments.noJdkLink
)
val generator = DokkaGenerator(
diff --git a/runners/gradle-integration-tests/build.gradle b/runners/gradle-integration-tests/build.gradle
index a681c82e..297a175a 100644
--- a/runners/gradle-integration-tests/build.gradle
+++ b/runners/gradle-integration-tests/build.gradle
@@ -56,4 +56,5 @@ testClasses.dependsOn createClasspathManifest
test {
systemProperty "android.licenses.overwrite", project.findProperty("android.licenses.overwrite") ?: ""
+ inputs.dir(file('testData'))
} \ No newline at end of file
diff --git a/runners/gradle-integration-tests/src/test/kotlin/org/jetbrains/dokka/gradle/TypeSafeConfigurationTest.kt b/runners/gradle-integration-tests/src/test/kotlin/org/jetbrains/dokka/gradle/TypeSafeConfigurationTest.kt
new file mode 100644
index 00000000..7b179e92
--- /dev/null
+++ b/runners/gradle-integration-tests/src/test/kotlin/org/jetbrains/dokka/gradle/TypeSafeConfigurationTest.kt
@@ -0,0 +1,36 @@
+package org.jetbrains.dokka.gradle
+
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@RunWith(Parameterized::class)
+class TypeSafeConfigurationTest(private val testCase: TestCase) : AbstractDokkaGradleTest() {
+
+ data class TestCase(val gradleVersion: String, val kotlinVersion: String) {
+ override fun toString(): String = "Gradle $gradleVersion and Kotlin $kotlinVersion"
+ }
+
+ companion object {
+ @Parameterized.Parameters(name = "{0}")
+ @JvmStatic
+ fun testCases() = listOf(
+ TestCase("4.0", "1.1.2"),
+ TestCase("4.5", "1.2.20"),
+ TestCase("4.10.1", "1.2.60")
+ )
+ }
+
+ @Test
+ fun test() {
+
+ testDataFolder.resolve("typeSafeConfiguration").toFile()
+ .copyRecursively(testProjectDir.root)
+
+ configure(
+ testCase.gradleVersion,
+ testCase.kotlinVersion,
+ arguments = arrayOf("help", "-s")
+ ).build()
+ }
+}
diff --git a/runners/gradle-integration-tests/testData/androidApp/build.gradle b/runners/gradle-integration-tests/testData/androidApp/build.gradle
index 59477b52..35356b90 100644
--- a/runners/gradle-integration-tests/testData/androidApp/build.gradle
+++ b/runners/gradle-integration-tests/testData/androidApp/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
jcenter()
maven { url 'https://maven.google.com' }
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -15,7 +15,7 @@ allprojects {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
}
diff --git a/runners/gradle-integration-tests/testData/androidApp/fileTree.txt b/runners/gradle-integration-tests/testData/androidApp/fileTree.txt
index 3827b69e..f66c79e3 100644
--- a/runners/gradle-integration-tests/testData/androidApp/fileTree.txt
+++ b/runners/gradle-integration-tests/testData/androidApp/fileTree.txt
@@ -9,6 +9,7 @@
-init-.html
index.html
on-create-options-menu.html
+ on-create.html
-kotlin-activity/
-init-.html
index.html
diff --git a/runners/gradle-integration-tests/testData/androidAppJavadoc/build.gradle b/runners/gradle-integration-tests/testData/androidAppJavadoc/build.gradle
index 59477b52..35356b90 100644
--- a/runners/gradle-integration-tests/testData/androidAppJavadoc/build.gradle
+++ b/runners/gradle-integration-tests/testData/androidAppJavadoc/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
jcenter()
maven { url 'https://maven.google.com' }
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -15,7 +15,7 @@ allprojects {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
}
diff --git a/runners/gradle-integration-tests/testData/androidMultiFlavourApp/build.gradle b/runners/gradle-integration-tests/testData/androidMultiFlavourApp/build.gradle
index 59477b52..35356b90 100644
--- a/runners/gradle-integration-tests/testData/androidMultiFlavourApp/build.gradle
+++ b/runners/gradle-integration-tests/testData/androidMultiFlavourApp/build.gradle
@@ -3,7 +3,7 @@ buildscript {
mavenCentral()
jcenter()
maven { url 'https://maven.google.com' }
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -15,7 +15,7 @@ allprojects {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
}
diff --git a/runners/gradle-integration-tests/testData/androidMultiFlavourApp/fileTree.txt b/runners/gradle-integration-tests/testData/androidMultiFlavourApp/fileTree.txt
index 5e969d8b..77b563b2 100644
--- a/runners/gradle-integration-tests/testData/androidMultiFlavourApp/fileTree.txt
+++ b/runners/gradle-integration-tests/testData/androidMultiFlavourApp/fileTree.txt
@@ -10,6 +10,7 @@
-init-.html
index.html
on-create-options-menu.html
+ on-create.html
-kotlin-activity/
-init-.html
index.html
@@ -35,6 +36,7 @@
-init-.html
index.html
on-create-options-menu.html
+ on-create.html
-kotlin-activity/
-init-.html
index.html
diff --git a/runners/gradle-integration-tests/testData/basic/build.gradle b/runners/gradle-integration-tests/testData/basic/build.gradle
index 4a259f50..a3116751 100644
--- a/runners/gradle-integration-tests/testData/basic/build.gradle
+++ b/runners/gradle-integration-tests/testData/basic/build.gradle
@@ -2,7 +2,7 @@ buildscript {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -21,7 +21,7 @@ repositories {
mavenCentral()
jcenter()
maven {
- url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
+ url "https://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
maven {
url "https://dl.bintray.com/kotlin/kotlin-dev"
diff --git a/runners/gradle-integration-tests/testData/multiProjectSingleOut/build.gradle b/runners/gradle-integration-tests/testData/multiProjectSingleOut/build.gradle
index 68d93e30..4f561472 100644
--- a/runners/gradle-integration-tests/testData/multiProjectSingleOut/build.gradle
+++ b/runners/gradle-integration-tests/testData/multiProjectSingleOut/build.gradle
@@ -7,7 +7,7 @@ subprojects {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -17,7 +17,7 @@ subprojects {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
}
diff --git a/runners/gradle-integration-tests/testData/sourcesChange/build.gradle b/runners/gradle-integration-tests/testData/sourcesChange/build.gradle
index bc20e1cf..4627e8ef 100644
--- a/runners/gradle-integration-tests/testData/sourcesChange/build.gradle
+++ b/runners/gradle-integration-tests/testData/sourcesChange/build.gradle
@@ -2,7 +2,7 @@ buildscript {
repositories {
mavenCentral()
jcenter()
- maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" }
+ maven { url "https://dl.bintray.com/kotlin/kotlin-eap-1.1" }
maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
}
dependencies {
@@ -21,7 +21,7 @@ repositories {
mavenCentral()
jcenter()
maven {
- url "http://dl.bintray.com/kotlin/kotlin-eap-1.1"
+ url "https://dl.bintray.com/kotlin/kotlin-eap-1.1"
}
maven {
url "https://dl.bintray.com/kotlin/kotlin-dev"
diff --git a/runners/gradle-integration-tests/testData/typeSafeConfiguration/build.gradle b/runners/gradle-integration-tests/testData/typeSafeConfiguration/build.gradle
new file mode 100644
index 00000000..327cead8
--- /dev/null
+++ b/runners/gradle-integration-tests/testData/typeSafeConfiguration/build.gradle
@@ -0,0 +1,84 @@
+import org.jetbrains.dokka.*
+import org.jetbrains.dokka.gradle.*
+import org.jetbrains.kotlin.gradle.tasks.*
+
+import groovy.transform.CompileStatic
+import java.util.concurrent.Callable
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$test_kotlin_version"
+ }
+}
+
+plugins {
+ id 'org.jetbrains.dokka'
+}
+
+apply plugin: 'kotlin'
+
+@CompileStatic
+def configureDokkaTypeSafely(DokkaTask dokka) {
+ dokka.with {
+ moduleName = "some String"
+ outputFormat = "some String"
+ outputDirectory = "some String"
+ classpath = Collections.singleton(file("someClassDir"))
+ includes = Collections.emptyList()
+ linkMappings = new ArrayList<LinkMapping>()
+ samples = Collections.emptyList()
+ jdkVersion = 6
+ sourceDirs = Collections.<File>emptyList()
+ sourceRoots = new ArrayList<SourceRoot>()
+ dokkaFatJar = file("some File")
+ includeNonPublic = false
+ skipDeprecated = false
+ skipEmptyPackages = true
+ reportUndocumented = true
+ perPackageOptions = new ArrayList<PackageOptions>()
+ impliedPlatforms = Collections.<String>emptyList()
+ externalDocumentationLinks = new ArrayList<DokkaConfiguration.ExternalDocumentationLink>()
+ noStdlibLink = false
+ cacheRoot = null as String
+ languageVersion = null as String
+ apiVersion = null as String
+ kotlinTasks(new Callable<List<Object>>() {
+ @Override
+ List<Object> call() {
+ return defaultKotlinTasks()
+ }
+ })
+ linkMapping(new Action<LinkMapping>() {
+ @Override
+ void execute(LinkMapping mapping) {
+ mapping.dir = "some String"
+ mapping.url = "some String"
+ }
+ })
+ sourceRoot(new Action<SourceRoot>() {
+ @Override
+ void execute(SourceRoot sourceRoot) {
+ sourceRoot.path = "some String"
+ }
+ })
+ packageOptions(new Action<PackageOptions>() {
+ @Override
+ void execute(PackageOptions packageOptions) {
+ packageOptions.prefix = "some String"
+ }
+ })
+ externalDocumentationLink(new Action<DokkaConfiguration.ExternalDocumentationLink.Builder>() {
+ @Override
+ void execute(DokkaConfiguration.ExternalDocumentationLink.Builder builder) {
+ builder.url = uri("some URI").toURL()
+ }
+ })
+ }
+}
+
+project.tasks.withType(DokkaTask) { dokka ->
+ configureDokkaTypeSafely(dokka)
+}
diff --git a/runners/gradle-integration-tests/testData/typeSafeConfiguration/settings.gradle b/runners/gradle-integration-tests/testData/typeSafeConfiguration/settings.gradle
new file mode 100644
index 00000000..be82e328
--- /dev/null
+++ b/runners/gradle-integration-tests/testData/typeSafeConfiguration/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "type-safe-configuration" \ No newline at end of file
diff --git a/runners/gradle-plugin/build.gradle b/runners/gradle-plugin/build.gradle
index 661d432b..8e59a7be 100644
--- a/runners/gradle-plugin/build.gradle
+++ b/runners/gradle-plugin/build.gradle
@@ -74,7 +74,7 @@ artifacts {
}
pluginBundle {
- website = 'http://www.kotlinlang.org/'
+ website = 'https://www.kotlinlang.org/'
vcsUrl = 'https://github.com/kotlin/dokka.git'
description = 'Dokka, the Kotlin documentation tool'
tags = ['dokka', 'kotlin', 'kdoc']
diff --git a/runners/gradle-plugin/src/main/kotlin/main.kt b/runners/gradle-plugin/src/main/kotlin/main.kt
index 5f02cd0e..f4adc1c3 100644
--- a/runners/gradle-plugin/src/main/kotlin/main.kt
+++ b/runners/gradle-plugin/src/main/kotlin/main.kt
@@ -1,10 +1,12 @@
package org.jetbrains.dokka.gradle
import groovy.lang.Closure
+import org.gradle.api.Action
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
+import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.FileCollection
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPluginConvention
@@ -30,6 +32,7 @@ open class DokkaPlugin : Plugin<Project> {
override fun apply(project: Project) {
DokkaVersion.loadFrom(javaClass.getResourceAsStream("/META-INF/gradle-plugins/org.jetbrains.dokka.properties"))
project.tasks.create("dokka", DokkaTask::class.java).apply {
+ dokkaRuntime = project.configurations.create("dokkaRuntime")
moduleName = project.name
outputDirectory = File(project.buildDir, "dokka").absolutePath
}
@@ -80,7 +83,7 @@ open class DokkaTask : DefaultTask() {
@Input
var outputFormat: String = "html"
var outputDirectory: String = ""
-
+ var dokkaRuntime: Configuration? = null
@Deprecated("Going to be removed in 0.9.16, use classpath + sourceDirs instead if kotlinTasks is not suitable for you")
@Input var processConfigurations: List<Any?> = emptyList()
@@ -124,6 +127,9 @@ open class DokkaTask : DefaultTask() {
@Input var noStdlibLink: Boolean = false
+ @Input
+ var noJdkLink: Boolean = false
+
@Optional @Input
var cacheRoot: String? = null
@@ -134,6 +140,9 @@ open class DokkaTask : DefaultTask() {
@Optional @Input
var apiVersion: String? = null
+ @Input
+ var collectInheritedExtensionsFromLibraries: Boolean = false
+
@get:Internal
internal val kotlinCompileBasedClasspathAndSourceRoots: ClasspathAndSourceRoots by lazy { extractClasspathAndSourceRootsFromKotlinTasks() }
@@ -141,14 +150,17 @@ open class DokkaTask : DefaultTask() {
private var kotlinTasksConfigurator: () -> List<Any?>? = { defaultKotlinTasks() }
private val kotlinTasks: List<Task> by lazy { extractKotlinCompileTasks() }
+ fun kotlinTasks(taskSupplier: Callable<List<Any>>) {
+ kotlinTasksConfigurator = { taskSupplier.call() }
+ }
+
fun kotlinTasks(closure: Closure<Any?>) {
kotlinTasksConfigurator = { closure.call() as? List<Any?> }
}
- fun linkMapping(closure: Closure<Unit>) {
+ fun linkMapping(action: Action<LinkMapping>) {
val mapping = LinkMapping()
- closure.delegate = mapping
- closure.call()
+ action.execute(mapping)
if (mapping.path.isEmpty()) {
throw IllegalArgumentException("Link mapping should have dir")
@@ -160,33 +172,55 @@ open class DokkaTask : DefaultTask() {
linkMappings.add(mapping)
}
- fun sourceRoot(closure: Closure<Unit>) {
+ fun linkMapping(closure: Closure<Unit>) {
+ linkMapping(Action { mapping ->
+ closure.delegate = mapping
+ closure.call()
+ })
+ }
+
+ fun sourceRoot(action: Action<SourceRoot>) {
val sourceRoot = SourceRoot()
- closure.delegate = sourceRoot
- closure.call()
+ action.execute(sourceRoot)
sourceRoots.add(sourceRoot)
}
- fun packageOptions(closure: Closure<Unit>) {
+ fun sourceRoot(closure: Closure<Unit>) {
+ sourceRoot(Action { sourceRoot ->
+ closure.delegate = sourceRoot
+ closure.call()
+ })
+ }
+
+ fun packageOptions(action: Action<PackageOptions>) {
val packageOptions = PackageOptions()
- closure.delegate = packageOptions
- closure.call()
+ action.execute(packageOptions)
perPackageOptions.add(packageOptions)
}
- fun externalDocumentationLink(closure: Closure<Unit>) {
+ fun packageOptions(closure: Closure<Unit>) {
+ packageOptions(Action { packageOptions ->
+ closure.delegate = packageOptions
+ closure.call()
+ })
+ }
+
+ fun externalDocumentationLink(action: Action<DokkaConfiguration.ExternalDocumentationLink.Builder>) {
val builder = DokkaConfiguration.ExternalDocumentationLink.Builder()
- closure.delegate = builder
- closure.call()
+ action.execute(builder)
externalDocumentationLinks.add(builder.build())
}
- fun tryResolveFatJar(project: Project): File {
+ fun externalDocumentationLink(closure: Closure<Unit>) {
+ externalDocumentationLink(Action { builder ->
+ closure.delegate = builder
+ closure.call()
+ })
+ }
+
+ fun tryResolveFatJar(project: Project): Set<File> {
return try {
- val dependency = project.buildscript.dependencies.create(dokkaFatJar)
- val configuration = project.buildscript.configurations.detachedConfiguration(dependency)
- configuration.description = "Dokka main jar"
- configuration.resolve().first()
+ dokkaRuntime!!.resolve()
} catch (e: Exception) {
project.parent?.let { tryResolveFatJar(it) } ?: throw e
}
@@ -194,11 +228,11 @@ open class DokkaTask : DefaultTask() {
fun loadFatJar() {
if (fatJarClassLoader == null) {
- val fatjar = if (dokkaFatJar is File)
- dokkaFatJar as File
+ val jars = if (dokkaFatJar is File)
+ setOf(dokkaFatJar as File)
else
tryResolveFatJar(project)
- fatJarClassLoader = URLClassLoader(arrayOf(fatjar.toURI().toURL()), ClassLoader.getSystemClassLoader().parent)
+ fatJarClassLoader = URLClassLoader(jars.map { it.toURI().toURL() }.toTypedArray(), ClassLoader.getSystemClassLoader().parent)
}
}
@@ -263,6 +297,11 @@ open class DokkaTask : DefaultTask() {
@TaskAction
fun generate() {
+ if (dokkaRuntime == null){
+ dokkaRuntime = project.configurations.getByName("dokkaRuntime")
+ }
+
+ dokkaRuntime?.defaultDependencies{ dependencies -> dependencies.add(project.dependencies.create(dokkaFatJar)) }
val kotlinColorsEnabledBefore = System.getProperty(COLORS_ENABLED_PROPERTY) ?: "false"
System.setProperty(COLORS_ENABLED_PROPERTY, "false")
try {
@@ -287,29 +326,32 @@ open class DokkaTask : DefaultTask() {
val bootstrapProxy: DokkaBootstrap = automagicTypedProxy(javaClass.classLoader, bootstrapInstance)
val configuration = SerializeOnlyDokkaConfiguration(
- moduleName,
- fullClasspath.map { it.absolutePath },
- sourceRoots,
- samples.filterNotNull().map { project.file(it).absolutePath },
- includes.filterNotNull().map { project.file(it).absolutePath },
- outputDirectory,
- outputFormat,
- includeNonPublic,
- false,
- reportUndocumented,
- skipEmptyPackages,
- skipDeprecated,
- jdkVersion,
- true,
- linkMappings,
- impliedPlatforms,
- perPackageOptions,
- externalDocumentationLinks,
- noStdlibLink,
+ moduleName,
+ fullClasspath.map { it.absolutePath },
+ sourceRoots,
+ samples.filterNotNull().map { project.file(it).absolutePath },
+ includes.filterNotNull().map { project.file(it).absolutePath },
+ outputDirectory,
+ outputFormat,
+ includeNonPublic,
+ false,
+ reportUndocumented,
+ skipEmptyPackages,
+ skipDeprecated,
+ jdkVersion,
+ true,
+ linkMappings,
+ impliedPlatforms,
+ perPackageOptions,
+ externalDocumentationLinks,
+ noStdlibLink,
+ noJdkLink,
cacheRoot,
collectSuppressedFiles(sourceRoots),
languageVersion,
- apiVersion)
+ apiVersion,
+ collectInheritedExtensionsFromLibraries
+ )
bootstrapProxy.configure(
@@ -406,7 +448,9 @@ open class LinkMapping : Serializable, DokkaConfiguration.SourceLinkDefinition {
var dir: String
get() = path
set(value) {
- path = value
+ if (value.contains("\\"))
+ throw java.lang.IllegalArgumentException("Incorrect dir property, only Unix based path allowed.")
+ else path = value
}
override var path: String = ""
diff --git a/runners/maven-plugin/build.gradle b/runners/maven-plugin/build.gradle
index 79a8c22b..2e9d0b1b 100644
--- a/runners/maven-plugin/build.gradle
+++ b/runners/maven-plugin/build.gradle
@@ -19,7 +19,13 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
}
}
+configurations {
+ maven
+}
+
dependencies {
+ maven group: "org.apache.maven", name: 'apache-maven', version: maven_version, classifier: 'bin', ext: 'zip'
+
shadow project(":runners:fatjar")
shadow "org.apache.maven:maven-core:$maven_version"
shadow "org.apache.maven:maven-model:$maven_version"
@@ -31,50 +37,96 @@ dependencies {
shadow "com.github.olivergondza:maven-jdk-tools-wrapper:0.1"
}
+final File mavenHome = new File(buildDir, "maven-bin")
+final File mvn = new File(mavenHome, "apache-maven-$maven_version/bin/mvn")
+
+tasks.clean.doLast {
+ delete mavenHome
+}
+
+task setupMaven(type: Sync) {
+ from configurations.maven.collect{ zipTree(it) }
+ into "$buildDir/maven-bin"
+}
+
+def mavenBuildDir = "$buildDir/maven"
+
+
+sourceSets.main.resources {
+ srcDirs += "$mavenBuildDir/classes/java/main"
+ exclude "**/*.class"
+}
+
task generatePom() {
inputs.file(new File(projectDir, "pom.tpl.xml"))
- outputs.file(new File(buildDir, "pom.xml"))
+ outputs.file(new File(mavenBuildDir, "pom.xml"))
doLast {
final pomTemplate = new File(projectDir, "pom.tpl.xml")
- final pom = new File(buildDir, "pom.xml")
+ final pom = new File(mavenBuildDir, "pom.xml")
+ pom.parentFile.mkdirs()
pom.text = pomTemplate.text.replace("<version>dokka_version</version>", "<version>$dokka_version</version>")
.replace("<maven.version></maven.version>", "<maven.version>$maven_version</maven.version>")
.replace("<version>maven-plugin-plugin</version>", "<version>$maven_plugin_tools_version</version>")
}
}
-
-task mergeClassOutputs doLast {
- def sourceDir = new File(buildDir, "classes/kotlin")
- def targetDir = new File(buildDir, "classes/java")
-
- sourceDir.eachFileRecurse FileType.ANY, {
- def filePath = it.toPath()
- def targetFilePath = targetDir.toPath().resolve(sourceDir.toPath().relativize(filePath))
- if (it.isFile()) {
- Files.move(filePath, targetFilePath, StandardCopyOption.REPLACE_EXISTING)
- } else if (it.isDirectory()) {
- targetFilePath.toFile().mkdirs()
- }
+//
+//task mergeClassOutputs doLast {
+// def sourceDir = new File(buildDir, "classes/kotlin")
+// def targetDir = new File(buildDir, "classes/java")
+//
+// sourceDir.eachFileRecurse FileType.ANY, {
+// def filePath = it.toPath()
+// def targetFilePath = targetDir.toPath().resolve(sourceDir.toPath().relativize(filePath))
+// if (it.isFile()) {
+// Files.move(filePath, targetFilePath, StandardCopyOption.REPLACE_EXISTING)
+// } else if (it.isDirectory()) {
+// targetFilePath.toFile().mkdirs()
+// }
+// }
+//}
+
+
+
+task syncKotlinClasses(type: Sync, dependsOn: compileKotlin) {
+ from "$buildDir/classes/kotlin"
+ into "$mavenBuildDir/classes/java"
+
+ preserve {
+ include '**/*.class'
}
}
-task pluginDescriptor(type: CrossPlatformExec) {
- workingDir buildDir
- commandLine mvn, '-e', '-B', 'org.apache.maven.plugins:maven-plugin-plugin:descriptor'
+task syncJavaClasses(type: Sync, dependsOn: compileJava) {
+ from "$buildDir/classes/java"
+ into "$mavenBuildDir/classes/java"
- dependsOn mergeClassOutputs
+ preserve {
+ include '**/*.class'
+ }
}
-task helpMojo(type: CrossPlatformExec) {
- workingDir buildDir
+task helpMojo(type: CrossPlatformExec, dependsOn: setupMaven) {
+ workingDir mavenBuildDir
commandLine mvn, '-e', '-B', 'org.apache.maven.plugins:maven-plugin-plugin:helpmojo'
- dependsOn mergeClassOutputs
+ dependsOn syncKotlinClasses
}
+
+task pluginDescriptor(type: CrossPlatformExec, dependsOn: setupMaven) {
+ workingDir mavenBuildDir
+ commandLine mvn, '-e', '-B', 'org.apache.maven.plugins:maven-plugin-plugin:descriptor'
+
+ dependsOn syncJavaClasses
+}
+
+
+//mergeClassOutputs.dependsOn compileKotlin
+//helpMojo.dependsOn mergeClassOutputs
helpMojo.dependsOn generatePom
-sourceSets.main.java.srcDir("$buildDir/generated-sources/plugin")
+sourceSets.main.java.srcDir("$buildDir/maven/generated-sources/plugin")
compileJava.dependsOn helpMojo
+processResources.dependsOn pluginDescriptor
pluginDescriptor.dependsOn generatePom
diff --git a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
index 09da90c6..324703a0 100644
--- a/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
+++ b/runners/maven-plugin/src/main/kotlin/DokkaMojo.kt
@@ -4,6 +4,7 @@ import org.apache.maven.archiver.MavenArchiveConfiguration
import org.apache.maven.archiver.MavenArchiver
import org.apache.maven.execution.MavenSession
import org.apache.maven.plugin.AbstractMojo
+import org.apache.maven.plugin.MojoExecutionException
import org.apache.maven.plugins.annotations.*
import org.apache.maven.project.MavenProject
import org.apache.maven.project.MavenProjectHelper
@@ -104,6 +105,9 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
@Parameter(defaultValue = "false")
var noStdlibLink: Boolean = false
+ @Parameter(defaultValue = "false")
+ var noJdkLink: Boolean = false
+
@Parameter
var cacheRoot: String? = null
@@ -122,6 +126,12 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
return
}
+ sourceLinks.forEach {
+ if (it.dir.contains("\\")) {
+ throw MojoExecutionException("Incorrect dir property, only Unix based path allowed.")
+ }
+ }
+
val gen = DokkaGenerator(
MavenDokkaLogger(log),
classpath,
@@ -139,6 +149,7 @@ abstract class AbstractDokkaMojo : AbstractMojo() {
perPackageOptions = perPackageOptions,
externalDocumentationLinks = externalDocumentationLinks.map { it.build() },
noStdlibLink = noStdlibLink,
+ noJdkLink = noJdkLink,
cacheRoot = cacheRoot,
languageVersion = languageVersion,
apiVersion = apiVersion
@@ -196,7 +207,7 @@ class DokkaJavadocJarMojo : AbstractDokkaMojo() {
/**
* The archive configuration to use.
- * See [Maven Archiver Reference](http://maven.apache.org/shared/maven-archiver/index.html)
+ * See [Maven Archiver Reference](https://maven.apache.org/shared/maven-archiver/index.html)
*/
@Parameter
private val archive = MavenArchiveConfiguration()