From 3021008b5f3d677fd9e2ec32eaf9fda34811bb95 Mon Sep 17 00:00:00 2001 From: mvicsokolova Date: Tue, 16 Aug 2022 08:12:04 +0000 Subject: [PATCH] Enable JS/JVM IR transformation by atomicfu-compiler-plugin according to the flag set in the project. Merge-request: KT-MR-6865 Merged-by: Maria Sokolova --- .../gradle/AtomicfuKotlinGradleSubplugin.kt | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/libraries/tools/atomicfu/src/common/kotlin/org/jetbrains/kotlinx/atomicfu/gradle/AtomicfuKotlinGradleSubplugin.kt b/libraries/tools/atomicfu/src/common/kotlin/org/jetbrains/kotlinx/atomicfu/gradle/AtomicfuKotlinGradleSubplugin.kt index 05f76c7b3e6..d1571419d18 100644 --- a/libraries/tools/atomicfu/src/common/kotlin/org/jetbrains/kotlinx/atomicfu/gradle/AtomicfuKotlinGradleSubplugin.kt +++ b/libraries/tools/atomicfu/src/common/kotlin/org/jetbrains/kotlinx/atomicfu/gradle/AtomicfuKotlinGradleSubplugin.kt @@ -16,24 +16,47 @@ package org.jetbrains.kotlinx.atomicfu.gradle +import org.gradle.api.GradleException +import org.gradle.api.Project import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.plugin.* +private const val EXTENSION_NAME = "atomicfuCompilerPlugin" + class AtomicfuKotlinGradleSubplugin : KotlinCompilerPluginSupportPlugin { companion object { const val ATOMICFU_ARTIFACT_NAME = "atomicfu" } - override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true + override fun apply(target: Project) { + target.extensions.create(EXTENSION_NAME, AtomicfuKotlinGradleExtension::class.java) + super.apply(target) + } + + override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean { + val project = kotlinCompilation.target.project + val config = project.extensions.getByType(AtomicfuKotlinGradleExtension::class.java) + return (config.isJsIrTransformationEnabled && kotlinCompilation.target.isJs()) || + (config.isJvmIrTransformationEnabled && kotlinCompilation.target.isJvm()) + } override fun applyToCompilation( kotlinCompilation: KotlinCompilation<*> ): Provider> = kotlinCompilation.target.project.provider { emptyList() } + open class AtomicfuKotlinGradleExtension { + var isJsIrTransformationEnabled = false + var isJvmIrTransformationEnabled = false + } + override fun getPluginArtifact(): SubpluginArtifact = JetBrainsSubpluginArtifact(ATOMICFU_ARTIFACT_NAME) override fun getCompilerPluginId() = "org.jetbrains.kotlinx.atomicfu" -} \ No newline at end of file + + private fun KotlinTarget.isJs() = platformType == KotlinPlatformType.js + + private fun KotlinTarget.isJvm() = platformType == KotlinPlatformType.jvm || platformType == KotlinPlatformType.androidJvm +}