Fix opt-in usage error shown in IntelliJ IDEA for some of the project files (#4160)
* Use kotlin extension-level DSL for global args and opt-ins
Applying free compiler arguments and opt-ins only to
compilations leaves source sets that don't have any
compilations misconfigured in the IDE. This includes
shared test source sets and the special jdk8 source set.
KGP 2.0.0 introduces an extension-level DSL that sets
defaults for all source sets and provides a way to
configure them properly.
The arguments in the compilation conventions were kept.
The pure JVM compilations still need the arguments,
but they are not affected by the new multiplatform
extension DSL.
See https://youtrack.jetbrains.com/issue/KT-68642
diff --git a/buildSrc/src/main/kotlin/GlobalKotlinCompilerOptions.kt b/buildSrc/src/main/kotlin/GlobalKotlinCompilerOptions.kt
new file mode 100644
index 0000000..5e16671
--- /dev/null
+++ b/buildSrc/src/main/kotlin/GlobalKotlinCompilerOptions.kt
@@ -0,0 +1,14 @@
+import org.jetbrains.kotlin.gradle.dsl.KotlinCommonCompilerOptions
+
+internal fun KotlinCommonCompilerOptions.configureGlobalKotlinArgumentsAndOptIns() {
+ freeCompilerArgs.addAll("-progressive")
+ optIn.addAll(
+ "kotlin.experimental.ExperimentalTypeInference",
+ // our own opt-ins that we don't want to bother with in our own code:
+ "kotlinx.coroutines.DelicateCoroutinesApi",
+ "kotlinx.coroutines.ExperimentalCoroutinesApi",
+ "kotlinx.coroutines.ObsoleteCoroutinesApi",
+ "kotlinx.coroutines.InternalCoroutinesApi",
+ "kotlinx.coroutines.FlowPreview"
+ )
+}
diff --git a/buildSrc/src/main/kotlin/configure-compilation-conventions.gradle.kts b/buildSrc/src/main/kotlin/configure-compilation-conventions.gradle.kts
index 26ffe11..50f584f 100644
--- a/buildSrc/src/main/kotlin/configure-compilation-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/configure-compilation-conventions.gradle.kts
@@ -1,7 +1,4 @@
-import org.jetbrains.kotlin.gradle.dsl.*
-import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
import org.jetbrains.kotlin.gradle.tasks.*
-import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
configure(subprojects) {
val project = this
@@ -39,17 +36,6 @@
"kotlin.experimental.ExperimentalNativeApi",
)
}
- freeCompilerArgs.addAll("-progressive", "-Xexpect-actual-classes")
- optIn.addAll(
- "kotlin.experimental.ExperimentalTypeInference",
- "kotlin.ExperimentalMultiplatform",
- // our own opt-ins that we don't want to bother with in our own code:
- "kotlinx.coroutines.DelicateCoroutinesApi",
- "kotlinx.coroutines.ExperimentalCoroutinesApi",
- "kotlinx.coroutines.ObsoleteCoroutinesApi",
- "kotlinx.coroutines.InternalCoroutinesApi",
- "kotlinx.coroutines.FlowPreview"
- )
}
}
diff --git a/buildSrc/src/main/kotlin/kotlin-jvm-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-jvm-conventions.gradle.kts
index 34c45d1..e467865 100644
--- a/buildSrc/src/main/kotlin/kotlin-jvm-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/kotlin-jvm-conventions.gradle.kts
@@ -15,6 +15,7 @@
kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_1_8
+ configureGlobalKotlinArgumentsAndOptIns()
}
jvmToolchain(jdkToolchainVersion)
}
diff --git a/buildSrc/src/main/kotlin/kotlin-multiplatform-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-multiplatform-conventions.gradle.kts
index 9e9fdf6..273bf10 100644
--- a/buildSrc/src/main/kotlin/kotlin-multiplatform-conventions.gradle.kts
+++ b/buildSrc/src/main/kotlin/kotlin-multiplatform-conventions.gradle.kts
@@ -123,6 +123,13 @@
groupSourceSets("jsAndWasmJsShared", listOf("js", "wasmJs"), emptyList())
groupSourceSets("jsAndWasmShared", listOf("jsAndWasmJsShared", "wasmWasi"), listOf("common"))
}
+
+ @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
+ compilerOptions {
+ configureGlobalKotlinArgumentsAndOptIns()
+ freeCompilerArgs.add("-Xexpect-actual-classes")
+ optIn.add("kotlin.ExperimentalMultiplatform")
+ }
}
// Disable intermediate sourceSet compilation because we do not need js-wasm common artifact