@@ -18,9 +18,11 @@ package com.google.samples.apps.nowinandroid
18
18
19
19
import com.android.build.api.dsl.CommonExtension
20
20
import 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
21
24
import 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
24
26
25
27
/* *
26
28
* Configure Compose-specific options
@@ -33,10 +35,6 @@ internal fun Project.configureAndroidCompose(
33
35
compose = true
34
36
}
35
37
36
- composeOptions {
37
- kotlinCompilerExtensionVersion = libs.findVersion(" androidxComposeCompiler" ).get().toString()
38
- }
39
-
40
38
dependencies {
41
39
val bom = libs.findLibrary(" androidx-compose-bom" ).get()
42
40
add(" implementation" , platform(bom))
@@ -53,48 +51,22 @@ internal fun Project.configureAndroidCompose(
53
51
}
54
52
}
55
53
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) }
64
59
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)
78
63
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)
88
67
89
- return metricParameters.toList()
68
+ stabilityConfigurationFile = rootProject.layout.projectDirectory.file(" compose_compiler_config.conf" )
69
+
70
+ enableStrongSkippingMode = true
71
+ }
90
72
}
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