From 928376878180eb39cb3f82cb059fcb9bfad1433c Mon Sep 17 00:00:00 2001 From: mvicsokolova Date: Tue, 26 Apr 2022 20:45:36 +0300 Subject: [PATCH 1/2] Add compiler plugin dependency only for projects with KGP >= 1.6.20 Fixes #225 --- .../plugin/gradle/AtomicFUGradlePlugin.kt | 32 +++++++++++++------ 1 file changed, 22 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..e01692c1 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,18 @@ private fun Project.configureTasks() { } } +private fun Project.isCompilerPluginAvailable(): Boolean { + // kotlinx-atomicfu compiler plugin is available for KGP >= 1.6.20 + val kotlinVersion = getKotlinPluginVersion() + val versions = kotlinVersion.split('.') + val (majorVersion, minorVersion, patch) = if (versions.size > 2) { + versions.take(3).map { it.toInt() } + } else { + versions.take(2).map { it.toInt() }.plus(0) + } + return majorVersion == 1 && (minorVersion == 6 && patch >= 20 || minorVersion > 6) +} + private fun Project.getBooleanProperty(name: String) = rootProject.findProperty(name)?.toString()?.toBooleanStrict() ?: false @@ -101,15 +113,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()}") + } } } } From c753aa5378f2901786bf2cd90288b5265a49907b Mon Sep 17 00:00:00 2001 From: mvicsokolova Date: Mon, 16 May 2022 16:11:30 +0300 Subject: [PATCH 2/2] fixup --- .../atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 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 e01692c1..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 @@ -88,13 +88,10 @@ private fun Project.configureTasks() { private fun Project.isCompilerPluginAvailable(): Boolean { // kotlinx-atomicfu compiler plugin is available for KGP >= 1.6.20 - val kotlinVersion = getKotlinPluginVersion() - val versions = kotlinVersion.split('.') - val (majorVersion, minorVersion, patch) = if (versions.size > 2) { - versions.take(3).map { it.toInt() } - } else { - versions.take(2).map { it.toInt() }.plus(0) - } + val (majorVersion, minorVersion, patch) = getKotlinPluginVersion() + .split('.') + .take(3) + .map { it.toInt() } return majorVersion == 1 && (minorVersion == 6 && patch >= 20 || minorVersion > 6) }