Add support for specifying if deps are test only

We only need to fetch non-test deps for archiving.

As a first step this CL marks all X20 deps as test only deps.

Change-Id: I778b49aad6830e5774c5e202c73d9cfa350b9b80
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index a0f3087..6a55c49 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -497,14 +497,16 @@
       "clank",
       Paths.get("third_party", "chrome", "clank_google3_prebuilt").toFile(),
       Paths.get("third_party", "chrome", "clank_google3_prebuilt.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val chrome =
     ThirdPartyDependency(
       "chrome",
       Paths.get("third_party", "chrome", "chrome_200430").toFile(),
       Paths.get("third_party", "chrome", "chrome_200430.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val chromeBenchmark =
     ThirdPartyDependency(
@@ -717,7 +719,8 @@
       "framework",
       Paths.get("third_party", "framework").toFile(),
       Paths.get("third_party", "framework.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val googleJavaFormat =
     ThirdPartyDependency(
@@ -830,7 +833,8 @@
       "nest",
       Paths.get("third_party", "nest", "nest_20180926_7c6cfb").toFile(),
       Paths.get("third_party", "nest", "nest_20180926_7c6cfb.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val nowinandroid =
     ThirdPartyDependency(
@@ -844,7 +848,8 @@
       "proguardsettings",
       Paths.get("third_party", "proguardsettings").toFile(),
       Paths.get("third_party", "proguardsettings.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val protoc =
     ThirdPartyDependency(
@@ -857,35 +862,40 @@
       "protoRuntimeEdition2023",
       Paths.get("third_party", "proto", "runtime", "edition2023").toFile(),
       Paths.get("third_party", "proto", "runtime", "edition2023.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val protoRuntimeLegacy =
     ThirdPartyDependency(
       "protoRuntimeLegacy",
       Paths.get("third_party", "proto", "runtime", "legacy").toFile(),
       Paths.get("third_party", "proto", "runtime", "legacy.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val protoTestEdition2023 =
     ThirdPartyDependency(
       "protoTestEdition2023",
       Paths.get("third_party", "proto", "test", "edition2023").toFile(),
       Paths.get("third_party", "proto", "test", "edition2023.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val protoTestProto2 =
     ThirdPartyDependency(
       "protoTestProto2",
       Paths.get("third_party", "proto", "test", "proto2").toFile(),
       Paths.get("third_party", "proto", "test", "proto2.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val protoTestProto3 =
     ThirdPartyDependency(
       "protoTestProto3",
       Paths.get("third_party", "proto", "test", "proto3").toFile(),
       Paths.get("third_party", "proto", "test", "proto3.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val r8 =
     ThirdPartyDependency(
@@ -940,7 +950,8 @@
       "retrace-internal",
       Paths.get("third_party", "retrace_internal").toFile(),
       Paths.get("third_party", "retrace_internal.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val rhino =
     ThirdPartyDependency(
@@ -965,7 +976,8 @@
       "systemUI",
       Paths.get("third_party", "closedsource-apps", "systemui").toFile(),
       Paths.get("third_party", "closedsource-apps", "systemui.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   val tivi =
     ThirdPartyDependency(
@@ -978,7 +990,8 @@
       "youtube-17.19",
       Paths.get("third_party", "youtube", "youtube.android_17.19").toFile(),
       Paths.get("third_party", "youtube", "youtube.android_17.19.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
 }
 
@@ -1116,7 +1129,8 @@
       "internal-$it",
       Paths.get("third_party", "internal", it).toFile(),
       Paths.get("third_party", "internal", "${it}.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   }
 }
@@ -1127,7 +1141,8 @@
       "gmscore-version-$it",
       Paths.get("third_party", "gmscore", it).toFile(),
       Paths.get("third_party", "gmscore", "${it}.tar.gz.sha1").toFile(),
-      DependencyType.X20,
+      testOnly = true,
+      type = DependencyType.X20,
     )
   }
 }
@@ -1146,11 +1161,19 @@
 }
 
 fun Project.allPublicDependencies(): List<ThirdPartyDependency> {
-  return allDependencies().filter { x -> x.type == DependencyType.GOOGLE_STORAGE }
+  return allDependencies().filter { x -> !x.testOnly && x.type == DependencyType.GOOGLE_STORAGE }
+}
+
+fun Project.allPublicTestDependencies(): List<ThirdPartyDependency> {
+  return allDependencies().filter { x -> x.testOnly && x.type == DependencyType.GOOGLE_STORAGE }
 }
 
 fun Project.allInternalDependencies(): List<ThirdPartyDependency> {
-  return allDependencies().filter { x -> x.type == DependencyType.X20 }
+  return allDependencies().filter { x -> !x.testOnly && x.type == DependencyType.X20 }
+}
+
+fun Project.allInternalTestDependencies(): List<ThirdPartyDependency> {
+  return allDependencies().filter { x -> x.testOnly && x.type == DependencyType.X20 }
 }
 
 fun extractClassesPaths(prefix: String, vararg paths: String): String {
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
index 7ea90fb..b310f08 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/ThirdPartyDependency.kt
@@ -13,5 +13,6 @@
   val packageName: String,
   val path: File,
   val sha1File: File,
+  val testOnly: Boolean = false,
   val type: DependencyType = DependencyType.GOOGLE_STORAGE,
 )
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index 205b411..5bf9a27 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -156,6 +156,7 @@
 
   val consolidatedLicense by registering {
     dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+    dependsOn(gradle.includedBuild("shared").task(":downloadTestDeps"))
     val root = getRoot()
     val r8License = root.resolve("LICENSE")
     val libraryLicense = root.resolve("LIBRARY-LICENSE")
diff --git a/d8_r8/shared/build.gradle.kts b/d8_r8/shared/build.gradle.kts
index fa66c14..7f9865d 100644
--- a/d8_r8/shared/build.gradle.kts
+++ b/d8_r8/shared/build.gradle.kts
@@ -13,7 +13,15 @@
     this.setDependencies(getRoot(), allPublicDependencies())
   }
 
+  val downloadTestDeps by registering(DownloadAllDependenciesTask::class) {
+    this.setDependencies(getRoot(), allPublicTestDependencies())
+  }
+
   val downloadDepsInternal by registering(DownloadAllDependenciesTask::class) {
     this.setDependencies(getRoot(), allInternalDependencies())
   }
+
+  val downloadTestDepsInternal by registering(DownloadAllDependenciesTask::class) {
+    this.setDependencies(getRoot(), allInternalTestDependencies())
+  }
 }
\ No newline at end of file
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 6fdc9f5..7fc5d2b 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -408,11 +408,7 @@
             rewriteTestBaseForR8LibWithRelocatedDeps,
             unzipRewrittenTests,
             unzipTests,
-            unzipTestBase,
-            gradle.includedBuild("shared").task(":downloadDeps"))
-    if (!project.hasProperty("no_internal")) {
-      dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
-    }
+            unzipTestBase)
     val r8LibJar = r8Lib.getSingleOutputFile()
     val r8LibMappingFile = file(r8LibJar.toString() + ".map")
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
@@ -467,6 +463,12 @@
   }
 
   test {
+    dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+    dependsOn(gradle.includedBuild("shared").task(":downloadTestDeps"))
+    if (!project.hasProperty("no_internal")) {
+      dependsOn(gradle.includedBuild("shared").task(":downloadDepsInternal"))
+      dependsOn(gradle.includedBuild("shared").task(":downloadTestDepsInternal"))
+    }
     if (project.hasProperty("r8lib")) {
       dependsOn(testR8LibWithRelocatedDeps)
     } else if (project.hasProperty("r8lib_no_deps")) {
diff --git a/d8_r8/test_modules/testbase/build.gradle.kts b/d8_r8/test_modules/testbase/build.gradle.kts
index 8a3c11b..620add7 100644
--- a/d8_r8/test_modules/testbase/build.gradle.kts
+++ b/d8_r8/test_modules/testbase/build.gradle.kts
@@ -84,6 +84,7 @@
     dependsOn(gradle.includedBuild("main").task(":compileJava"))
     dependsOn(gradle.includedBuild("main").task(":processResources"))
     dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+    dependsOn(gradle.includedBuild("shared").task(":downloadTestDeps"))
   }
 
   withType<JavaExec> {
@@ -108,6 +109,7 @@
 
   val depsJar by registering(Jar::class) {
     dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
+    dependsOn(gradle.includedBuild("shared").task(":downloadTestDeps"))
     dependsOn(gradle.includedBuild("keepanno").task(":jar"))
     dependsOn(gradle.includedBuild("resourceshrinker").task(":jar"))
     dependsOn(gradle.includedBuild("resourceshrinker").task(":depsJar"))