Skip to content

Commit a15798d

Browse files
authored
[gradle] Set custom freeCompilerArgs only for the old compiler plugin. (#5129)
Fixes https://youtrack.jetbrains.com/issue/CMP-5835 ## Release Notes ### Fixes - Gradle Plugin - Fix a gradle project misconfiguration when KSP and Room are used.
1 parent aa52511 commit a15798d

File tree

2 files changed

+35
-34
lines changed

2 files changed

+35
-34
lines changed

gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposeCompilerKotlinSupportPlugin.kt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import org.jetbrains.compose.internal.KOTLIN_JVM_PLUGIN_ID
1414
import org.jetbrains.compose.internal.KOTLIN_MPP_PLUGIN_ID
1515
import org.jetbrains.compose.internal.Version
1616
import org.jetbrains.compose.internal.ideaIsInSyncProvider
17+
import org.jetbrains.compose.internal.mppExtOrNull
1718
import org.jetbrains.compose.internal.webExt
19+
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
1820
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin
1921
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
2022
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
@@ -52,6 +54,32 @@ private fun Project.configureComposeCompilerPlugin(kgp: KotlinBasePlugin) {
5254
if (Version.fromString(kgpVersion) < Version.fromString(newCompilerIsAvailableVersion)) {
5355
logger.info("Apply ComposeCompilerKotlinSupportPlugin (KGP version = $kgpVersion)")
5456
project.plugins.apply(ComposeCompilerKotlinSupportPlugin::class.java)
57+
58+
//legacy logic applied for Kotlin < 2.0 only
59+
project.afterEvaluate {
60+
val composeExtension = project.extensions.getByType(ComposeExtension::class.java)
61+
project.tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinCompile::class.java).configureEach {
62+
it.kotlinOptions.apply {
63+
freeCompilerArgs = freeCompilerArgs +
64+
composeExtension.kotlinCompilerPluginArgs.get().flatMap { arg ->
65+
listOf("-P", "plugin:androidx.compose.compiler.plugins.kotlin:$arg")
66+
}
67+
}
68+
}
69+
70+
val hasAnyWebTarget = project.mppExtOrNull?.targets?.firstOrNull {
71+
it.platformType == KotlinPlatformType.js ||
72+
it.platformType == KotlinPlatformType.wasm
73+
} != null
74+
if (hasAnyWebTarget) {
75+
// currently k/wasm compile task is covered by KotlinJsCompile type
76+
project.tasks.withType(KotlinJsCompile::class.java).configureEach {
77+
it.kotlinOptions.freeCompilerArgs += listOf(
78+
"-Xklib-enable-signature-clash-checks=false",
79+
)
80+
}
81+
}
82+
}
5583
} else {
5684
//There is no other way to check that the plugin WASN'T applied!
5785
afterEvaluate {
@@ -76,8 +104,8 @@ class ComposeCompilerKotlinSupportPlugin : KotlinCompilerPluginSupportPlugin {
76104
val composeExt = target.extensions.getByType(ComposeExtension::class.java)
77105

78106
composeCompilerArtifactProvider = ComposeCompilerArtifactProvider {
79-
composeExt.kotlinCompilerPlugin.orNull ?:
80-
ComposeCompilerCompatibility.compilerVersionFor(target.getKotlinPluginVersion())
107+
composeExt.kotlinCompilerPlugin.orNull
108+
?: ComposeCompilerCompatibility.compilerVersionFor(target.getKotlinPluginVersion())
81109
}
82110

83111
applicableForPlatformTypes = composeExt.platformTypes

gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/ComposePlugin.kt

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,16 @@ import org.jetbrains.compose.desktop.DesktopExtension
1919
import org.jetbrains.compose.desktop.application.internal.configureDesktop
2020
import org.jetbrains.compose.desktop.preview.internal.initializePreview
2121
import org.jetbrains.compose.experimental.dsl.ExperimentalExtension
22-
import org.jetbrains.compose.experimental.internal.*
23-
import org.jetbrains.compose.internal.*
22+
import org.jetbrains.compose.experimental.internal.configureExperimentalTargetsFlagsCheck
23+
import org.jetbrains.compose.internal.KOTLIN_MPP_PLUGIN_ID
24+
import org.jetbrains.compose.internal.mppExt
2425
import org.jetbrains.compose.internal.utils.currentTarget
2526
import org.jetbrains.compose.resources.ResourcesExtension
2627
import org.jetbrains.compose.resources.configureComposeResources
2728
import org.jetbrains.compose.web.WebExtension
2829
import org.jetbrains.compose.web.internal.configureWeb
29-
import org.jetbrains.kotlin.com.github.gundy.semver4j.SemVer
30-
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
31-
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile
32-
import org.jetbrains.kotlin.gradle.plugin.*
30+
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
31+
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
3332

3433
internal val composeVersion get() = ComposeBuildConfig.composeVersion
3534

@@ -61,32 +60,6 @@ abstract class ComposePlugin : Plugin<Project> {
6160
val mppExt = project.mppExt
6261
project.configureExperimentalTargetsFlagsCheck(mppExt)
6362
}
64-
65-
project.tasks.withType(KotlinCompile::class.java).configureEach {
66-
it.kotlinOptions.apply {
67-
freeCompilerArgs = freeCompilerArgs +
68-
composeExtension.kotlinCompilerPluginArgs.get().flatMap { arg ->
69-
listOf("-P", "plugin:androidx.compose.compiler.plugins.kotlin:$arg")
70-
}
71-
}
72-
}
73-
74-
disableSignatureClashCheck(project)
75-
}
76-
}
77-
78-
private fun disableSignatureClashCheck(project: Project) {
79-
val hasAnyWebTarget = project.mppExtOrNull?.targets?.firstOrNull {
80-
it.platformType == KotlinPlatformType.js ||
81-
it.platformType == KotlinPlatformType.wasm
82-
} != null
83-
if (hasAnyWebTarget) {
84-
// currently k/wasm compile task is covered by KotlinJsCompile type
85-
project.tasks.withType(KotlinJsCompile::class.java).configureEach {
86-
it.kotlinOptions.freeCompilerArgs += listOf(
87-
"-Xklib-enable-signature-clash-checks=false",
88-
)
89-
}
9063
}
9164
}
9265

0 commit comments

Comments
 (0)