diff --git a/plugins/kotlin/base/external-build-system/kotlin.base.external-build-system.iml b/plugins/kotlin/base/external-build-system/kotlin.base.external-build-system.iml
index 897100571d1f..e40d8029f650 100644
--- a/plugins/kotlin/base/external-build-system/kotlin.base.external-build-system.iml
+++ b/plugins/kotlin/base/external-build-system/kotlin.base.external-build-system.iml
@@ -16,5 +16,6 @@
+
\ No newline at end of file
diff --git a/plugins/kotlin/base/external-build-system/src/org/jetbrains/kotlin/idea/base/externalSystem/KotlinBuildSystemFacade.kt b/plugins/kotlin/base/external-build-system/src/org/jetbrains/kotlin/idea/base/externalSystem/KotlinBuildSystemFacade.kt
index 343dd935872a..00414756b64c 100644
--- a/plugins/kotlin/base/external-build-system/src/org/jetbrains/kotlin/idea/base/externalSystem/KotlinBuildSystemFacade.kt
+++ b/plugins/kotlin/base/external-build-system/src/org/jetbrains/kotlin/idea/base/externalSystem/KotlinBuildSystemFacade.kt
@@ -4,6 +4,7 @@ package org.jetbrains.kotlin.idea.base.externalSystem
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.module.Module
import com.intellij.openapi.util.IntellijInternalApi
+import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
/**
* Intended to provide build system specific information about a given project, which is not relevant
@@ -15,6 +16,11 @@ import com.intellij.openapi.util.IntellijInternalApi
interface KotlinBuildSystemFacade {
fun findSourceSet(module: Module): KotlinBuildSystemSourceSet?
+ /**
+ * See [Module.kotlinToolingVersion]
+ */
+ fun getKotlinToolingVersion(module: Module): KotlinToolingVersion?
+
companion object {
@JvmStatic
@@ -26,10 +32,54 @@ interface KotlinBuildSystemFacade {
}
}
+/**
+ * Returns the Kotlin Tooling Version as imported by an external system (such as Gradle)
+ *
+ * ## e.g., Gradle
+ * ```kotlin
+ * //build.gradle.kts
+ *
+ * plugins {
+ * kotlin("jvm") version "2.0.20-Beta01"
+ * }
+ * ```
+ *
+ * Will return "2.0.20-Beta01" as
+ * - major: 2
+ * - minor: 0
+ * - patch: 20
+ * - classifier: "Beta01"
+ * - toString: "2.0.20-Beta01"
+ *
+ * See [kotlinToolingVersion].
+ *
+ *
+ * Example Usage
+ * ```kotlin
+ * fun example(module: Module) {
+ * val version = module.kotlinToolingVersion ?: return
+ * if(version >= "1.9.20-Beta01") {
+ * // Code
+ * }
+ *
+ * if(version >= KotlinToolingVersion(1, 9, 20, "Beta01")) {
+ * // Code
+ * }
+ * }
+ * ```
+ */
+val Module.kotlinToolingVersion: KotlinToolingVersion?
+ get() = KotlinBuildSystemFacade.getInstance().getKotlinToolingVersion(this)
+
+
private class KotlinBuildSystemCompositeFacade(
private val instances: List
) : KotlinBuildSystemFacade {
override fun findSourceSet(module: Module): KotlinBuildSystemSourceSet? {
return instances.firstNotNullOfOrNull { instance -> instance.findSourceSet(module) }
}
+
+ override fun getKotlinToolingVersion(module: Module): KotlinToolingVersion? {
+ return instances.firstNotNullOfOrNull { instance -> instance.getKotlinToolingVersion(module) }
+ }
}
\ No newline at end of file
diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/KotlinGradleBuildSystemFacade.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/KotlinGradleBuildSystemFacade.kt
index 6a9589200aa5..f83c8a7000f7 100644
--- a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/KotlinGradleBuildSystemFacade.kt
+++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/KotlinGradleBuildSystemFacade.kt
@@ -5,8 +5,10 @@ import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.base.externalSystem.KotlinBuildSystemFacade
import org.jetbrains.kotlin.idea.base.externalSystem.KotlinBuildSystemSourceSet
import org.jetbrains.kotlin.idea.gradle.configuration.kotlinSourceSetData
+import org.jetbrains.kotlin.idea.gradleTooling.toKotlinToolingVersion
import org.jetbrains.kotlin.idea.projectModel.KotlinCompilation
import org.jetbrains.kotlin.idea.projectModel.KotlinSourceSet
+import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
import org.jetbrains.plugins.gradle.execution.build.CachedModuleDataFinder
internal class KotlinGradleBuildSystemFacade : KotlinBuildSystemFacade {
@@ -23,4 +25,8 @@ internal class KotlinGradleBuildSystemFacade : KotlinBuildSystemFacade {
sourceDirectories = kotlinSourceSet.sourceDirs.map { file -> file.toPath() }
)
}
+
+ override fun getKotlinToolingVersion(module: Module): KotlinToolingVersion? {
+ return module.kotlinGradlePluginVersion?.toKotlinToolingVersion()
+ }
}
\ No newline at end of file
diff --git a/plugins/kotlin/test-framework/test/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/plugins/kotlin/test-framework/test/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
index 248bd1921bc6..2298c6ed6496 100644
--- a/plugins/kotlin/test-framework/test/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
+++ b/plugins/kotlin/test-framework/test/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt
@@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea.multiplatform
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.StdModuleTypes
-import com.intellij.openapi.observable.util.whenDisposed
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.LocalFileSystem
@@ -18,15 +17,13 @@ import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmJsLibraryKind
import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmWasiLibraryKind
import org.jetbrains.kotlin.idea.base.plugin.artifacts.TestKotlinArtifacts
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
-import org.jetbrains.kotlin.idea.test.AbstractMultiModuleTest
-import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
-import org.jetbrains.kotlin.idea.test.KotlinTestUtils
-import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
-import org.jetbrains.kotlin.idea.test.createMultiplatformFacetM1
-import org.jetbrains.kotlin.idea.test.createMultiplatformFacetM3
+import org.jetbrains.kotlin.idea.test.*
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.util.sourceRoots
-import org.jetbrains.kotlin.platform.*
+import org.jetbrains.kotlin.platform.CommonPlatforms
+import org.jetbrains.kotlin.platform.TargetPlatform
+import org.jetbrains.kotlin.platform.isCommon
+import org.jetbrains.kotlin.platform.isJs
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.jvm.isJvm
@@ -37,6 +34,7 @@ import org.jetbrains.kotlin.platform.wasm.isWasmJs
import org.jetbrains.kotlin.platform.wasm.isWasmWasi
import org.jetbrains.kotlin.projectModel.*
import org.jetbrains.kotlin.test.TestJdkKind
+import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
import org.jetbrains.kotlin.utils.closure
import java.io.File
@@ -254,6 +252,10 @@ private fun AbstractMultiModuleTest.setupKotlinBuildSystemFacade() {
name = module.name,
sourceDirectories = module.sourceRoots.map { it.toNioPath() }
)
+
+ override fun getKotlinToolingVersion(module: Module): KotlinToolingVersion? {
+ return null
+ }
}, testRootDisposable)
}