Compile debug-all and debug-none example jars

Bug: b/270105162
Change-Id: If111804825043d3b74007919745ed124625bbcac
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index b1d35ac..14b417a 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -4,10 +4,8 @@
 
 import DependenciesPlugin.Companion.computeRoot
 import java.io.File
-import java.lang.Thread.sleep
 import java.net.URI
 import java.nio.file.Paths
-import java.util.concurrent.ConcurrentHashMap
 import org.gradle.api.JavaVersion
 import org.gradle.api.Plugin
 import org.gradle.api.Project
@@ -113,7 +111,6 @@
  * getExamplesJarsTaskName(examplesName) such that it can be referenced from the test runners.
  */
 fun Project.buildExampleJars(name : String) : Task {
-  val outputFiles : MutableList<File> = mutableListOf()
   val jarTasks : MutableList<Task> = mutableListOf()
   val testSourceSet = extensions
     .getByType(JavaPluginExtension::class.java)
@@ -130,45 +127,53 @@
     .files
     .forEach { srcDir ->
       srcDir.listFiles(File::isDirectory)?.forEach { exampleDir ->
-        var generationTask : Task? = null
-        if (exampleDir.resolve("TestGenerator.java").isFile) {
-          generationTask = tasks.register<JavaExec>(
-            "generate-$name-${exampleDir.name}") {
-            dependsOn("compileTestJava")
-            mainClass.set("${exampleDir.name}.TestGenerator")
-            classpath = files(
-              classesOutput,
-              testSourceSet.compileClasspath)
-            args(classesOutput.toString())
-          }.get()
+        arrayOf("compileTestJava", "debuginfo-all", "debuginfo-none").forEach { taskName ->
+          if (!project.getTasksByName(taskName, false).isEmpty()) {
+            var generationTask : Task? = null
+            val taskSpecificClassesOutput = getOutputName(classesOutput.toString(), taskName)
+            if (exampleDir.resolve("TestGenerator.java").isFile) {
+              generationTask = tasks.register<JavaExec>(
+                "generate-$name-${exampleDir.name}-$taskName") {
+                dependsOn(taskName)
+                mainClass.set("${exampleDir.name}.TestGenerator")
+                classpath = files(taskSpecificClassesOutput, testSourceSet.compileClasspath)
+                args(taskSpecificClassesOutput)
+              }.get()
+            }
+            jarTasks.add(tasks.register<Jar>("jar-$name-${exampleDir.name}-$taskName") {
+              dependsOn(taskName)
+              if (generationTask != null) {
+                dependsOn(generationTask)
+              }
+              archiveFileName.set("${getOutputName(exampleDir.name, taskName)}.jar")
+              destinationDirectory.set(destinationDir)
+              from(taskSpecificClassesOutput) {
+                include("${exampleDir.name}/**/*.class")
+                exclude("**/TestGenerator*")
+              }
+              // Copy additional resources into the jar.
+              from(exampleDir) {
+                exclude("**/*.java")
+                exclude("**/keep-rules*.txt")
+                into(exampleDir.name)
+              }
+            }.get())
+          }
         }
-        jarTasks.add(tasks.register<Jar>(
-          "jar-$name-${exampleDir.name}") {
-          dependsOn("compileTestJava")
-          if (generationTask != null) {
-            dependsOn(generationTask)
-          }
-          archiveFileName.set("${exampleDir.name}.jar")
-          destinationDirectory.set(destinationDir)
-          from(classesOutput) {
-            include("${exampleDir.name}/**/*.class")
-            exclude("**/TestGenerator*")
-          }
-          // Copy additional resources into the jar.
-          from (exampleDir) {
-            exclude("**/*.java")
-            exclude("**/keep-rules*.txt")
-            into(exampleDir.name)
-          }
-        }.get())
       }
     }
   return tasks.register(getExampleJarsTaskName(name)) {
     dependsOn(jarTasks.toTypedArray())
-    outputs.files(outputFiles)
   }.get()
 }
 
+fun getOutputName(dest: String, taskName: String) : String {
+  if (taskName.equals("compileTestJava")) {
+    return dest
+  }
+  return "${dest}_${taskName.replace('-', '_')}"
+}
+
 fun Project.getExampleJarsTaskName(name: String) : String {
   return "build-example-jars-$name"
 }
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index c7837c0..d101246 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -69,4 +69,9 @@
              "--map",
              "kotlinx.metadata->com.android.tools.r8.jetbrains.kotlinx.metadata"))
   }
-}
+
+  withType<Test> {
+    environment.put("USE_NEW_GRADLE_SETUP", "true")
+    dependsOn(gradle.includedBuild("tests_java_8").task(":test"))
+  }
+}
\ No newline at end of file
diff --git a/d8_r8/test_modules/tests_java_8/build.gradle.kts b/d8_r8/test_modules/tests_java_8/build.gradle.kts
index c77fae8..eb0b582 100644
--- a/d8_r8/test_modules/tests_java_8/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_8/build.gradle.kts
@@ -117,11 +117,10 @@
     .test
     .get()
     .compileClasspath
-    .filter({ "$it".contains("keepanno") ||
-      ("$it".contains("third_party")
-      && !"$it".contains("errorprone")
-      && !"$it".contains("gradle"))
-            })
+    .filter({"$it".contains("keepanno") ||
+            ("$it".contains("third_party")
+              && !"$it".contains("errorprone")
+              && !"$it".contains("gradle"))})
 }
 
 tasks {
diff --git a/d8_r8/test_modules/tests_java_examples/build.gradle.kts b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
index 1169c9a..95a9105 100644
--- a/d8_r8/test_modules/tests_java_examples/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_examples/build.gradle.kts
@@ -26,21 +26,32 @@
   testCompileOnly(Deps.mockito)
 }
 
-// We just need to register the examples jars for it to be referenced by other modules.
-val buildExampleJars = buildExampleJars("examples")
-
 val thirdPartyCompileDependenciesTask = ensureThirdPartyDependencies(
   "compileDeps",
   listOf(Jdk.JDK_11.getThirdPartyDependency()))
 
 tasks {
-  withType<JavaCompile> {
-    dependsOn(thirdPartyCompileDependenciesTask)
-    options.setFork(true)
-    options.forkOptions.memoryMaximumSize = "3g"
-    options.forkOptions.jvmArgs = listOf(
-      "-Xss256m",
-      // Set the bootclass path so compilation is consistent with 1.8 target compatibility.
-      "-Xbootclasspath/a:third_party/openjdk/openjdk-rt-1.8/rt.jar")
+  compileTestJava {
+    options.compilerArgs = listOf("-g:source,lines")
+  }
+
+  register<JavaCompile>("debuginfo-all") {
+    source = sourceSets.test.get().allSource
+    include("**/*.java")
+    classpath = sourceSets.test.get().compileClasspath
+    destinationDirectory.set(getRoot().resolveAll("build","test","examples","classes_debuginfo_all"))
+    options.compilerArgs = listOf("-g")
+  }
+
+  register<JavaCompile>("debuginfo-none") {
+    source = sourceSets.test.get().allSource
+    include("**/*.java")
+    classpath = sourceSets.test.get().compileClasspath
+    destinationDirectory.set(getRoot().resolveAll("build","test","examples","classes_debuginfo_none"))
+    options.compilerArgs = listOf("-g:none")
   }
 }
+
+// We just need to register the examples jars for it to be referenced by other modules. This should
+// be placed after all task registrations.
+val buildExampleJars = buildExampleJars("examples")