From 5527be00db846303a0dddef6a0b96c9b9823ab94 Mon Sep 17 00:00:00 2001 From: mvicsokolova <82594708+mvicsokolova@users.noreply.github.com> Date: Mon, 16 May 2022 16:20:49 +0300 Subject: [PATCH] Add compiler plugin dependency only for projects with KGP >= 1.6.20 (#226) * Add compiler plugin dependency only for projects with KGP >= 1.6.20 Fixes #225 * fixup --- .../plugin/gradle/AtomicFUGradlePlugin.kt | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/atomicfu-gradle-plugin/src/main/kotlin/kotlinx/atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt b/atomicfu-gradle-plugin/src/main/kotlin/kotlinx/atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt index b1dd098d..baeffd17 100644 --- a/atomicfu-gradle-plugin/src/main/kotlin/kotlinx/atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt +++ b/atomicfu-gradle-plugin/src/main/kotlin/kotlinx/atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt @@ -34,7 +34,7 @@ open class AtomicFUGradlePlugin : Plugin { val pluginVersion = rootProject.buildscript.configurations.findByName("classpath") ?.allDependencies?.find { it.name == "atomicfu-gradle-plugin" }?.version extensions.add(EXTENSION_NAME, AtomicFUPluginExtension(pluginVersion)) - if (rootProject.getBooleanProperty(ENABLE_IR_TRANSFORMATION)) { + if (rootProject.getBooleanProperty(ENABLE_IR_TRANSFORMATION) && isCompilerPluginAvailable()) { plugins.apply(AtomicfuKotlinGradleSubplugin::class.java) } configureDependencies() @@ -86,6 +86,15 @@ private fun Project.configureTasks() { } } +private fun Project.isCompilerPluginAvailable(): Boolean { + // kotlinx-atomicfu compiler plugin is available for KGP >= 1.6.20 + val (majorVersion, minorVersion, patch) = getKotlinPluginVersion() + .split('.') + .take(3) + .map { it.toInt() } + return majorVersion == 1 && (minorVersion == 6 && patch >= 20 || minorVersion > 6) +} + private fun Project.getBooleanProperty(name: String) = rootProject.findProperty(name)?.toString()?.toBooleanStrict() ?: false @@ -101,15 +110,15 @@ private fun Project.needsJsIrTransformation(target: KotlinTarget): Boolean = private fun KotlinTarget.isJsIrTarget() = (this is KotlinJsTarget && this.irTarget != null) || this is KotlinJsIrTarget private fun Project.addCompilerPluginDependency() { - val kotlinVersion = rootProject.buildscript.configurations.findByName("classpath") - ?.allDependencies?.find { it.name == "kotlin-gradle-plugin" }?.version - withKotlinTargets { target -> - if (needsJsIrTransformation(target)) { - target.compilations.forEach { kotlinCompilation -> - kotlinCompilation.dependencies { - // add atomicfu compiler plugin dependency - // to provide the `kotlinx-atomicfu-runtime` library used during compiler plugin transformation - compileOnly("org.jetbrains.kotlin:atomicfu:$kotlinVersion") + if (isCompilerPluginAvailable()) { + withKotlinTargets { target -> + if (needsJsIrTransformation(target)) { + target.compilations.forEach { kotlinCompilation -> + kotlinCompilation.dependencies { + // add atomicfu compiler plugin dependency + // to provide the `kotlinx-atomicfu-runtime` library used during compiler plugin transformation + compileOnly("org.jetbrains.kotlin:atomicfu:${getKotlinPluginVersion()}") + } } } }