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

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