diff --git a/stability-gradle/api/stability-gradle.api b/stability-gradle/api/stability-gradle.api index 83ccc5a..f5c2b2d 100644 --- a/stability-gradle/api/stability-gradle.api +++ b/stability-gradle/api/stability-gradle.api @@ -25,6 +25,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityCheckTask : public final fun check ()V public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/ListProperty; public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/ListProperty; + public abstract fun getProjectName ()Lorg/gradle/api/provider/Property; public abstract fun getStabilityDir ()Lorg/gradle/api/file/DirectoryProperty; public abstract fun getStabilityInputFile ()Lorg/gradle/api/file/RegularFileProperty; } @@ -35,6 +36,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityDumpTask : public abstract fun getIgnoredClasses ()Lorg/gradle/api/provider/ListProperty; public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/ListProperty; public abstract fun getOutputDir ()Lorg/gradle/api/file/DirectoryProperty; + public abstract fun getProjectName ()Lorg/gradle/api/provider/Property; public abstract fun getStabilityInputFile ()Lorg/gradle/api/file/RegularFileProperty; } diff --git a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt index 9e0f6c6..601bd46 100644 --- a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt +++ b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt @@ -68,6 +68,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin { "stabilityDump", StabilityDumpTask::class.java, ) { + projectName.set(target.name) stabilityInputFile.set( target.layout.buildDirectory.file("stability/stability-info.json"), ) @@ -81,6 +82,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin { "stabilityCheck", StabilityCheckTask::class.java, ) { + projectName.set(target.name) stabilityInputFile.set( target.layout.buildDirectory.file("stability/stability-info.json"), ) diff --git a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityCheckTask.kt b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityCheckTask.kt index 67ac4d8..218b08b 100644 --- a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityCheckTask.kt +++ b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityCheckTask.kt @@ -20,6 +20,7 @@ import org.gradle.api.GradleException import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction @@ -55,6 +56,12 @@ public abstract class StabilityCheckTask : DefaultTask() { @get:Input public abstract val ignoredClasses: ListProperty + /** + * Project name (captured at configuration time for configuration cache compatibility). + */ + @get:Input + public abstract val projectName: Property + init { group = "verification" description = "Check composable stability against reference file" @@ -66,7 +73,9 @@ public abstract class StabilityCheckTask : DefaultTask() { if (inputFile == null || !inputFile.exists()) { // If the file doesn't exist, it means the module has no composable functions // This is expected for modules like activities or utilities without composables - logger.lifecycle("ℹ️ No composables found in :${project.name}, skipping stability check") + logger.lifecycle( + "ℹ️ No composables found in :${projectName.get()}, skipping stability check", + ) return } @@ -75,19 +84,23 @@ public abstract class StabilityCheckTask : DefaultTask() { // Directory doesn't exist - no baseline has been created yet // This is expected for new modules or before the first stabilityDump logger.lifecycle( - "ℹ️ No stability baseline found for :${project.name}, skipping stability check", + "ℹ️ No stability baseline found for :${projectName.get()}, skipping stability check", + ) + logger.lifecycle( + " Run './gradlew :${projectName.get()}:stabilityDump' to create the baseline", ) - logger.lifecycle(" Run './gradlew :${project.name}:stabilityDump' to create the baseline") return } - val referenceFile = stabilityDirectory.resolve("${project.name}.stability") + val referenceFile = stabilityDirectory.resolve("${projectName.get()}.stability") if (!referenceFile.exists()) { // Directory exists but file doesn't - unusual but handle gracefully logger.lifecycle( - "ℹ️ No stability baseline found for :${project.name}, skipping stability check", + "ℹ️ No stability baseline found for :${projectName.get()}, skipping stability check", + ) + logger.lifecycle( + " Run './gradlew :${projectName.get()}:stabilityDump' to create the baseline", ) - logger.lifecycle(" Run './gradlew :${project.name}:stabilityDump' to create the baseline") return } diff --git a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt index 2e0f807..0fb2b00 100644 --- a/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt +++ b/stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt @@ -19,6 +19,7 @@ import org.gradle.api.DefaultTask import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.OutputDirectory @@ -55,6 +56,12 @@ public abstract class StabilityDumpTask : DefaultTask() { @get:Input public abstract val ignoredClasses: ListProperty + /** + * Project name (captured at configuration time for configuration cache compatibility). + */ + @get:Input + public abstract val projectName: Property + init { group = "verification" description = "Dump composable stability information to stability file" @@ -66,14 +73,14 @@ public abstract class StabilityDumpTask : DefaultTask() { if (inputFile == null || !inputFile.exists()) { // If the file doesn't exist, it means the module has no composable functions // This is expected for modules like activities or utilities without composables - logger.lifecycle("ℹ️ No composables found in :${project.name}, skipping stability dump") + logger.lifecycle("ℹ️ No composables found in :${projectName.get()}, skipping stability dump") return } val outputDirectory = outputDir.get().asFile outputDirectory.mkdirs() - val outputFile = outputDirectory.resolve("${project.name}.stability") + val outputFile = outputDirectory.resolve("${projectName.get()}.stability") val stabilityInfo = parseStabilityInfo(inputFile) val filtered = filterStabilityInfo( stabilityInfo, @@ -277,7 +284,7 @@ public abstract class StabilityDumpTask : DefaultTask() { writer.write("// https://github.com/skydoves/compose-stability-analyzer\n") writer.write("//\n") writer.write("// Do not edit this file directly. To update it, run:\n") - writer.write("// ./gradlew :${project.name}:stabilityDump\n") + writer.write("// ./gradlew :${projectName.get()}:stabilityDump\n") writer.write("\n") entries.sortedBy { it.qualifiedName }.forEach { entry ->