mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-04 12:57:00 +08:00
157 lines
5.3 KiB
Kotlin
157 lines
5.3 KiB
Kotlin
@file:Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
|
|
|
|
import org.gradle.api.JavaVersion
|
|
import org.gradle.api.Project
|
|
import org.gradle.api.plugins.JavaPluginExtension
|
|
import org.gradle.api.tasks.compile.JavaCompile
|
|
import org.gradle.api.tasks.testing.Test
|
|
import org.gradle.kotlin.dsl.*
|
|
import org.jetbrains.kotlin.gradle.dsl.*
|
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
|
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
|
|
|
|
|
fun Project.useIr() {
|
|
kotlinCompilations?.forEach { kotlinCompilation ->
|
|
kotlinCompilation.kotlinOptions.freeCompilerArgs += "-Xuse-ir"
|
|
}
|
|
}
|
|
|
|
@Suppress("NOTHING_TO_INLINE") // or error
|
|
fun Project.configureJvmTarget() {
|
|
tasks.withType(KotlinJvmCompile::class.java) {
|
|
kotlinOptions.jvmTarget = "1.8"
|
|
}
|
|
|
|
kotlinTargets.orEmpty().filterIsInstance<KotlinJvmTarget>().forEach { target ->
|
|
target.compilations.all {
|
|
kotlinOptions.jvmTarget = "1.8"
|
|
kotlinOptions.languageVersion = "1.4"
|
|
}
|
|
target.testRuns["test"].executionTask.configure { useJUnitPlatform() }
|
|
}
|
|
|
|
extensions.findByType(JavaPluginExtension::class.java)?.run {
|
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
|
targetCompatibility = JavaVersion.VERSION_1_8
|
|
}
|
|
}
|
|
|
|
fun Project.configureEncoding() {
|
|
tasks.withType(JavaCompile::class.java) {
|
|
options.encoding = "UTF8"
|
|
}
|
|
}
|
|
|
|
fun Project.configureKotlinTestSettings() {
|
|
tasks.withType(Test::class) {
|
|
useJUnitPlatform()
|
|
}
|
|
when {
|
|
isKotlinJvmProject -> {
|
|
dependencies {
|
|
"testImplementation"(kotlin("test-junit5"))
|
|
|
|
"testApi"("org.junit.jupiter:junit-jupiter-api:5.2.0")
|
|
"testRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine:5.2.0")
|
|
}
|
|
}
|
|
isKotlinMpp -> {
|
|
kotlinSourceSets?.forEach { sourceSet ->
|
|
if (sourceSet.name == "common") {
|
|
sourceSet.dependencies {
|
|
implementation(kotlin("test"))
|
|
implementation(kotlin("test-annotations-common"))
|
|
}
|
|
} else {
|
|
sourceSet.dependencies {
|
|
implementation(kotlin("test-junit5"))
|
|
|
|
implementation("org.junit.jupiter:junit-jupiter-api:5.2.0")
|
|
implementation("org.junit.jupiter:junit-jupiter-engine:5.2.0")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fun Project.configureKotlinCompilerSettings() {
|
|
val kotlinCompilations = kotlinCompilations ?: return
|
|
for (kotlinCompilation in kotlinCompilations) with(kotlinCompilation) {
|
|
if (isKotlinJvmProject) {
|
|
@Suppress("UNCHECKED_CAST")
|
|
this as KotlinCompilation<KotlinJvmOptions>
|
|
}
|
|
kotlinOptions.freeCompilerArgs += "-Xjvm-default=all"
|
|
}
|
|
}
|
|
|
|
val experimentalAnnotations = arrayOf(
|
|
"kotlin.RequiresOptIn",
|
|
"kotlin.contracts.ExperimentalContracts",
|
|
"kotlin.experimental.ExperimentalTypeInference",
|
|
"kotlin.ExperimentalUnsignedTypes",
|
|
"kotlin.time.ExperimentalTime",
|
|
"kotlin.io.path.ExperimentalPathApi",
|
|
"io.ktor.util.KtorExperimentalAPI",
|
|
|
|
"kotlinx.serialization.ExperimentalSerializationApi",
|
|
|
|
"net.mamoe.mirai.utils.MiraiInternalApi",
|
|
"net.mamoe.mirai.utils.MiraiExperimentalApi",
|
|
"net.mamoe.mirai.LowLevelApi",
|
|
"net.mamoe.mirai.utils.UnstableExternalImage",
|
|
|
|
"net.mamoe.mirai.message.data.ExperimentalMessageKey",
|
|
"net.mamoe.mirai.console.ConsoleFrontEndImplementation",
|
|
"net.mamoe.mirai.console.util.ConsoleInternalApi",
|
|
"net.mamoe.mirai.console.util.ConsoleExperimentalApi"
|
|
)
|
|
|
|
fun Project.configureKotlinExperimentalUsages() {
|
|
val sourceSets = kotlinSourceSets ?: return
|
|
|
|
for (target in sourceSets) {
|
|
target.configureKotlinExperimentalUsages()
|
|
}
|
|
}
|
|
|
|
fun KotlinSourceSet.configureKotlinExperimentalUsages() {
|
|
languageSettings.progressiveMode = true
|
|
languageSettings.enableLanguageFeature("InlineClasses")
|
|
experimentalAnnotations.forEach { a ->
|
|
languageSettings.useExperimentalAnnotation(a)
|
|
}
|
|
}
|
|
|
|
fun Project.configureFlattenSourceSets() {
|
|
sourceSets {
|
|
findByName("main")?.apply {
|
|
resources.setSrcDirs(listOf(projectDir.resolve("resources")))
|
|
java.setSrcDirs(listOf(projectDir.resolve("src")))
|
|
}
|
|
findByName("test")?.apply {
|
|
resources.setSrcDirs(listOf(projectDir.resolve("resources")))
|
|
java.setSrcDirs(listOf(projectDir.resolve("test")))
|
|
}
|
|
}
|
|
}
|
|
|
|
inline fun <reified T> Any?.safeAs(): T? {
|
|
return this as? T
|
|
}
|
|
|
|
val Project.kotlinSourceSets get() = extensions.findByName("kotlin").safeAs<KotlinProjectExtension>()?.sourceSets
|
|
|
|
val Project.kotlinTargets
|
|
get() =
|
|
extensions.findByName("kotlin").safeAs<KotlinSingleTargetExtension>()?.target?.let { listOf(it) }
|
|
?: extensions.findByName("kotlin").safeAs<KotlinMultiplatformExtension>()?.targets
|
|
|
|
val Project.isKotlinJvmProject: Boolean get() = extensions.findByName("kotlin") is KotlinJvmProjectExtension
|
|
val Project.isKotlinMpp: Boolean get() = extensions.findByName("kotlin") is KotlinMultiplatformExtension
|
|
|
|
val Project.kotlinCompilations
|
|
get() = kotlinTargets?.flatMap { it.compilations } |