diff --git a/slack-plugin/src/main/kotlin/slack/gradle/SlackExtension.kt b/slack-plugin/src/main/kotlin/slack/gradle/SlackExtension.kt index 7e4f58fe..fd3ba4a0 100644 --- a/slack-plugin/src/main/kotlin/slack/gradle/SlackExtension.kt +++ b/slack-plugin/src/main/kotlin/slack/gradle/SlackExtension.kt @@ -933,6 +933,12 @@ constructor( composeBundleAlias?.let { project.dependencies.add("implementation", it) } } + if (slackProperties.composeStabilityConfigurationPath.isPresent) { + extension.stabilityConfigurationFile.setDisallowChanges( + slackProperties.composeStabilityConfigurationPath + ) + } + // Because the Compose Compiler plugin auto applies common options for us, we need to know // about those options and _avoid_ setting them a second time val freeOptions = mutableListOf() @@ -978,7 +984,9 @@ constructor( } "stabilityConfigurationPath" -> { - extension.stabilityConfigurationFile.set(project.file(v)) + error( + "Use the 'sgp.compose.stabilityConfigurationPath' Gradle property to specify a stability configuration path" + ) } "traceMarkersEnabled" -> { diff --git a/slack-plugin/src/main/kotlin/slack/gradle/SlackProperties.kt b/slack-plugin/src/main/kotlin/slack/gradle/SlackProperties.kt index 413a62c4..9f52744a 100644 --- a/slack-plugin/src/main/kotlin/slack/gradle/SlackProperties.kt +++ b/slack-plugin/src/main/kotlin/slack/gradle/SlackProperties.kt @@ -18,6 +18,7 @@ package slack.gradle import java.io.File import java.util.Locale import org.gradle.api.Project +import org.gradle.api.file.RegularFile import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.dsl.KotlinVersion import slack.gradle.anvil.AnvilMode @@ -167,6 +168,13 @@ internal constructor( .map { value -> value.split(",").map { it.trim() } } .orElse(emptyList()) + /** Relative path to a Compose stability configuration file from the _root_ project. */ + public val composeStabilityConfigurationPath: Provider + get() = + resolver.providerFor("sgp.compose.stabilityConfigurationPath").map { + project.rootProject.layout.projectDirectory.file(it) + } + /** * When this property is present, the "internalRelease" build variant will have an application id * of "com.Slack.prototype", instead of "com.Slack.internal".