/*
 * Copyright 2016-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

// Configures generation of JavaDoc & Dokka artifacts

def makeLinkMapping(dokka, projectDir) {
    dokka.linkMapping {
        def relPath = rootProject.projectDir.toPath().relativize(projectDir.toPath())
        dir = "$projectDir/src"
        url = "https://github.com/kotlin/kotlinx.coroutines/tree/master/$relPath/src"
        suffix = "#L"
    }
}

configurations {
    dokkaStubs.extendsFrom compileOnly
    configureKotlinJvmPlatform(dokkaStubs)
}

apply plugin: 'org.jetbrains.dokka'

tasks.withType(dokka.getClass()) {
    jdkVersion = 8
    includes = ['README.md']
}

dependencies {
    dokkaStubs project(":stdlib-stubs")
}


dokka {
    kotlinTasks { [] }
    outputFormat = 'kotlin-website'
    dependsOn(project.configurations.dokkaStubs)

    if (project.name != "kotlinx-coroutines-core") {
        dependsOn(project.configurations.compileClasspath)
        dependsOn(project.sourceSets.main.output)
        afterEvaluate {
            classpath = project.configurations.dokkaStubs.files + project.configurations.compileClasspath.files + project.sourceSets.main.output.files
        }
    }
}

if (project.name == "kotlinx-coroutines-core") {
    // Custom configuration for MPP modules
    dependencies {
        dokkaStubs project(":js-stub") // so that JS library reference can resolve properly
        dokkaStubs project(":kotlinx-coroutines-core")
    }

    dokka {
        kotlinTasks { [] }
        suppressedModifiers = ['actual']
        makeLinkMapping(it, projectDir)
        makeLinkMapping(it, project.file("js"))
        makeLinkMapping(it, project.file("jvm"))
        makeLinkMapping(it, project.file("native"))
        makeLinkMapping(it, project.file("common"))
        // source roots
        impliedPlatforms = ['JVM', 'JS', 'Native']
        sourceRoot {
            path = rootProject.file("$project.name/common/src")
        }
        sourceRoot {
            path = rootProject.file("$project.name/jvm/src")
            platforms = ['JVM']
        }
        sourceRoot {
            path = rootProject.file("$project.name/js/src")
            platforms = ['JS']
        }
        sourceRoot {
            path = rootProject.file("$project.name/native/src")
            platforms = ['Native']
        }
        doFirst {
            classpath = project.configurations.dokkaStubs.files +
                    project.configurations.jvmCompileClasspath.files +
                    project.kotlin.targets.jvm.compilations.main.output.allOutputs
        }
    }
}
