Skip to content

Commit 3c65caf

Browse files
authored
Support setting up the stability configuration file for the stability dupping task (#143)
1 parent 7e3eee3 commit 3c65caf

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

stability-gradle/api/stability-gradle.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public abstract class com/skydoves/compose/stability/gradle/StabilityDumpTask :
4343
public abstract fun getIgnoredPackages ()Lorg/gradle/api/provider/ListProperty;
4444
public abstract fun getOutputDir ()Lorg/gradle/api/file/DirectoryProperty;
4545
public abstract fun getProjectName ()Lorg/gradle/api/provider/Property;
46+
public abstract fun getStabilityConfigurationFiles ()Lorg/gradle/api/provider/ListProperty;
4647
public abstract fun getStabilityFileSuffix ()Lorg/gradle/api/provider/Property;
4748
public abstract fun getStabilityInputFiles ()Lorg/gradle/api/file/ConfigurableFileCollection;
4849
}

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
9696
outputDir.set(extension.stabilityValidation.outputDir)
9797
ignoredPackages.set(extension.stabilityValidation.ignoredPackages)
9898
ignoredClasses.set(extension.stabilityValidation.ignoredClasses)
99+
stabilityConfigurationFiles.set(extension.stabilityValidation.stabilityConfigurationFiles)
99100
}
100101

101102
// Register stability check task
@@ -162,6 +163,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
162163
ignoredPackages.set(extension.stabilityValidation.ignoredPackages)
163164
ignoredClasses.set(extension.stabilityValidation.ignoredClasses)
164165
stabilityFileSuffix.set(variant.name)
166+
stabilityConfigurationFiles.set(extension.stabilityValidation.stabilityConfigurationFiles)
165167
}
166168

167169
// Register stability check task

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityDumpTask.kt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ package com.skydoves.compose.stability.gradle
1818
import org.gradle.api.DefaultTask
1919
import org.gradle.api.file.ConfigurableFileCollection
2020
import org.gradle.api.file.DirectoryProperty
21+
import org.gradle.api.file.RegularFile
2122
import org.gradle.api.provider.ListProperty
2223
import org.gradle.api.provider.Property
2324
import org.gradle.api.tasks.Input
2425
import org.gradle.api.tasks.InputFiles
2526
import org.gradle.api.tasks.Optional
2627
import org.gradle.api.tasks.OutputDirectory
28+
import org.gradle.api.tasks.PathSensitive
29+
import org.gradle.api.tasks.PathSensitivity
2730
import org.gradle.api.tasks.TaskAction
2831

2932
/**
@@ -71,6 +74,11 @@ public abstract class StabilityDumpTask : DefaultTask() {
7174
@get:Optional
7275
public abstract val stabilityFileSuffix: Property<String>
7376

77+
@get:InputFiles
78+
@get:Optional
79+
@get:PathSensitive(PathSensitivity.RELATIVE)
80+
public abstract val stabilityConfigurationFiles: ListProperty<RegularFile>
81+
7482
init {
7583
group = "verification"
7684
description = "Dump composable stability information to stability file"
@@ -103,7 +111,13 @@ public abstract class StabilityDumpTask : DefaultTask() {
103111
ignoredClasses.get(),
104112
)
105113

106-
writeStabilityFile(outputFile, filtered)
114+
val stableTypeMatchers = stabilityConfigurationFiles.getOrElse(emptyList())
115+
.flatMap { configRegularFile ->
116+
StabilityConfigParser.fromFile(configRegularFile.asFile.path).stableTypeMatchers
117+
}
118+
119+
val resolved = applyStabilityConfiguration(filtered, stableTypeMatchers)
120+
writeStabilityFile(outputFile, resolved)
107121

108122
logger.lifecycle("Stability file written to: ${outputFile.absolutePath}")
109123
}
@@ -282,6 +296,26 @@ public abstract class StabilityDumpTask : DefaultTask() {
282296
}
283297
}
284298

299+
private fun applyStabilityConfiguration(
300+
entries: List<StabilityEntry>,
301+
stableTypeMatchers: Collection<FqNameMatcher>,
302+
): List<StabilityEntry> {
303+
if (stableTypeMatchers.isEmpty()) return entries
304+
305+
return entries.map { entry ->
306+
val resolvedParams = entry.parameters.map { param ->
307+
if (param.stability != "STABLE" && stableTypeMatchers.any { it.matches(param.type) }) {
308+
param.copy(stability = "STABLE", reason = "matched by stability configuration")
309+
} else {
310+
param
311+
}
312+
}
313+
val resolvedSkippable = entry.skippable ||
314+
(resolvedParams.isNotEmpty() && resolvedParams.all { it.stability == "STABLE" })
315+
entry.copy(parameters = resolvedParams, skippable = resolvedSkippable)
316+
}
317+
}
318+
285319
private fun writeStabilityFile(
286320
file: java.io.File,
287321
entries: List<StabilityEntry>,

0 commit comments

Comments
 (0)