in convention-plugin-ai/src/main/kotlin/ai/koog/gradle/fixups/CheckSplitPackagesPlugin.kt [41:90]
override fun apply(project: Project) {
// Create extension for configuration via DSL: checkSplitPackages { include = listOf("...") }
val ext = project.extensions.create<CheckSplitPackagesExtension>("checkSplitPackages", project)
// We defer wiring until after evaluation so that the extension is configured by the build script.
project.afterEvaluate {
val isRoot = project == project.rootProject
// Compute target projects according to extension.include when provided.
val includeList = ext.includeProjects.getOrElse(emptySet()).map { it.trim() }.filter { it.isNotEmpty() }
val baseTargets: Iterable<Project> = if (isRoot) project.subprojects else listOf(project)
val targetProjects: Iterable<Project> = if (includeList.isEmpty()) {
baseTargets
} else {
// Match by exact project name or any occurrence in the Gradle path (e.g., ":agents:")
val includeSet = includeList.toSet()
val all = if (isRoot) project.subprojects else listOf(project)
all.filter { p ->
p.name in includeSet || includeList.any { inc -> p.path.contains(inc) }
}
}
// Register per-project task where a classpath exists
val shouldFail = ext.failOnError.get()
val packagePrefixes =
ext.includePackages.getOrElse(emptySet()).map { it.trim() }.filter { it.isNotEmpty() }.toSet()
targetProjects.forEach { subproj ->
configureProject(subproj, shouldFail, packagePrefixes)
}
// Aggregate task at the root
if (isRoot) {
// Provide a root-level task named 'checkSplitPackages' so `./gradlew checkSplitPackages` aggregates.
project.tasks.register("checkSplitPackages") {
group = "verification"
description = "Aggregates split package checks across selected subprojects."
dependsOn(
project.provider {
targetProjects.mapNotNull { sp ->
sp.tasks.findByName("checkSplitPackages")
?: sp.tasks.matching { it.name == "checkSplitPackages" }.singleOrNull()
}
}
)
}
}
}
}