@@ -18,9 +18,11 @@ package com.google.samples.apps.nowinandroid
1818
1919import com.android.build.api.dsl.CommonExtension
2020import org.gradle.api.Project
21+ import org.gradle.api.provider.Provider
22+ import org.gradle.kotlin.dsl.assign
23+ import org.gradle.kotlin.dsl.configure
2124import org.gradle.kotlin.dsl.dependencies
22- import org.gradle.kotlin.dsl.withType
23- import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
25+ import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
2426
2527/* *
2628 * Configure Compose-specific options
@@ -33,10 +35,6 @@ internal fun Project.configureAndroidCompose(
3335 compose = true
3436 }
3537
36- composeOptions {
37- kotlinCompilerExtensionVersion = libs.findVersion(" androidxComposeCompiler" ).get().toString()
38- }
39-
4038 dependencies {
4139 val bom = libs.findLibrary(" androidx-compose-bom" ).get()
4240 add(" implementation" , platform(bom))
@@ -53,48 +51,22 @@ internal fun Project.configureAndroidCompose(
5351 }
5452 }
5553
56- tasks.withType<KotlinCompile >().configureEach {
57- kotlinOptions {
58- freeCompilerArgs + = buildComposeMetricsParameters()
59- freeCompilerArgs + = stabilityConfiguration()
60- freeCompilerArgs + = strongSkippingConfiguration()
61- }
62- }
63- }
54+ extensions.configure<ComposeCompilerGradlePluginExtension > {
55+ fun Provider<String>.onlyIfTrue () = flatMap { provider { it.takeIf (String ::toBoolean) } }
56+ fun Provider <* >.relativeToRootProject (dir : String ) = flatMap {
57+ rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir))
58+ }.map { it.dir(dir) }
6459
65- private fun Project.buildComposeMetricsParameters (): List <String > {
66- val metricParameters = mutableListOf<String >()
67- val enableMetricsProvider = project.providers.gradleProperty(" enableComposeCompilerMetrics" )
68- val relativePath = projectDir.relativeTo(rootDir)
69- val buildDir = layout.buildDirectory.get().asFile
70- val enableMetrics = (enableMetricsProvider.orNull == " true" )
71- if (enableMetrics) {
72- val metricsFolder = buildDir.resolve(" compose-metrics" ).resolve(relativePath)
73- metricParameters.add(" -P" )
74- metricParameters.add(
75- " plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath,
76- )
77- }
60+ project.providers.gradleProperty(" enableComposeCompilerMetrics" ).onlyIfTrue()
61+ .relativeToRootProject(" compose-metrics" )
62+ .let (metricsDestination::set)
7863
79- val enableReportsProvider = project.providers.gradleProperty(" enableComposeCompilerReports" )
80- val enableReports = (enableReportsProvider.orNull == " true" )
81- if (enableReports) {
82- val reportsFolder = buildDir.resolve(" compose-reports" ).resolve(relativePath)
83- metricParameters.add(" -P" )
84- metricParameters.add(
85- " plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath
86- )
87- }
64+ project.providers.gradleProperty(" enableComposeCompilerReports" ).onlyIfTrue()
65+ .relativeToRootProject(" compose-reports" )
66+ .let (reportsDestination::set)
8867
89- return metricParameters.toList()
68+ stabilityConfigurationFile = rootProject.layout.projectDirectory.file(" compose_compiler_config.conf" )
69+
70+ enableStrongSkippingMode = true
71+ }
9072}
91-
92- private fun Project.stabilityConfiguration () = listOf (
93- " -P" ,
94- " plugin:androidx.compose.compiler.plugins.kotlin:stabilityConfigurationPath=${project.rootDir.absolutePath} /compose_compiler_config.conf" ,
95- )
96-
97- private fun Project.strongSkippingConfiguration () = listOf (
98- " -P" ,
99- " plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true" ,
100- )
0 commit comments