dotanuki-labs/norris

View on GitHub
gradle/plugins/src/main/kotlin/io/dotanuki/norris/gradle/modules/conventions/KotlinConventions.kt

Summary

Maintainability
A
1 hr
Test Coverage
package io.dotanuki.norris.gradle.modules.conventions

import io.dotanuki.norris.gradle.modules.models.PlatformDefinitions
import org.gradle.api.Project
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

internal fun Project.applyKotlinProjectConventions() {

    val platform = PlatformDefinitions.from(this)
    val javaCompatibility = platform.javaCompatibilityVersion.toString()

    val kotlinCompilerFlags =
        listOf(
            "-opt-in=kotlin.time.ExperimentalTime",
            "-opt-in=kotlin.RequiresOptIn",
            "-Xstring-concat=inline",
            "-Xcontext-receivers"
        )

    kotlinExtension.jvmToolchain {
        languageVersion.set(platform.targetJdkVersion)
        vendor.set(platform.targetJdkVendor)
    }

    tasks.run {
        withType<KotlinCompile>().configureEach {
            kotlinOptions.jvmTarget = javaCompatibility
            kotlinOptions.freeCompilerArgs += kotlinCompilerFlags
            kotlinOptions.allWarningsAsErrors = false
        }

        withType<JavaCompile>().configureEach {
            targetCompatibility = javaCompatibility
            sourceCompatibility = javaCompatibility
        }
    }
}