override fun apply()

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()
                            }
                        }
                    )
                }
            }
        }
    }