Cleanup supported JDK's

Only support LTS and latest non-LTS (but still JDK-9 for now).

This also removes the stubbed JDK-17 API's and use the library from
JDK-17 instead for record tests.

Change-Id: I244b265bbe76938930c2f8a91fe44b513d4b825b
diff --git a/src/test/examplesJava17/records/RecordBlogTest.java b/src/test/examplesJava17/records/RecordBlogTest.java
index 1128f07..37f1117 100644
--- a/src/test/examplesJava17/records/RecordBlogTest.java
+++ b/src/test/examplesJava17/records/RecordBlogTest.java
@@ -57,7 +57,7 @@
 
   private boolean isCfRuntimeWithNativeRecordSupport() {
     return parameters.isCfRuntime()
-        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
         && parameters.getApiLevel().equals(AndroidApiLevel.B);
   }
 
diff --git a/src/test/examplesJava17/records/RecordHashCodeManyFieldsTest.java b/src/test/examplesJava17/records/RecordHashCodeManyFieldsTest.java
index 6c2a31b..1cd7313 100644
--- a/src/test/examplesJava17/records/RecordHashCodeManyFieldsTest.java
+++ b/src/test/examplesJava17/records/RecordHashCodeManyFieldsTest.java
@@ -37,7 +37,7 @@
 
   private boolean isCfRuntimeWithNativeRecordSupport() {
     return parameters.isCfRuntime()
-        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
         && parameters.getApiLevel().equals(AndroidApiLevel.B);
   }
 
diff --git a/src/test/examplesJava17/records/RecordHashCodeTest.java b/src/test/examplesJava17/records/RecordHashCodeTest.java
index b0b0b0e..b5a21f4 100644
--- a/src/test/examplesJava17/records/RecordHashCodeTest.java
+++ b/src/test/examplesJava17/records/RecordHashCodeTest.java
@@ -37,7 +37,7 @@
 
   private boolean isCfRuntimeWithNativeRecordSupport() {
     return parameters.isCfRuntime()
-        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
         && parameters.getApiLevel().equals(AndroidApiLevel.B);
   }
 
diff --git a/src/test/examplesJava17/records/RecordInterfaceTest.java b/src/test/examplesJava17/records/RecordInterfaceTest.java
index d5144b0..583ccb4 100644
--- a/src/test/examplesJava17/records/RecordInterfaceTest.java
+++ b/src/test/examplesJava17/records/RecordInterfaceTest.java
@@ -48,7 +48,7 @@
 
   private boolean isCfRuntimeWithNativeRecordSupport() {
     return parameters.isCfRuntime()
-        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
         && parameters.getApiLevel().equals(AndroidApiLevel.B);
   }
 
diff --git a/src/test/examplesJava17/records/RecordInvokeCustomTest.java b/src/test/examplesJava17/records/RecordInvokeCustomTest.java
index ec3956a..55c9d9c 100644
--- a/src/test/examplesJava17/records/RecordInvokeCustomTest.java
+++ b/src/test/examplesJava17/records/RecordInvokeCustomTest.java
@@ -4,18 +4,17 @@
 
 package records;
 
+import com.android.tools.r8.JdkClassFileProvider;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestRuntime.CfRuntime;
 import com.android.tools.r8.TestRuntime.CfVm;
-import com.android.tools.r8.desugar.LibraryFilesHelper;
 import com.android.tools.r8.utils.StringUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import records.RecordInvokeCustom.Empty;
-import records.RecordInvokeCustom.Person;
 
 @RunWith(Parameterized.class)
 public class RecordInvokeCustomTest extends TestBase {
@@ -83,7 +82,9 @@
             .addKeepMainRule(RecordInvokeCustom.class);
     if (parameters.isCfRuntime()) {
       builder
-          .addLibraryFiles(LibraryFilesHelper.getJdk15LibraryFiles(temp))
+          .addLibraryProvider(
+              JdkClassFileProvider.fromSystemModulesJdk(
+                  CfRuntime.getCheckedInJdk17().getJavaHome()))
           .compile()
           .inspect(RecordTestUtils::assertRecordsAreRecords)
           .run(parameters.getRuntime(), RecordInvokeCustom.class)
diff --git a/src/test/examplesJava17/records/SimpleRecordTest.java b/src/test/examplesJava17/records/SimpleRecordTest.java
index d7c8131..cfedd02 100644
--- a/src/test/examplesJava17/records/SimpleRecordTest.java
+++ b/src/test/examplesJava17/records/SimpleRecordTest.java
@@ -47,7 +47,7 @@
 
   private boolean isCfRuntimeWithNativeRecordSupport() {
     return parameters.isCfRuntime()
-        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+        && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
         && parameters.getApiLevel().equals(AndroidApiLevel.B);
   }
 
diff --git a/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java b/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
index 241c2f3..4af8c94 100644
--- a/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/JavaScriptScriptEngineTest.java
@@ -85,7 +85,7 @@
         .run(parameters.getRuntime(), TestClass.class)
         .applyIf(
             // No default JS engine starting from JDK-14 where Nashorn was removed, see b/227162584.
-            parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14),
+            parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17),
             r -> r.assertFailureWithErrorThatThrows(NullPointerException.class),
             r ->
                 r.assertSuccessWithOutput(
diff --git a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
index a8e80aa..6865487 100644
--- a/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/ScriptEngineTest.java
@@ -115,7 +115,7 @@
           parameters.isCfRuntime()
               // No default JS engine starting from JDK-14 where Nashorn was removed,
               // see b/227162584.
-              ? (parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK14)
+              ? (parameters.isCfRuntime() && parameters.asCfRuntime().isNewerThanOrEqual(CfVm.JDK17)
                   ? StringUtils.lines("MyEngine1", "MyEngine2")
                   : StringUtils.lines("MyEngine1", "MyEngine2", "Oracle Nashorn"))
               : StringUtils.lines("Mozilla Rhino", "MyEngine1", "MyEngine2"));
diff --git a/src/test/testbase/java/com/android/tools/r8/TestRuntime.java b/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
index f14cec1..889f7a3 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
@@ -35,11 +35,6 @@
     JDK9("jdk9", 53),
     JDK10("jdk10", 54),
     JDK11("jdk11", 55),
-    JDK12("jdk12", 56),
-    JDK13("jdk13", 57),
-    JDK14("jdk14", 58),
-    JDK15("jdk15", 59),
-    JDK16("jdk16", 60),
     JDK17("jdk17", 61),
     JDK18("jdk18", 62),
     JDK20("jdk20", 64),
diff --git a/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java b/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
index 0a605cb..a618531 100644
--- a/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
+++ b/src/test/testbase/java/com/android/tools/r8/desugar/LibraryFilesHelper.java
@@ -39,48 +39,6 @@
     return getJdk9LibraryFiles(temp);
   }
 
-  public static Path[] getJdk15LibraryFiles(TemporaryFolder temp) throws Exception {
-    // TODO(b/270105162): We should be able to run this on windows.
-    Assume.assumeFalse(ToolHelper.isWindows());
-    // TODO(b/169645628): Add JDK-15 runtime jar instead. As a temporary solution we use the jdk 8
-    //   runtime with additional stubs.
-    Path generatedJar = temp.newFolder().toPath().resolve("stubs.jar");
-    ZipBuilder builder = ZipBuilder.builder(generatedJar);
-    addRecord(builder);
-    addRecordComponent(builder);
-    addObjectsMethod(builder);
-    addTypeDescriptor(builder);
-    builder.build();
-    return ObjectArrays.concat(getJdk9LibraryFiles(temp), new Path[] {generatedJar}, Path.class);
-  }
-
-  // Generates a class file for:
-  // <pre>
-  // public class ObjectMethods {}
-  // </pre>
-  private static void addObjectsMethod(ZipBuilder builder) throws Exception {
-    addClassToZipBuilder(
-        builder, ACC_PUBLIC, "java/lang/runtime/ObjectMethods", ConsumerUtils.emptyConsumer());
-  }
-
-  // Generates a class file for:
-  // <pre>
-  // public interface TypeDescriptor {
-  //   String descriptorString();
-  // }
-  // </pre>
-  private static void addTypeDescriptor(ZipBuilder builder) throws Exception {
-    addClassToZipBuilder(
-        builder,
-        ACC_PUBLIC | ACC_INTERFACE | ACC_ABSTRACT,
-        "java/lang/invoke/TypeDescriptor",
-        methodAdder ->
-            methodAdder.add(
-                ACC_PUBLIC | ACC_ABSTRACT,
-                "descriptorString",
-                methodDescriptor(false, String.class)));
-  }
-
   // Generates a class file for:
   // <pre>
   // public class StringConcatFactory {}
@@ -101,45 +59,6 @@
 
   // Generates a class file for:
   // <pre>
-  // public abstract class Record {
-  //   protected Record() {}
-  //
-  //   public abstract boolean equals(Object obj);
-  //
-  //   public abstract int hashCode();
-  //
-  //   public abstract String toString();
-  // }
-  // </pre>
-  private static void addRecord(ZipBuilder builder) throws Exception {
-    addClassToZipBuilder(
-        builder,
-        ACC_PUBLIC | ACC_ABSTRACT,
-        "java/lang/Record",
-        methodAdder -> {
-          methodAdder.add(ACC_PROTECTED, "<init>", "()V");
-          methodAdder.add(
-              ACC_PUBLIC | ACC_ABSTRACT,
-              "equals",
-              methodDescriptor(false, Object.class, boolean.class));
-          methodAdder.add(
-              ACC_PUBLIC | ACC_ABSTRACT, "hashCode", methodDescriptor(false, int.class));
-          methodAdder.add(
-              ACC_PUBLIC | ACC_ABSTRACT, "toString", methodDescriptor(false, String.class));
-        });
-  }
-
-  // Generates a class file for:
-  // <pre>
-  // public class RecordComponent {}
-  // </pre>
-  private static void addRecordComponent(ZipBuilder builder) throws Exception {
-    addClassToZipBuilder(
-        builder, ACC_PUBLIC, "java/lang/reflect/RecordComponent", ConsumerUtils.emptyConsumer());
-  }
-
-  // Generates a class file for:
-  // <pre>
   // public interface Supplier {
   //   Object get();
   // }
diff --git a/tools/jdk.py b/tools/jdk.py
index d795230..86f2c3a 100755
--- a/tools/jdk.py
+++ b/tools/jdk.py
@@ -10,8 +10,7 @@
 
 JDK_DIR = os.path.join(defines.THIRD_PARTY, 'openjdk')
 
-ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-15', 'jdk-16', 'jdk-17',
-            'jdk-18', 'jdk-21', 'jdk-23']
+ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-17', 'jdk-21', 'jdk-23']
 
 
 def GetJdkHome():