aboutsummaryrefslogtreecommitdiff
path: root/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/adapters/DokkatooJavaAdapter.kt
blob: 0f83436382eb44af1fed76c427edd8af567a0c14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package org.jetbrains.dokka.dokkatoo.adapters

import org.jetbrains.dokka.dokkatoo.DokkatooExtension
import org.jetbrains.dokka.dokkatoo.internal.DokkatooInternalApi
import javax.inject.Inject
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.logging.Logging
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.kotlin.dsl.*

/**
 * Apply Java specific configuration to the Dokkatoo plugin.
 *
 * **Must be applied *after* [org.jetbrains.dokka.dokkatoo.DokkatooBasePlugin]**
 */
@DokkatooInternalApi
abstract class DokkatooJavaAdapter @Inject constructor() : Plugin<Project> {

  private val logger = Logging.getLogger(this::class.java)

  override fun apply(project: Project) {
    logger.info("applied DokkatooJavaAdapter to ${project.path}")

    // wait for the Java plugin to be applied
    project.plugins.withType<JavaBasePlugin>().configureEach {

      // fetch the toolchain, and use the language version as Dokka's jdkVersion
      val toolchainLanguageVersion = project.extensions.getByType<JavaPluginExtension>()
        .toolchain
        .languageVersion

      val dokka = project.extensions.getByType<DokkatooExtension>()
      dokka.dokkatooSourceSets.configureEach {
        jdkVersion.set(toolchainLanguageVersion.map { it.asInt() }.orElse(8))
      }
    }
  }
}