<lambda>null1 import com.android.build.api.variant.AndroidComponentsExtension
2 import com.android.build.gradle.api.AndroidBasePlugin
3 import org.apache.tools.ant.taskdefs.condition.Os
4 import org.gradle.api.Plugin
5 import org.gradle.api.Project
6 import org.gradle.configurationcache.extensions.capitalized
7 import org.gradle.kotlin.dsl.create
8 import org.gradle.kotlin.dsl.extra
9 import org.gradle.kotlin.dsl.getByType
10 import org.gradle.kotlin.dsl.register
11 import org.gradle.kotlin.dsl.withType
12 import java.io.File
13 
14 abstract class AConfigPlugin : Plugin<Project> {
15 
16     override fun apply(project: Project) {
17         project.plugins.withType<AndroidBasePlugin> {
18             project.dependencies.add("implementation", project.project(":ModuleUtils"))
19             project.dependencies.add("implementation", project.project(":platform-compat"))
20 
21             project.extensions.create<AConfigExtension>("aconfig", project.objects)
22             val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java)
23             val androidTop = project.extra["ANDROID_TOP"].toString()
24             val platform = if (Os.isFamily(Os.FAMILY_MAC)) "darwin" else "linux"
25             androidComponents.onVariants { variant ->
26                 val variantName = variant.name.capitalized()
27                 val aconfigExtension = project.extensions.getByType<AConfigExtension>()
28                 val aconfigBin = File("$androidTop/prebuilts/build-tools/$platform-x86/bin/aconfig")
29 
30                 aconfigExtension.declarations.forEach {
31                     val pkgName = it.packageName.get()
32                     val addFlagCacheTaskProvider = project.tasks.register<AConfigCreateCacheTask>(
33                             "generate${variantName}FlagCache_$pkgName"
34                     ) {
35                         aconfigPath.set(aconfigBin)
36                         packageName = pkgName
37                         containerName = it.containerName.orNull
38                         srcFiles.setFrom(it.srcFile)
39                         outputFile.set(
40                                 project.layout.buildDirectory.file(
41                                         "intermediates/${variant.name}/aconfig/flag-cache-$pkgName.pb"
42                                 )
43                         )
44                     }
45                     val addFlagLibTaskProvider = project.tasks.register<AConfigCreateJavaLibTask>(
46                             "generate${variantName}FlagLib_$pkgName"
47                     ) {
48                         aconfigPath.set(aconfigBin)
49                         cacheFile.set(addFlagCacheTaskProvider.flatMap(AConfigCreateCacheTask::outputFile))
50                     }
51                     variant.sources.java?.addGeneratedSourceDirectory(
52                             addFlagLibTaskProvider,
53                             AConfigCreateJavaLibTask::outputFolder
54                     )
55                 }
56             }
57         }
58     }
59 }
60