xref: /aosp_15_r20/external/robolectric/buildSrc/src/main/java/ProvideBuildClasspathTask.kt (revision e6ba16074e6af37d123cb567d575f496bf0a58ee)

<lambda>null1*e6ba1607SAndroid Build Coastguard Worker import java.io.File
2*e6ba1607SAndroid Build Coastguard Worker import java.util.Properties
3*e6ba1607SAndroid Build Coastguard Worker import org.gradle.api.DefaultTask
4*e6ba1607SAndroid Build Coastguard Worker import org.gradle.api.tasks.OutputFile
5*e6ba1607SAndroid Build Coastguard Worker import org.gradle.api.tasks.TaskAction
6*e6ba1607SAndroid Build Coastguard Worker 
7*e6ba1607SAndroid Build Coastguard Worker abstract class ProvideBuildClasspathTask : DefaultTask() {
8*e6ba1607SAndroid Build Coastguard Worker   @get:OutputFile abstract var outFile: File
9*e6ba1607SAndroid Build Coastguard Worker 
10*e6ba1607SAndroid Build Coastguard Worker   @TaskAction
11*e6ba1607SAndroid Build Coastguard Worker   @Throws(Exception::class)
12*e6ba1607SAndroid Build Coastguard Worker   fun writeProperties() {
13*e6ba1607SAndroid Build Coastguard Worker     val props = Properties()
14*e6ba1607SAndroid Build Coastguard Worker     val usePreinstrumentedJars = System.getProperty(PREINSTRUMENTED_KEY, "true").toBoolean()
15*e6ba1607SAndroid Build Coastguard Worker 
16*e6ba1607SAndroid Build Coastguard Worker     AndroidSdk.ALL_SDKS.forEach { androidSdk ->
17*e6ba1607SAndroid Build Coastguard Worker       val configurationName = "sdk${androidSdk.apiLevel}"
18*e6ba1607SAndroid Build Coastguard Worker       val coordinates =
19*e6ba1607SAndroid Build Coastguard Worker         if (usePreinstrumentedJars) {
20*e6ba1607SAndroid Build Coastguard Worker           androidSdk.preinstrumentedCoordinates
21*e6ba1607SAndroid Build Coastguard Worker         } else {
22*e6ba1607SAndroid Build Coastguard Worker           androidSdk.coordinates
23*e6ba1607SAndroid Build Coastguard Worker         }
24*e6ba1607SAndroid Build Coastguard Worker       val config =
25*e6ba1607SAndroid Build Coastguard Worker         project.configurations.create(configurationName) {
26*e6ba1607SAndroid Build Coastguard Worker           dependencies.add(project.dependencies.create(coordinates))
27*e6ba1607SAndroid Build Coastguard Worker         }
28*e6ba1607SAndroid Build Coastguard Worker 
29*e6ba1607SAndroid Build Coastguard Worker       props.setProperty(coordinates, config.files.joinToString(File.pathSeparator))
30*e6ba1607SAndroid Build Coastguard Worker     }
31*e6ba1607SAndroid Build Coastguard Worker 
32*e6ba1607SAndroid Build Coastguard Worker     val outDir = outFile.parentFile
33*e6ba1607SAndroid Build Coastguard Worker     if (!outDir.isDirectory) {
34*e6ba1607SAndroid Build Coastguard Worker       outDir.mkdirs()
35*e6ba1607SAndroid Build Coastguard Worker     }
36*e6ba1607SAndroid Build Coastguard Worker 
37*e6ba1607SAndroid Build Coastguard Worker     outFile.printWriter().use { out -> props.store(out, "# GENERATED by $this -- do not edit") }
38*e6ba1607SAndroid Build Coastguard Worker   }
39*e6ba1607SAndroid Build Coastguard Worker 
40*e6ba1607SAndroid Build Coastguard Worker   private companion object {
41*e6ba1607SAndroid Build Coastguard Worker     private const val PREINSTRUMENTED_KEY = "robolectric.usePreinstrumentedJars"
42*e6ba1607SAndroid Build Coastguard Worker   }
43*e6ba1607SAndroid Build Coastguard Worker }
44