1616
1717package com.rubensousa.projectguard.plugin
1818
19+ import com.android.build.api.variant.AndroidComponentsExtension
1920import com.rubensousa.projectguard.plugin.internal.DependencyGraphBuilder
2021import com.rubensousa.projectguard.plugin.internal.task.TaskAggregateDependencyDump
2122import com.rubensousa.projectguard.plugin.internal.task.TaskAggregateRestrictionDump
@@ -53,6 +54,13 @@ class ProjectGuardPlugin : Plugin<Project> {
5354 private val dependenciesFilePath = " reports/$pluginId /dependencies.json"
5455 private val jsonReportFilePath = " reports/$pluginId /report.json"
5556 private val graphBuilder = DependencyGraphBuilder ()
57+ private val androidPluginIds = listOf (
58+ " com.android.test" ,
59+ " com.android.application" ,
60+ " com.android.library" ,
61+ " com.android.dynamic-feature" ,
62+ " com.android.kotlin.multiplatform.library"
63+ )
5664
5765 override fun apply (target : Project ) {
5866 val rootProject = target.rootProject
@@ -71,6 +79,8 @@ class ProjectGuardPlugin : Plugin<Project> {
7179 individualModuleTasks.add(moduleTasks)
7280 setupModuleTasks(
7381 aggregationTasks = aggregationTasks,
82+ project = targetProject,
83+ extension = extension,
7484 moduleTasks = moduleTasks
7585 )
7686 }
@@ -93,6 +103,8 @@ class ProjectGuardPlugin : Plugin<Project> {
93103 }
94104
95105 private fun setupModuleTasks (
106+ project : Project ,
107+ extension : ProjectGuardExtension ,
96108 aggregationTasks : AggregationTasks ,
97109 moduleTasks : ModuleTasks ,
98110 ) {
@@ -109,6 +121,43 @@ class ProjectGuardPlugin : Plugin<Project> {
109121 outputDir.set(project.layout.buildDirectory.dir(htmlAggregateReportFilePath))
110122 reportFilePath.set(getProjectReportFilePath(project))
111123 }
124+
125+ project.afterEvaluate {
126+ val options = extension.getSpec().options
127+ options.lifecycleTask?.let { lifecycleTask ->
128+ if (lifecycleTask == LifecycleTask .ASSEMBLE ) {
129+ attachToAndroidAssembleTasks(project, moduleTasks.check)
130+ project.tasks.findByName(" assemble" )?.dependsOn(moduleTasks.check)
131+ } else {
132+ project.tasks.findByName(" check" )?.dependsOn(moduleTasks.check)
133+ }
134+ }
135+ }
136+ }
137+
138+ private fun attachToAndroidAssembleTasks (
139+ project : Project ,
140+ checkTask : TaskProvider <TaskCheck >,
141+ ) {
142+ androidPluginIds.forEach { pluginId ->
143+ if (project.plugins.hasPlugin(pluginId)) {
144+ val androidComponents = project.extensions.getByType(AndroidComponentsExtension ::class .java)
145+ val variantTasks = mutableListOf<String >()
146+ androidComponents.onVariants { variant ->
147+ val variantName = capitalizeVariantName(variant.name)
148+ variantTasks.add(" assemble$variantName " )
149+ }
150+ project.afterEvaluate {
151+ variantTasks.forEach { variantTask ->
152+ project.tasks.findByName(variantTask)?.dependsOn(checkTask)
153+ }
154+ }
155+ }
156+ }
157+ }
158+
159+ private fun capitalizeVariantName (name : String ): String {
160+ return name.substring(0 , 1 ).uppercase() + name.substring(1 , name.length)
112161 }
113162
114163 private fun setupAggregationTasks (
0 commit comments