diff --git a/buildSrc/src/main/kotlin/Dokka.kt b/buildSrc/src/main/kotlin/Dokka.kt index 900375258f..53dc5afaf9 100644 --- a/buildSrc/src/main/kotlin/Dokka.kt +++ b/buildSrc/src/main/kotlin/Dokka.kt @@ -1,6 +1,7 @@ import org.gradle.api.* +import org.gradle.api.publish.PublishingExtension import org.gradle.kotlin.dsl.* -import org.jetbrains.dokka.gradle.* +import org.jetbrains.dokka.gradle.DokkaExtension import java.io.* import java.net.* @@ -11,11 +12,11 @@ fun Project.externalDocumentationLink( url: String, packageList: File = projectDir.resolve("package.list") ) { - tasks.withType().configureEach { + extensions.configure { dokkaSourceSets.configureEach { - externalDocumentationLink { - this.url = URL(url) - packageListUrl = packageList.toPath().toUri().toURL() + externalDocumentationLinks.register("api") { + this.url = URI.create(url) + this.packageListUrl = packageList.toURI() } } } diff --git a/buildSrc/src/main/kotlin/UnpackAar.kt b/buildSrc/src/main/kotlin/UnpackAar.kt index 88948ac8a8..2d2967150e 100644 --- a/buildSrc/src/main/kotlin/UnpackAar.kt +++ b/buildSrc/src/main/kotlin/UnpackAar.kt @@ -16,12 +16,12 @@ import java.util.zip.ZipFile val artifactType = Attribute.of("artifactType", String::class.java) val unpackedAar = Attribute.of("unpackedAar", Boolean::class.javaObjectType) -fun Project.configureAar() = configurations.configureEach { - afterEvaluate { - if (isCanBeResolved && !isCanBeConsumed) { +fun Project.configureAar() { + configurations + .matching { it.isCanBeResolved && !it.isCanBeConsumed } + .configureEach { attributes.attribute(unpackedAar, true) // request all AARs to be unpacked } - } } fun DependencyHandlerScope.configureAarUnpacking() { diff --git a/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts b/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts index 966aa98e04..339c72140e 100644 --- a/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.dokka.gradle.* import java.net.* @@ -7,75 +6,45 @@ plugins { } val knit_version: String by project -private val projetsWithoutDokka = unpublished + "kotlinx-coroutines-bom" + jdk8ObsoleteModule -private val coreModuleDocsUrl = "https://kotlinlang.org/api/kotlinx.coroutines/$coreModule/" -private val coreModuleDocsPackageList = "$projectDir/kotlinx-coroutines-core/build/dokka/htmlPartial/package-list" +private val projectsWithoutDokka = unpublished + "kotlinx-coroutines-bom" + jdk8ObsoleteModule +private val subprojectWithDokka = subprojects.filterNot { projectsWithoutDokka.contains(it.name) } -configure(subprojects.filterNot { projetsWithoutDokka.contains(it.name) }) { +configure(subprojectWithDokka) { apply(plugin = "org.jetbrains.dokka") configurePathsaver() + configureDokkaTemplatesDir() condigureDokkaSetup() - configureExternalLinks() } -// Setup top-level 'dokkaHtmlMultiModule' with templates -tasks.withType().named("dokkaHtmlMultiModule") { - setupDokkaTemplatesDir(this) -} +// For top-level multimodule collection +configurePathsaver() +configureDokkaTemplatesDir() dependencies { - // Add explicit dependency between Dokka and Knit plugin - add("dokkaHtmlMultiModulePlugin", "org.jetbrains.kotlinx:dokka-pathsaver-plugin:$knit_version") + subprojectWithDokka.forEach { + dokka(it) + } } // Dependencies for Knit processing: Knit plugin to work with Dokka private fun Project.configurePathsaver() { - tasks.withType(DokkaTaskPartial::class).configureEach { - dependencies { - plugins("org.jetbrains.kotlinx:dokka-pathsaver-plugin:$knit_version") - } + dependencies { + dokkaPlugin("org.jetbrains.kotlinx:dokka-pathsaver-plugin:$knit_version") } } // Configure Dokka setup private fun Project.condigureDokkaSetup() { - tasks.withType(DokkaTaskPartial::class).configureEach { - suppressInheritedMembers = true - setupDokkaTemplatesDir(this) - + dokka { + dokkaPublications.configureEach { + suppressInheritedMembers = true + } dokkaSourceSets.configureEach { jdkVersion = 11 includes.from("README.md") - noStdlibLink = true - - externalDocumentationLink { - url = URL("https://kotlinlang.org/api/latest/jvm/stdlib/") - packageListUrl = rootProject.projectDir.toPath().resolve("site/stdlib.package.list").toUri().toURL() - } - - // Something suspicious to figure out, probably legacy of earlier days - if (!project.isMultiplatform) { - dependsOn(project.configurations["compileClasspath"]) - } - } - - // Source links - dokkaSourceSets.configureEach { sourceLink { localDirectory = rootDir - remoteUrl = URL("https://github.com/kotlin/kotlinx.coroutines/tree/master") - remoteLineSuffix ="#L" - } - } - } -} - -private fun Project.configureExternalLinks() { - tasks.withType() { - dokkaSourceSets.configureEach { - externalDocumentationLink { - url = URL(coreModuleDocsUrl) - packageListUrl = File(coreModuleDocsPackageList).toURI().toURL() + remoteUrl("https://github.com/kotlin/kotlinx.coroutines/tree/master") } } } @@ -90,10 +59,10 @@ private fun Project.configureExternalLinks() { * - Template setup: https://github.com/JetBrains/kotlin-web-site/blob/master/.teamcity/builds/apiReferences/kotlinx/coroutines/KotlinxCoroutinesPrepareDokkaTemplates.kt * - Templates repository: https://github.com/JetBrains/kotlin-web-site/tree/master/dokka-templates */ -private fun Project.setupDokkaTemplatesDir(dokkaTask: AbstractDokkaTask) { - dokkaTask.pluginsMapConfiguration = mapOf( - "org.jetbrains.dokka.base.DokkaBase" to """{ "templatesDir" : "${ - project.rootProject.projectDir.toString().replace('\\', '/') - }/dokka-templates" }""" - ) +private fun Project.configureDokkaTemplatesDir() { + dokka { + pluginsConfiguration.html { + templatesDir = rootDir.resolve("dokka-templates") + } + } } diff --git a/buildSrc/src/main/kotlin/knit-conventions.gradle.kts b/buildSrc/src/main/kotlin/knit-conventions.gradle.kts index e606a514da..7264cb022a 100644 --- a/buildSrc/src/main/kotlin/knit-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/knit-conventions.gradle.kts @@ -5,16 +5,10 @@ plugins { knit { siteRoot = "https://kotlinlang.org/api/kotlinx.coroutines" moduleRoots = listOf(".", "integration", "reactive", "ui") - moduleDocs = "build/dokka/htmlPartial" - dokkaMultiModuleRoot = "build/dokka/htmlMultiModule/" + moduleDocs = "build/dokka-module/html/module" + dokkaMultiModuleRoot = "build/dokka/html/" } -tasks.named("knitPrepare").configure { - val knitTask = this - // In order for knit to operate, it should depend on and collect - // all Dokka outputs from each module - allprojects { - val dokkaTasks = tasks.matching { it.name == "dokkaHtmlMultiModule" } - knitTask.dependsOn(dokkaTasks) - } +tasks.named("knitPrepare") { + dependsOn("dokkaGenerate") } diff --git a/gradle.properties b/gradle.properties index a8b540f763..442b47e4e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,10 @@ junit_version=4.12 junit5_version=5.7.0 knit_version=0.5.0 lincheck_version=2.18.1 -dokka_version=1.9.20 +dokka_version=2.0.0 +org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled +org.jetbrains.dokka.experimental.gradle.pluginMode.nowarn=true + byte_buddy_version=1.10.9 reactor_version=3.4.1 reactor_docs_version=3.4.5 diff --git a/kotlinx-coroutines-core/build.gradle.kts b/kotlinx-coroutines-core/build.gradle.kts index a6968e701d..07fb22c640 100644 --- a/kotlinx-coroutines-core/build.gradle.kts +++ b/kotlinx-coroutines-core/build.gradle.kts @@ -3,6 +3,7 @@ import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.dokka.gradle.tasks.DokkaBaseTask import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.native.tasks.* import org.jetbrains.kotlin.gradle.tasks.* @@ -287,7 +288,7 @@ artifacts { } // Workaround for https://github.com/Kotlin/dokka/issues/1833: make implicit dependency explicit -tasks.named("dokkaHtmlPartial") { +tasks.withType() { dependsOn(jvmJar) } diff --git a/reactive/kotlinx-coroutines-rx2/build.gradle.kts b/reactive/kotlinx-coroutines-rx2/build.gradle.kts index bc7ac285a4..8fae3b9b15 100644 --- a/reactive/kotlinx-coroutines-rx2/build.gradle.kts +++ b/reactive/kotlinx-coroutines-rx2/build.gradle.kts @@ -1,20 +1,10 @@ -import org.jetbrains.dokka.gradle.DokkaTaskPartial -import java.net.* - dependencies { api(project(":kotlinx-coroutines-reactive")) testImplementation("org.reactivestreams:reactive-streams-tck:${version("reactive_streams")}") api("io.reactivex.rxjava2:rxjava:${version("rxjava2")}") } -tasks.withType(DokkaTaskPartial::class) { - dokkaSourceSets.configureEach { - externalDocumentationLink { - url = URL("http://reactivex.io/RxJava/2.x/javadoc/") - packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() - } - } -} +externalDocumentationLink("http://reactivex.io/RxJava/2.x/javadoc/") val testNG by tasks.registering(Test::class) { useTestNG() diff --git a/reactive/kotlinx-coroutines-rx3/build.gradle.kts b/reactive/kotlinx-coroutines-rx3/build.gradle.kts index f88d2ecb30..e42cc1f6ac 100644 --- a/reactive/kotlinx-coroutines-rx3/build.gradle.kts +++ b/reactive/kotlinx-coroutines-rx3/build.gradle.kts @@ -1,20 +1,10 @@ -import org.jetbrains.dokka.gradle.DokkaTaskPartial -import java.net.* - dependencies { api(project(":kotlinx-coroutines-reactive")) testImplementation("org.reactivestreams:reactive-streams-tck:${version("reactive_streams")}") api("io.reactivex.rxjava3:rxjava:${version("rxjava3")}") } -tasks.withType(DokkaTaskPartial::class) { - dokkaSourceSets.configureEach { - externalDocumentationLink { - url = URL("https://reactivex.io/RxJava/3.x/javadoc/") - packageListUrl = projectDir.toPath().resolve("package.list").toUri().toURL() - } - } -} +externalDocumentationLink("http://reactivex.io/RxJava/3.x/javadoc/") val testNG by tasks.registering(Test::class) { useTestNG() diff --git a/site/stdlib.package.list b/site/stdlib.package.list deleted file mode 100644 index 3108a5c074..0000000000 --- a/site/stdlib.package.list +++ /dev/null @@ -1,229 +0,0 @@ -$dokka.format:kotlin-website-html -$dokka.linkExtension:html -$dokka.location:kotlin$and(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/and.html -$dokka.location:kotlin$dec(java.math.BigDecimal)kotlin/java.math.-big-decimal/dec.html -$dokka.location:kotlin$dec(java.math.BigInteger)kotlin/java.math.-big-integer/dec.html -$dokka.location:kotlin$div(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/div.html -$dokka.location:kotlin$div(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/div.html -$dokka.location:kotlin$inc(java.math.BigDecimal)kotlin/java.math.-big-decimal/inc.html -$dokka.location:kotlin$inc(java.math.BigInteger)kotlin/java.math.-big-integer/inc.html -$dokka.location:kotlin$inv(java.math.BigInteger)kotlin/java.math.-big-integer/inv.html -$dokka.location:kotlin$minus(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/minus.html -$dokka.location:kotlin$minus(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/minus.html -$dokka.location:kotlin$mod(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/mod.html -$dokka.location:kotlin$or(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/or.html -$dokka.location:kotlin$plus(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/plus.html -$dokka.location:kotlin$plus(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/plus.html -$dokka.location:kotlin$rem(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/rem.html -$dokka.location:kotlin$rem(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/rem.html -$dokka.location:kotlin$shl(java.math.BigInteger, kotlin.Int)kotlin/java.math.-big-integer/shl.html -$dokka.location:kotlin$shr(java.math.BigInteger, kotlin.Int)kotlin/java.math.-big-integer/shr.html -$dokka.location:kotlin$times(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/times.html -$dokka.location:kotlin$times(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/times.html -$dokka.location:kotlin$toBigDecimal(java.math.BigInteger)kotlin/java.math.-big-integer/to-big-decimal.html -$dokka.location:kotlin$toBigDecimal(java.math.BigInteger, kotlin.Int, java.math.MathContext)kotlin/java.math.-big-integer/to-big-decimal.html -$dokka.location:kotlin$unaryMinus(java.math.BigDecimal)kotlin/java.math.-big-decimal/unary-minus.html -$dokka.location:kotlin$unaryMinus(java.math.BigInteger)kotlin/java.math.-big-integer/unary-minus.html -$dokka.location:kotlin$xor(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/xor.html -$dokka.location:kotlin.ArithmeticExceptionkotlin/-arithmetic-exception/index.html -$dokka.location:kotlin.AssertionErrorkotlin/-assertion-error/index.html -$dokka.location:kotlin.ClassCastExceptionkotlin/-class-cast-exception/index.html -$dokka.location:kotlin.Comparatorkotlin/-comparator/index.html -$dokka.location:kotlin.ConcurrentModificationExceptionkotlin/-concurrent-modification-exception/index.html -$dokka.location:kotlin.Errorkotlin/-error/index.html -$dokka.location:kotlin.Exceptionkotlin/-exception/index.html -$dokka.location:kotlin.IllegalArgumentExceptionkotlin/-illegal-argument-exception/index.html -$dokka.location:kotlin.IllegalStateExceptionkotlin/-illegal-state-exception/index.html -$dokka.location:kotlin.IndexOutOfBoundsExceptionkotlin/-index-out-of-bounds-exception/index.html -$dokka.location:kotlin.NoSuchElementExceptionkotlin/-no-such-element-exception/index.html -$dokka.location:kotlin.NullPointerExceptionkotlin/-null-pointer-exception/index.html -$dokka.location:kotlin.NumberFormatExceptionkotlin/-number-format-exception/index.html -$dokka.location:kotlin.RuntimeExceptionkotlin/-runtime-exception/index.html -$dokka.location:kotlin.Synchronizedkotlin/-synchronized/index.html -$dokka.location:kotlin.UnsupportedOperationExceptionkotlin/-unsupported-operation-exception/index.html -$dokka.location:kotlin.Volatilekotlin/-volatile/index.html -$dokka.location:kotlin.collections$getOrPut(java.util.concurrent.ConcurrentMap((kotlin.collections.getOrPut.K, kotlin.collections.getOrPut.V)), kotlin.collections.getOrPut.K, kotlin.Function0((kotlin.collections.getOrPut.V)))kotlin.collections/java.util.concurrent.-concurrent-map/get-or-put.html -$dokka.location:kotlin.collections$iterator(java.util.Enumeration((kotlin.collections.iterator.T)))kotlin.collections/java.util.-enumeration/iterator.html -$dokka.location:kotlin.collections$toList(java.util.Enumeration((kotlin.collections.toList.T)))kotlin.collections/java.util.-enumeration/to-list.html -$dokka.location:kotlin.collections.ArrayListkotlin.collections/-array-list/index.html -$dokka.location:kotlin.collections.HashMapkotlin.collections/-hash-map/index.html -$dokka.location:kotlin.collections.HashSetkotlin.collections/-hash-set/index.html -$dokka.location:kotlin.collections.LinkedHashMapkotlin.collections/-linked-hash-map/index.html -$dokka.location:kotlin.collections.LinkedHashSetkotlin.collections/-linked-hash-set/index.html -$dokka.location:kotlin.concurrent$getOrSet(java.lang.ThreadLocal((kotlin.concurrent.getOrSet.T)), kotlin.Function0((kotlin.concurrent.getOrSet.T)))kotlin.concurrent/java.lang.-thread-local/get-or-set.html -$dokka.location:kotlin.concurrent$read(java.util.concurrent.locks.ReentrantReadWriteLock, kotlin.Function0((kotlin.concurrent.read.T)))kotlin.concurrent/java.util.concurrent.locks.-reentrant-read-write-lock/read.html -$dokka.location:kotlin.concurrent$schedule(java.util.Timer, java.util.Date, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule.html -$dokka.location:kotlin.concurrent$schedule(java.util.Timer, java.util.Date, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule.html -$dokka.location:kotlin.concurrent$schedule(java.util.Timer, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule.html -$dokka.location:kotlin.concurrent$schedule(java.util.Timer, kotlin.Long, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule.html -$dokka.location:kotlin.concurrent$scheduleAtFixedRate(java.util.Timer, java.util.Date, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule-at-fixed-rate.html -$dokka.location:kotlin.concurrent$scheduleAtFixedRate(java.util.Timer, kotlin.Long, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule-at-fixed-rate.html -$dokka.location:kotlin.concurrent$withLock(java.util.concurrent.locks.Lock, kotlin.Function0((kotlin.concurrent.withLock.T)))kotlin.concurrent/java.util.concurrent.locks.-lock/with-lock.html -$dokka.location:kotlin.concurrent$write(java.util.concurrent.locks.ReentrantReadWriteLock, kotlin.Function0((kotlin.concurrent.write.T)))kotlin.concurrent/java.util.concurrent.locks.-reentrant-read-write-lock/write.html -$dokka.location:kotlin.io$appendBytes(java.io.File, kotlin.ByteArray)kotlin.io/java.io.-file/append-bytes.html -$dokka.location:kotlin.io$appendText(java.io.File, kotlin.String, java.nio.charset.Charset)kotlin.io/java.io.-file/append-text.html -$dokka.location:kotlin.io$buffered(java.io.InputStream, kotlin.Int)kotlin.io/java.io.-input-stream/buffered.html -$dokka.location:kotlin.io$buffered(java.io.OutputStream, kotlin.Int)kotlin.io/java.io.-output-stream/buffered.html -$dokka.location:kotlin.io$buffered(java.io.Reader, kotlin.Int)kotlin.io/java.io.-reader/buffered.html -$dokka.location:kotlin.io$buffered(java.io.Writer, kotlin.Int)kotlin.io/java.io.-writer/buffered.html -$dokka.location:kotlin.io$bufferedReader(java.io.File, java.nio.charset.Charset, kotlin.Int)kotlin.io/java.io.-file/buffered-reader.html -$dokka.location:kotlin.io$bufferedReader(java.io.InputStream, java.nio.charset.Charset)kotlin.io/java.io.-input-stream/buffered-reader.html -$dokka.location:kotlin.io$bufferedWriter(java.io.File, java.nio.charset.Charset, kotlin.Int)kotlin.io/java.io.-file/buffered-writer.html -$dokka.location:kotlin.io$bufferedWriter(java.io.OutputStream, java.nio.charset.Charset)kotlin.io/java.io.-output-stream/buffered-writer.html -$dokka.location:kotlin.io$copyRecursively(java.io.File, java.io.File, kotlin.Boolean, kotlin.Function2((java.io.File, java.io.IOException, kotlin.io.OnErrorAction)))kotlin.io/java.io.-file/copy-recursively.html -$dokka.location:kotlin.io$copyTo(java.io.File, java.io.File, kotlin.Boolean, kotlin.Int)kotlin.io/java.io.-file/copy-to.html -$dokka.location:kotlin.io$copyTo(java.io.InputStream, java.io.OutputStream, kotlin.Int)kotlin.io/java.io.-input-stream/copy-to.html -$dokka.location:kotlin.io$copyTo(java.io.Reader, java.io.Writer, kotlin.Int)kotlin.io/java.io.-reader/copy-to.html -$dokka.location:kotlin.io$deleteRecursively(java.io.File)kotlin.io/java.io.-file/delete-recursively.html -$dokka.location:kotlin.io$endsWith(java.io.File, java.io.File)kotlin.io/java.io.-file/ends-with.html -$dokka.location:kotlin.io$endsWith(java.io.File, kotlin.String)kotlin.io/java.io.-file/ends-with.html -$dokka.location:kotlin.io$extension#java.io.Filekotlin.io/java.io.-file/extension.html -$dokka.location:kotlin.io$forEachBlock(java.io.File, kotlin.Function2((kotlin.ByteArray, kotlin.Int, kotlin.Unit)))kotlin.io/java.io.-file/for-each-block.html -$dokka.location:kotlin.io$forEachBlock(java.io.File, kotlin.Int, kotlin.Function2((kotlin.ByteArray, kotlin.Int, kotlin.Unit)))kotlin.io/java.io.-file/for-each-block.html -$dokka.location:kotlin.io$forEachLine(java.io.File, java.nio.charset.Charset, kotlin.Function1((kotlin.String, kotlin.Unit)))kotlin.io/java.io.-file/for-each-line.html -$dokka.location:kotlin.io$forEachLine(java.io.Reader, kotlin.Function1((kotlin.String, kotlin.Unit)))kotlin.io/java.io.-reader/for-each-line.html -$dokka.location:kotlin.io$inputStream(java.io.File)kotlin.io/java.io.-file/input-stream.html -$dokka.location:kotlin.io$invariantSeparatorsPath#java.io.Filekotlin.io/java.io.-file/invariant-separators-path.html -$dokka.location:kotlin.io$isRooted#java.io.Filekotlin.io/java.io.-file/is-rooted.html -$dokka.location:kotlin.io$iterator(java.io.BufferedInputStream)kotlin.io/java.io.-buffered-input-stream/iterator.html -$dokka.location:kotlin.io$lineSequence(java.io.BufferedReader)kotlin.io/java.io.-buffered-reader/line-sequence.html -$dokka.location:kotlin.io$nameWithoutExtension#java.io.Filekotlin.io/java.io.-file/name-without-extension.html -$dokka.location:kotlin.io$normalize(java.io.File)kotlin.io/java.io.-file/normalize.html -$dokka.location:kotlin.io$outputStream(java.io.File)kotlin.io/java.io.-file/output-stream.html -$dokka.location:kotlin.io$printWriter(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/print-writer.html -$dokka.location:kotlin.io$readBytes(java.io.File)kotlin.io/java.io.-file/read-bytes.html -$dokka.location:kotlin.io$readBytes(java.io.InputStream)kotlin.io/java.io.-input-stream/read-bytes.html -$dokka.location:kotlin.io$readBytes(java.io.InputStream, kotlin.Int)kotlin.io/java.io.-input-stream/read-bytes.html -$dokka.location:kotlin.io$readBytes(java.net.URL)kotlin.io/java.net.-u-r-l/read-bytes.html -$dokka.location:kotlin.io$readLines(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/read-lines.html -$dokka.location:kotlin.io$readLines(java.io.Reader)kotlin.io/java.io.-reader/read-lines.html -$dokka.location:kotlin.io$readText(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/read-text.html -$dokka.location:kotlin.io$readText(java.io.Reader)kotlin.io/java.io.-reader/read-text.html -$dokka.location:kotlin.io$readText(java.net.URL, java.nio.charset.Charset)kotlin.io/java.net.-u-r-l/read-text.html -$dokka.location:kotlin.io$reader(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/reader.html -$dokka.location:kotlin.io$reader(java.io.InputStream, java.nio.charset.Charset)kotlin.io/java.io.-input-stream/reader.html -$dokka.location:kotlin.io$relativeTo(java.io.File, java.io.File)kotlin.io/java.io.-file/relative-to.html -$dokka.location:kotlin.io$relativeToOrNull(java.io.File, java.io.File)kotlin.io/java.io.-file/relative-to-or-null.html -$dokka.location:kotlin.io$relativeToOrSelf(java.io.File, java.io.File)kotlin.io/java.io.-file/relative-to-or-self.html -$dokka.location:kotlin.io$resolve(java.io.File, java.io.File)kotlin.io/java.io.-file/resolve.html -$dokka.location:kotlin.io$resolve(java.io.File, kotlin.String)kotlin.io/java.io.-file/resolve.html -$dokka.location:kotlin.io$resolveSibling(java.io.File, java.io.File)kotlin.io/java.io.-file/resolve-sibling.html -$dokka.location:kotlin.io$resolveSibling(java.io.File, kotlin.String)kotlin.io/java.io.-file/resolve-sibling.html -$dokka.location:kotlin.io$startsWith(java.io.File, java.io.File)kotlin.io/java.io.-file/starts-with.html -$dokka.location:kotlin.io$startsWith(java.io.File, kotlin.String)kotlin.io/java.io.-file/starts-with.html -$dokka.location:kotlin.io$toRelativeString(java.io.File, java.io.File)kotlin.io/java.io.-file/to-relative-string.html -$dokka.location:kotlin.io$useLines(java.io.File, java.nio.charset.Charset, kotlin.Function1((kotlin.sequences.Sequence((kotlin.String)), kotlin.io.useLines.T)))kotlin.io/java.io.-file/use-lines.html -$dokka.location:kotlin.io$useLines(java.io.Reader, kotlin.Function1((kotlin.sequences.Sequence((kotlin.String)), kotlin.io.useLines.T)))kotlin.io/java.io.-reader/use-lines.html -$dokka.location:kotlin.io$walk(java.io.File, kotlin.io.FileWalkDirection)kotlin.io/java.io.-file/walk.html -$dokka.location:kotlin.io$walkBottomUp(java.io.File)kotlin.io/java.io.-file/walk-bottom-up.html -$dokka.location:kotlin.io$walkTopDown(java.io.File)kotlin.io/java.io.-file/walk-top-down.html -$dokka.location:kotlin.io$writeBytes(java.io.File, kotlin.ByteArray)kotlin.io/java.io.-file/write-bytes.html -$dokka.location:kotlin.io$writeText(java.io.File, kotlin.String, java.nio.charset.Charset)kotlin.io/java.io.-file/write-text.html -$dokka.location:kotlin.io$writer(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/writer.html -$dokka.location:kotlin.io$writer(java.io.OutputStream, java.nio.charset.Charset)kotlin.io/java.io.-output-stream/writer.html -$dokka.location:kotlin.jvm$kotlin#java.lang.Class((kotlin.jvm.kotlin.T))kotlin.jvm/java.lang.-class/kotlin.html -$dokka.location:kotlin.random$asKotlinRandom(java.util.Random)kotlin.random/java.util.-random/as-kotlin-random.html -$dokka.location:kotlin.reflect.KAnnotatedElementkotlin.reflect/-k-annotated-element/index.html -$dokka.location:kotlin.reflect.KDeclarationContainerkotlin.reflect/-k-declaration-container/index.html -$dokka.location:kotlin.reflect.KFunctionkotlin.reflect/-k-function/index.html -$dokka.location:kotlin.reflect.KMutablePropertykotlin.reflect/-k-mutable-property/index.html -$dokka.location:kotlin.reflect.KPropertykotlin.reflect/-k-property/index.html -$dokka.location:kotlin.reflect.jvm$kotlinFunction#java.lang.reflect.Constructor((kotlin.reflect.jvm.kotlinFunction.T))kotlin.reflect.jvm/java.lang.reflect.-constructor/kotlin-function.html -$dokka.location:kotlin.reflect.jvm$kotlinFunction#java.lang.reflect.Methodkotlin.reflect.jvm/java.lang.reflect.-method/kotlin-function.html -$dokka.location:kotlin.reflect.jvm$kotlinProperty#java.lang.reflect.Fieldkotlin.reflect.jvm/java.lang.reflect.-field/kotlin-property.html -$dokka.location:kotlin.sequences$asSequence(java.util.Enumeration((kotlin.sequences.asSequence.T)))kotlin.sequences/java.util.-enumeration/as-sequence.html -$dokka.location:kotlin.streams$asSequence(java.util.stream.DoubleStream)kotlin.streams/java.util.stream.-double-stream/as-sequence.html -$dokka.location:kotlin.streams$asSequence(java.util.stream.IntStream)kotlin.streams/java.util.stream.-int-stream/as-sequence.html -$dokka.location:kotlin.streams$asSequence(java.util.stream.LongStream)kotlin.streams/java.util.stream.-long-stream/as-sequence.html -$dokka.location:kotlin.streams$asSequence(java.util.stream.Stream((kotlin.streams.asSequence.T)))kotlin.streams/java.util.stream.-stream/as-sequence.html -$dokka.location:kotlin.streams$asStream(kotlin.sequences.Sequence((kotlin.streams.asStream.T)))kotlin.streams/kotlin.sequences.-sequence/as-stream.html -$dokka.location:kotlin.streams$toList(java.util.stream.DoubleStream)kotlin.streams/java.util.stream.-double-stream/to-list.html -$dokka.location:kotlin.streams$toList(java.util.stream.IntStream)kotlin.streams/java.util.stream.-int-stream/to-list.html -$dokka.location:kotlin.streams$toList(java.util.stream.LongStream)kotlin.streams/java.util.stream.-long-stream/to-list.html -$dokka.location:kotlin.streams$toList(java.util.stream.Stream((kotlin.streams.toList.T)))kotlin.streams/java.util.stream.-stream/to-list.html -$dokka.location:kotlin.text$appendRange(java.lang.StringBuilder, kotlin.CharArray, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/append-range.html -$dokka.location:kotlin.text$appendRange(java.lang.StringBuilder, kotlin.CharSequence, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/append-range.html -$dokka.location:kotlin.text$appendln(java.lang.Appendable)kotlin.text/java.lang.-appendable/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.Appendable, kotlin.Char)kotlin.text/java.lang.-appendable/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.Appendable, kotlin.CharSequence)kotlin.text/java.lang.-appendable/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuffer)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Any)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Boolean)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Byte)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Char)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.CharArray)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.CharSequence)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Double)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Float)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Int)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Long)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Short)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.String)kotlin.text/java.lang.-string-builder/appendln.html -$dokka.location:kotlin.text$clear(java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/clear.html -$dokka.location:kotlin.text$deleteAt(java.lang.StringBuilder, kotlin.Int)kotlin.text/java.lang.-string-builder/delete-at.html -$dokka.location:kotlin.text$deleteRange(java.lang.StringBuilder, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/delete-range.html -$dokka.location:kotlin.text$insertRange(java.lang.StringBuilder, kotlin.Int, kotlin.CharArray, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/insert-range.html -$dokka.location:kotlin.text$insertRange(java.lang.StringBuilder, kotlin.Int, kotlin.CharSequence, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/insert-range.html -$dokka.location:kotlin.text$set(java.lang.StringBuilder, kotlin.Int, kotlin.Char)kotlin.text/java.lang.-string-builder/set.html -$dokka.location:kotlin.text$setRange(java.lang.StringBuilder, kotlin.Int, kotlin.Int, kotlin.String)kotlin.text/java.lang.-string-builder/set-range.html -$dokka.location:kotlin.text$toCharArray(java.lang.StringBuilder, kotlin.CharArray, kotlin.Int, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/to-char-array.html -$dokka.location:kotlin.text$toRegex(java.util.regex.Pattern)kotlin.text/java.util.regex.-pattern/to-regex.html -$dokka.location:kotlin.text.Appendablekotlin.text/-appendable/index.html -$dokka.location:kotlin.text.CharacterCodingExceptionkotlin.text/-character-coding-exception/index.html -$dokka.location:kotlin.text.StringBuilderkotlin.text/-string-builder/index.html -$dokka.location:kotlin.time$toKotlinDuration(java.time.Duration)kotlin.time/java.time.-duration/to-kotlin-duration.html -$dokka.location:kotlin.time.DurationUnitkotlin.time/-duration-unit/index.html -$dokka.location:kotlin.time.MonoClockkotlin.time/-mono-clock/index.html -kotlin -kotlin.annotation -kotlin.browser -kotlin.collections -kotlin.comparisons -kotlin.concurrent -kotlin.contracts -kotlin.coroutines -kotlin.coroutines.experimental -kotlin.coroutines.experimental.intrinsics -kotlin.coroutines.intrinsics -kotlin.dom -kotlin.experimental -kotlin.io -kotlin.js -kotlin.jvm -kotlin.math -kotlin.native -kotlin.native.concurrent -kotlin.native.ref -kotlin.properties -kotlin.random -kotlin.ranges -kotlin.reflect -kotlin.reflect.full -kotlin.reflect.jvm -kotlin.sequences -kotlin.streams -kotlin.system -kotlin.text -kotlin.time -kotlinx.cinterop -kotlinx.cinterop.internal -kotlinx.wasm.jsinterop -org.khronos.webgl -org.w3c.css.masking -org.w3c.dom -org.w3c.dom.clipboard -org.w3c.dom.css -org.w3c.dom.events -org.w3c.dom.mediacapture -org.w3c.dom.parsing -org.w3c.dom.pointerevents -org.w3c.dom.svg -org.w3c.dom.url -org.w3c.fetch -org.w3c.files -org.w3c.notifications -org.w3c.performance -org.w3c.workers -org.w3c.xhr