Run all Java 17 tests

This includes running the Java 17 tests which are no longer running
through the examples harness, but specified as actual tests in the
tests_java_17 test module.

This also moves the JDK used to run Gradle to JDK-17 (from JDK-11).

Fixes: b/337801526
Change-Id: I794b645794aed3a798adfc38d8af723d31730f91
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 1e7ac2b..22dc719 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -28,6 +28,7 @@
 val javaTestBaseJarTask = projectTask("testbase", "testJar")
 val javaTestBaseDepsJar = projectTask("testbase", "depsJar")
 val java8TestJarTask = projectTask("tests_java_8", "testJar")
+val java17TestJarTask = projectTask("tests_java_17", "testJar")
 val bootstrapTestsDepsJarTask = projectTask("tests_bootstrap", "depsJar")
 val testsJava8SourceSetDependenciesTask = projectTask("tests_java_8", "sourceSetDependencyTask")
 
@@ -57,7 +58,9 @@
 
   val packageTests by registering(Jar::class) {
     dependsOn(java8TestJarTask)
+    dependsOn(java17TestJarTask)
     from(java8TestJarTask.outputs.files.map(::zipTree))
+    from(java17TestJarTask.outputs.files.map(::zipTree))
     exclude("META-INF/*.kotlin_module", "**/*.kotlin_metadata")
     destinationDirectory.set(getRoot().resolveAll("build", "libs"))
     archiveFileName.set("r8tests.jar")
@@ -130,18 +133,17 @@
             targetJarProvider)
     testJarProviders.forEach(::dependsOn)
     val mainDepsJar = mainDepsJarTask.getSingleOutputFile()
-    val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
     val targetJar = targetJarProvider.getSingleOutputFile()
     val testDepsJar = packageTestDeps.getSingleOutputFile()
-    inputs.files(mainDepsJar, rtJar, r8WithRelocatedDepsJar, targetJar, testDepsJar)
+    inputs.files(mainDepsJar, r8WithRelocatedDepsJar, targetJar, testDepsJar)
     inputs.files(testJarProviders.map{it.getSingleOutputFile()})
     val output = file(Paths.get("build", "libs", artifactName))
     outputs.file(output)
     val argList = mutableListOf("--keep-rules",
                     "--allowobfuscation",
                     "--lib",
-                    "$rtJar",
+                    "${org.gradle.internal.jvm.Jvm.current().getJavaHome()}",
                     "--lib",
                     "$mainDepsJar",
                     "--lib",
@@ -278,20 +280,19 @@
             testJarProvider,
             packageTestBaseExcludeKeep)
     val keepRulesFile = keepRulesFileProvider.getSingleOutputFile()
-    val rtJar = resolve(ThirdPartyDeps.java8Runtime, "rt.jar").getSingleFile()
     val r8Jar = r8JarProvider.getSingleOutputFile()
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
     val testBaseJar = packageTestBaseExcludeKeep.getSingleOutputFile()
     val testDepsJar = packageTestDeps.getSingleOutputFile()
     val testJar = testJarProvider.getSingleOutputFile()
-    inputs.files(keepRulesFile, rtJar, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
+    inputs.files(keepRulesFile, r8Jar, r8WithRelocatedDepsJar, testDepsJar, testJar)
     val outputJar = getRoot().resolveAll("build", "libs", artifactName)
     outputs.file(outputJar)
     val args = mutableListOf(
       "--classfile",
       "--debug",
       "--lib",
-      "$rtJar",
+      "${org.gradle.internal.jvm.Jvm.current().getJavaHome()}",
       "--classpath",
       "$r8Jar",
       "--classpath",
diff --git a/d8_r8/test_modules/tests_java_17/build.gradle.kts b/d8_r8/test_modules/tests_java_17/build.gradle.kts
index 2079c40..9418b3a 100644
--- a/d8_r8/test_modules/tests_java_17/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_17/build.gradle.kts
@@ -58,5 +58,13 @@
     systemProperty("TESTBASE_DATA_LOCATION",
                    testbaseJavaCompileTask.outputs.files.getAsPath().split(File.pathSeparator)[0])
   }
+
+  val testJar by registering(Jar::class) {
+    from(sourceSets.test.get().output)
+    // TODO(b/296486206): Seems like IntelliJ has a problem depending on test source sets. Renaming
+    //  this from the default name (tests_java_8.jar) will allow IntelliJ to find the resources in
+    //  the jar and not show red underlines. However, navigation to base classes will not work.
+    archiveFileName.set("not_named_tests_java_17.jar")
+  }
 }
 
diff --git a/tools/jdk.py b/tools/jdk.py
index 3b41c3b..d16cad0 100755
--- a/tools/jdk.py
+++ b/tools/jdk.py
@@ -15,11 +15,17 @@
 
 
 def GetJdkHome():
-    return GetJdk11Home()
+    return GetJdk17Home()
 
 
 def GetJdkRoot():
-    return GetJdk11Root()
+    return GetJdk17Root()
+
+
+def GetJdk17Root():
+    root = os.path.join(JDK_DIR, 'jdk-17')
+    os_root = GetOSPath(root)
+    return os_root if os_root else os.environ['JAVA_HOME']
 
 
 def GetJdk11Root():
@@ -49,6 +55,15 @@
     return dirs
 
 
+def GetJdk17Home():
+    root = GetJdk17Root()
+    # osx has the home inside Contents/Home in the bundle
+    if defines.IsOsX():
+        return os.path.join(root, 'Contents', 'Home')
+    else:
+        return root
+
+
 def GetJdk11Home():
     root = GetJdk11Root()
     # osx has the home inside Contents/Home in the bundle