Add diagnostic for native version
#KT-62826 Verification Pending
diff --git a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
index 70dbf3c..3bec85a 100644
--- a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
+++ b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
@@ -79,5 +79,5 @@
// this class is ignored during classpath normalization when considering whether to recompile dependencies in Kotlin build
private object KotlinVersionCurrentValue {
@kotlin.jvm.JvmStatic
- fun get(): KotlinVersion = KotlinVersion(2, 1, 255) // value is written here automatically during build
+ fun get(): KotlinVersion = KotlinVersion(2, 1, 205) // value is written here automatically during build
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt
index 9660589..dd56c99 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/KotlinToolingDiagnostics.kt
@@ -25,6 +25,7 @@
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV1
import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2
import org.jetbrains.kotlin.gradle.utils.prettyName
+import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
import org.jetbrains.kotlin.utils.addToStdlib.flatGroupBy
import java.io.File
@@ -64,6 +65,14 @@
)
}
+ object NativeVersionDiagnostic : ToolingDiagnosticFactory(WARNING) {
+ operator fun invoke(nativeVersion: KotlinToolingVersion?, kotlinVersion: KotlinToolingVersion) = build(
+ "'$nativeVersion' native is being used with an older '$kotlinVersion' Kotlin. Please adjust versions to avoid incompatibilities."
+ .onlyIf(nativeVersion != null && nativeVersion > kotlinVersion)
+ )
+ }
+
+
object DeprecatedJvmWithJavaPresetDiagnostic : ToolingDiagnosticFactory(ERROR) {
operator fun invoke() = build(
"""
@@ -393,7 +402,7 @@
abstract class JsLikeEnvironmentNotChosenExplicitly(
private val environmentName: String,
- private val targetType: String
+ private val targetType: String,
) : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(availableEnvironments: List<String>) = build(
"""
@@ -1010,7 +1019,7 @@
object DeprecatedInKMPJavaPluginsDiagnostic : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(pluginId: String): ToolingDiagnostic {
- val pluginString = when(pluginId) {
+ val pluginString = when (pluginId) {
"application" -> "'$pluginId' (also applies 'java' plugin)"
"java-library" -> "'$pluginId' (also applies 'java' plugin)"
else -> "'$pluginId'"
@@ -1052,7 +1061,7 @@
)
}
- object ProjectIsolationIncompatibleWithIncludedBuildsWithOldKotlinVersion: ToolingDiagnosticFactory(WARNING) {
+ object ProjectIsolationIncompatibleWithIncludedBuildsWithOldKotlinVersion : ToolingDiagnosticFactory(WARNING) {
operator fun invoke(dependency: String, includedProjectPath: String): ToolingDiagnostic = build(
"""
Dependency '$dependency' resolved into included build project '$includedProjectPath'.
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/NativeVersionChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/NativeVersionChecker.kt
new file mode 100644
index 0000000..3ed733d
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/NativeVersionChecker.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers
+
+import org.jetbrains.kotlin.gradle.internal.properties.nativeProperties
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectChecker
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinGradleProjectCheckerContext
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics
+import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnosticsCollector
+import org.jetbrains.kotlin.gradle.plugin.kotlinToolingVersion
+import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
+
+internal object NativeVersionChecker : KotlinGradleProjectChecker {
+ override suspend fun KotlinGradleProjectCheckerContext.runChecks(collector: KotlinToolingDiagnosticsCollector) {
+ val nativeVersion = project.nativeProperties.kotlinNativeVersion.map { KotlinToolingVersion(it) }.orNull
+ val kotlinVersion = project.kotlinToolingVersion
+ collector.report(project, KotlinToolingDiagnostics.NativeVersionDiagnostic(nativeVersion, kotlinVersion))
+ }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
index 018b784..c86bc62 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt
@@ -170,6 +170,7 @@
register(project, GradleDeprecatedPropertyChecker)
register(project, OverriddenKotlinNativeHomeChecker)
register(project, ComposePluginSuggestApplyChecker)
+ register(project, NativeVersionChecker)
if (isMultiplatform) {
register(project, MultipleSourceSetRootsInCompilationChecker)