Add OpenJDK 24

Change-Id: I01bd736bc454fdf7d4b0f8877080b98cc6b2cd03
diff --git a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
index cc9d447..5e3f088 100644
--- a/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
+++ b/d8_r8/commonBuildSrc/src/main/kotlin/DependenciesPlugin.kt
@@ -55,7 +55,7 @@
   JDK_11("jdk-11", 11),
   JDK_17("jdk-17", 17),
   JDK_21("jdk-21", 21),
-  JDK_23("jdk-23", 23);
+  JDK_24("jdk-24", 24);
 
   fun isJdk8(): Boolean {
     return this == JDK_8
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index 665e59a..385f7ee 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -62,7 +62,7 @@
     dependsOn(gradle.includedBuild("tests_java_11").task(":clean"))
     dependsOn(gradle.includedBuild("tests_java_17").task(":clean"))
     dependsOn(gradle.includedBuild("tests_java_21").task(":clean"))
-    dependsOn(gradle.includedBuild("tests_java_23").task(":clean"))
+    dependsOn(gradle.includedBuild("tests_java_24").task(":clean"))
   }
 
   val packageTests by registering(Jar::class) {
@@ -477,6 +477,7 @@
       dependsOn(testR8LibNoDeps)
     } else {
       dependsOn(gradle.includedBuild("tests_java_8").task(":test"))
+      dependsOn(gradle.includedBuild("tests_java_11").task(":test"))
       dependsOn(gradle.includedBuild("tests_java_17").task(":test"))
       dependsOn(gradle.includedBuild("tests_java_21").task(":test"))
       dependsOn(gradle.includedBuild("tests_bootstrap").task(":test"))
diff --git a/d8_r8/test/settings.gradle.kts b/d8_r8/test/settings.gradle.kts
index c9bc4b4..73ef7f8 100644
--- a/d8_r8/test/settings.gradle.kts
+++ b/d8_r8/test/settings.gradle.kts
@@ -36,4 +36,4 @@
 includeBuild(root.resolve("test_modules").resolve("tests_java_11"))
 includeBuild(root.resolve("test_modules").resolve("tests_java_17"))
 includeBuild(root.resolve("test_modules").resolve("tests_java_21"))
-includeBuild(root.resolve("test_modules").resolve("tests_java_23"))
+includeBuild(root.resolve("test_modules").resolve("tests_java_24"))
diff --git a/d8_r8/test_modules/tests_java_23/build.gradle.kts b/d8_r8/test_modules/tests_java_24/build.gradle.kts
similarity index 85%
rename from d8_r8/test_modules/tests_java_23/build.gradle.kts
rename to d8_r8/test_modules/tests_java_24/build.gradle.kts
index 8a20a32..2492e3b 100644
--- a/d8_r8/test_modules/tests_java_23/build.gradle.kts
+++ b/d8_r8/test_modules/tests_java_24/build.gradle.kts
@@ -14,10 +14,10 @@
 
 java {
   sourceSets.test.configure {
-    java.srcDir(root.resolveAll("src", "test", "java23"))
+    java.srcDir(root.resolveAll("src", "test", "java24"))
   }
-  sourceCompatibility = JavaVersion.VERSION_23
-  targetCompatibility = JavaVersion.VERSION_23
+  sourceCompatibility = JavaVersion.VERSION_24
+  targetCompatibility = JavaVersion.VERSION_24
 }
 
 val testbaseJavaCompileTask = projectTask("testbase", "compileJava")
@@ -36,14 +36,14 @@
     dependsOn(gradle.includedBuild("shared").task(":downloadDeps"))
     options.setFork(true)
     options.forkOptions.memoryMaximumSize = "3g"
-    options.forkOptions.executable = getCompilerPath(Jdk.JDK_23)
+    options.forkOptions.executable = getCompilerPath(Jdk.JDK_24)
   }
 
   withType<Test> {
     notCompatibleWithConfigurationCache(
       "Failure storing the configuration cache: cannot serialize object of type 'org.gradle.api.internal.project.DefaultProject', a subtype of 'org.gradle.api.Project', as these are not supported with the configuration cache")
     TestingState.setUpTestingState(this)
-    javaLauncher = getJavaLauncher(Jdk.JDK_23)
+    javaLauncher = getJavaLauncher(Jdk.JDK_24)
     systemProperty("TEST_DATA_LOCATION",
                    layout.buildDirectory.dir("classes/java/test").get().toString())
     systemProperty("TESTBASE_DATA_LOCATION",
diff --git a/d8_r8/test_modules/tests_java_23/settings.gradle.kts b/d8_r8/test_modules/tests_java_24/settings.gradle.kts
similarity index 95%
rename from d8_r8/test_modules/tests_java_23/settings.gradle.kts
rename to d8_r8/test_modules/tests_java_24/settings.gradle.kts
index 523efdb..c8111c1 100644
--- a/d8_r8/test_modules/tests_java_23/settings.gradle.kts
+++ b/d8_r8/test_modules/tests_java_24/settings.gradle.kts
@@ -21,7 +21,7 @@
   }
 }
 
-rootProject.name = "tests_java_23"
+rootProject.name = "tests_java_24"
 val root = rootProject.projectDir.parentFile.parentFile
 
 includeBuild(root.resolve("shared"))
diff --git a/infra/config/global/generated/cr-buildbucket.cfg b/infra/config/global/generated/cr-buildbucket.cfg
index 6e52868..7f15036 100644
--- a/infra/config/global/generated/cr-buildbucket.cfg
+++ b/infra/config/global/generated/cr-buildbucket.cfg
@@ -1551,7 +1551,7 @@
       }
     }
     builders {
-      name: "linux-jdk23"
+      name: "linux-jdk24"
       swarming_host: "chrome-swarming.appspot.com"
       swarming_tags: "vpython:native-python-wrapper"
       dimensions: "cpu:x86-64"
@@ -1568,7 +1568,7 @@
         '  "builder_group": "internal.client.r8",'
         '  "recipe": "rex",'
         '  "test_options": ['
-        '    "--runtimes=jdk23",'
+        '    "--runtimes=jdk24",'
         '    "--command_cache_dir=/tmp/ccache",'
         '    "--tool=r8",'
         '    "--print-times",'
@@ -1588,7 +1588,7 @@
       }
     }
     builders {
-      name: "linux-jdk23_release"
+      name: "linux-jdk24_release"
       swarming_host: "chrome-swarming.appspot.com"
       swarming_tags: "vpython:native-python-wrapper"
       dimensions: "cpu:x86-64"
@@ -1605,7 +1605,7 @@
         '  "builder_group": "internal.client.r8",'
         '  "recipe": "rex",'
         '  "test_options": ['
-        '    "--runtimes=jdk23",'
+        '    "--runtimes=jdk24",'
         '    "--command_cache_dir=/tmp/ccache",'
         '    "--tool=r8",'
         '    "--print-times",'
diff --git a/infra/config/global/generated/luci-milo.cfg b/infra/config/global/generated/luci-milo.cfg
index 0140744..7ee27d7 100644
--- a/infra/config/global/generated/luci-milo.cfg
+++ b/infra/config/global/generated/luci-milo.cfg
@@ -51,9 +51,9 @@
     short_name: "jdk21"
   }
   builders {
-    name: "buildbucket/luci.r8.ci/linux-jdk23"
+    name: "buildbucket/luci.r8.ci/linux-jdk24"
     category: "R8"
-    short_name: "jdk23"
+    short_name: "jdk24"
   }
   builders {
     name: "buildbucket/luci.r8.ci/linux-android-4.0"
@@ -206,9 +206,9 @@
     short_name: "jdk21"
   }
   builders {
-    name: "buildbucket/luci.r8.ci/linux-jdk23_release"
+    name: "buildbucket/luci.r8.ci/linux-jdk24_release"
     category: "Release|R8"
-    short_name: "jdk23"
+    short_name: "jdk24"
   }
   builders {
     name: "buildbucket/luci.r8.ci/linux-android-4.0_release"
diff --git a/infra/config/global/generated/luci-notify.cfg b/infra/config/global/generated/luci-notify.cfg
index f083858..f072a67 100644
--- a/infra/config/global/generated/luci-notify.cfg
+++ b/infra/config/global/generated/luci-notify.cfg
@@ -480,7 +480,7 @@
   }
   builders {
     bucket: "ci"
-    name: "linux-jdk23"
+    name: "linux-jdk24"
     repository: "https://r8.googlesource.com/r8"
   }
 }
@@ -492,7 +492,7 @@
   }
   builders {
     bucket: "ci"
-    name: "linux-jdk23_release"
+    name: "linux-jdk24_release"
     repository: "https://r8.googlesource.com/r8"
   }
 }
diff --git a/infra/config/global/generated/luci-scheduler.cfg b/infra/config/global/generated/luci-scheduler.cfg
index ddfa1c4..85927b6 100644
--- a/infra/config/global/generated/luci-scheduler.cfg
+++ b/infra/config/global/generated/luci-scheduler.cfg
@@ -617,7 +617,7 @@
   }
 }
 job {
-  id: "linux-jdk23"
+  id: "linux-jdk24"
   realm: "ci"
   acl_sets: "ci"
   triggering_policy {
@@ -627,11 +627,11 @@
   buildbucket {
     server: "cr-buildbucket.appspot.com"
     bucket: "ci"
-    builder: "linux-jdk23"
+    builder: "linux-jdk24"
   }
 }
 job {
-  id: "linux-jdk23_release"
+  id: "linux-jdk24_release"
   realm: "ci"
   acl_sets: "ci"
   triggering_policy {
@@ -642,7 +642,7 @@
   buildbucket {
     server: "cr-buildbucket.appspot.com"
     bucket: "ci"
-    builder: "linux-jdk23_release"
+    builder: "linux-jdk24_release"
   }
 }
 job {
@@ -825,7 +825,7 @@
   realm: "ci"
   acl_sets: "ci"
   triggers: "linux-android-15_release"
-  triggers: "linux-jdk23_release"
+  triggers: "linux-jdk24_release"
   gitiles {
     repo: "https://r8.googlesource.com/r8"
     refs: "regexp:refs/heads/([8]\\.([5-9]|[1-9][0-9])+(\\.[0-9]+)?|[9]\\.[0-9]+(\\.[0-9]+)?)"
@@ -899,7 +899,7 @@
   triggers: "linux-jdk11"
   triggers: "linux-jdk17"
   triggers: "linux-jdk21"
-  triggers: "linux-jdk23"
+  triggers: "linux-jdk24"
   triggers: "linux-jdk8"
   triggers: "linux-none"
   triggers: "linux-old"
diff --git a/infra/config/global/generated/project.cfg b/infra/config/global/generated/project.cfg
index f6c5d0f..deed528 100644
--- a/infra/config/global/generated/project.cfg
+++ b/infra/config/global/generated/project.cfg
@@ -7,7 +7,7 @@
 name: "r8"
 access: "group:all"
 lucicfg {
-  version: "1.43.14"
+  version: "1.43.16"
   package_dir: ".."
   config_dir: "generated"
   entry_point: "main.star"
diff --git a/infra/config/global/main.star b/infra/config/global/main.star
index 0bb7d17..9b257dc 100755
--- a/infra/config/global/main.star
+++ b/infra/config/global/main.star
@@ -375,8 +375,8 @@
     ["--runtimes=jdk21", "--command_cache_dir=/tmp/ccache"],
 )
 r8_tester_with_default(
-    "linux-jdk23",
-    ["--runtimes=jdk23", "--command_cache_dir=/tmp/ccache"],
+    "linux-jdk24",
+    ["--runtimes=jdk24", "--command_cache_dir=/tmp/ccache"],
     release_trigger = ["branch-gitiles-8.5-forward"],
 )
 
diff --git a/scripts/add-openjdk.sh b/scripts/add-openjdk.sh
index b1838fe..0eecb48 100755
--- a/scripts/add-openjdk.sh
+++ b/scripts/add-openjdk.sh
@@ -18,7 +18,7 @@
 
 # Now run script with fingers crossed!
 
-JDK_VERSION="23.0.1"
+JDK_VERSION="24"
 JDK_VERSION_FULL=${JDK_VERSION}
 # For ea versions the full version name has a postfix.
 # JDK_VERSION_FULL="${JDK_VERSION}-ea+33"
diff --git a/src/test/java23/com/android/tools/r8/java23/Java23ValidationTest.java b/src/test/java24/com/android/tools/r8/jdk24/Java24ValidationTest.java
similarity index 92%
rename from src/test/java23/com/android/tools/r8/java23/Java23ValidationTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/Java24ValidationTest.java
index a06fe15..05ef994 100644
--- a/src/test/java23/com/android/tools/r8/java23/Java23ValidationTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/Java24ValidationTest.java
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package com.android.tools.r8.java23;
+package com.android.tools.r8.jdk24;
 
 import static com.android.tools.r8.utils.InternalOptions.ASM_VERSION;
 import static junit.framework.TestCase.assertEquals;
@@ -26,7 +26,7 @@
 
 // Test to validate that the tests_java_23 module is built with JDK-23.
 @RunWith(Parameterized.class)
-public class Java23ValidationTest extends TestBase {
+public class Java24ValidationTest extends TestBase {
 
   static final String EXPECTED = StringUtils.lines("Hello, world");
 
@@ -37,7 +37,7 @@
     return getTestParameters().withCfRuntimes().build();
   }
 
-  public Java23ValidationTest(TestParameters parameters) {
+  public Java24ValidationTest(TestParameters parameters) {
     this.parameters = parameters;
   }
 
@@ -78,7 +78,7 @@
   @Test
   public void testTestClassClassFileVersion() throws Exception {
     assertEquals(
-        CfVersion.V23,
+        CfVersion.V24,
         extractClassFileVersion(ToolHelper.getClassFileForTestClass(TestClass.class)));
   }
 
@@ -88,7 +88,7 @@
         .addInnerClasses(getClass())
         .run(parameters.getRuntime(), TestClass.class)
         .applyIf(
-            parameters.getCfRuntime().isOlderThan(CfVm.JDK23),
+            parameters.getCfRuntime().isOlderThan(CfVm.JDK24),
             r -> r.assertFailureWithErrorThatThrows(UnsupportedClassVersionError.class),
             r -> r.assertSuccessWithOutput(EXPECTED));
   }
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexNumberValueSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexNumberValueSwitchTest.java
similarity index 97%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexNumberValueSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexNumberValueSwitchTest.java
index 4734d64..24d2bea 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexNumberValueSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexNumberValueSwitchTest.java
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -30,7 +30,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexValueSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexValueSwitchTest.java
similarity index 97%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexValueSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexValueSwitchTest.java
index 9f63637..6a2f0cf 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/DexValueSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/DexValueSwitchTest.java
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -30,7 +30,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java
similarity index 97%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java
index 558da5b..b4a4f32 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumLessCasesAtRuntimeSwitchTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21EnumSwitch;
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
@@ -34,7 +34,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java
similarity index 98%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java
index 0903865..83b634b 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumMoreCasesAtRuntimeSwitchTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.desugarMatchException;
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21EnumSwitch;
@@ -36,7 +36,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchOldSyntaxTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchOldSyntaxTest.java
similarity index 95%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchOldSyntaxTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchOldSyntaxTest.java
index 2c14b4b..52a69d3 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchOldSyntaxTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchOldSyntaxTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2025 the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import com.android.tools.r8.JdkClassFileProvider;
 import com.android.tools.r8.TestBase;
@@ -23,7 +23,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .withPartialCompilation()
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchTest.java
similarity index 96%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchTest.java
index e9c5ae5..f570e96 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.desugarMatchException;
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
@@ -35,7 +35,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
@@ -60,7 +60,7 @@
 
   private <T extends TestBuilder<?, T>> void addModifiedProgramClasses(
       TestBuilder<?, T> testBuilder) throws Exception {
-    String d = "com/android/tools/r8/java23/switchpatternmatching/EnumSwitchTest$D";
+    String d = "com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchTest$D";
     testBuilder
         .addStrippedOuter(getClass())
         .addProgramClasses(FakeI.class, E.class, C.class)
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java
similarity index 97%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java
index 9028df6..395673a 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/EnumSwitchUsingEnumSwitchBootstrapMethodTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21EnumSwitch;
 import static org.junit.Assert.assertTrue;
@@ -32,7 +32,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchOldSyntaxTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchOldSyntaxTest.java
similarity index 95%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchOldSyntaxTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchOldSyntaxTest.java
index 33c7e42..b83c3e5 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchOldSyntaxTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchOldSyntaxTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import com.android.tools.r8.JdkClassFileProvider;
 import com.android.tools.r8.TestBase;
@@ -23,7 +23,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .withPartialCompilation()
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchRegress382880986Test.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchRegress382880986Test.java
similarity index 96%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchRegress382880986Test.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchRegress382880986Test.java
index 10ad8a1..21dc415 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchRegress382880986Test.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchRegress382880986Test.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -29,7 +29,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchTest.java
similarity index 96%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchTest.java
index 7786d21..5de9458 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/StringSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/StringSwitchTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -32,7 +32,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchMissingClassTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchMissingClassTest.java
similarity index 97%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchMissingClassTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchMissingClassTest.java
index b4ac823..2f817e9 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchMissingClassTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchMissingClassTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -39,7 +39,7 @@
   public static List<Object[]> data() {
     return buildParameters(
         getTestParameters()
-            .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+            .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
             .withDexRuntimes()
             .withAllApiLevelsAlsoForCf()
             .build(),
diff --git a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchTest.java b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchTest.java
similarity index 96%
rename from src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchTest.java
rename to src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchTest.java
index e1eea16..e9ae575 100644
--- a/src/test/java23/com/android/tools/r8/java23/switchpatternmatching/TypeSwitchTest.java
+++ b/src/test/java24/com/android/tools/r8/jdk24/switchpatternmatching/TypeSwitchTest.java
@@ -1,7 +1,7 @@
 // Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.java23.switchpatternmatching;
+package com.android.tools.r8.jdk24.switchpatternmatching;
 
 import static com.android.tools.r8.desugar.switchpatternmatching.SwitchTestHelper.hasJdk21TypeSwitch;
 import static org.junit.Assert.assertTrue;
@@ -32,7 +32,7 @@
   @Parameters(name = "{0}")
   public static TestParametersCollection data() {
     return getTestParameters()
-        .withCfRuntimesStartingFromIncluding(CfVm.JDK23)
+        .withCfRuntimesStartingFromIncluding(CfVm.JDK24)
         .withDexRuntimes()
         .withAllApiLevelsAlsoForCf()
         .build();
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 889f7a3..8bfe1f7 100644
--- a/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
+++ b/src/test/testbase/java/com/android/tools/r8/TestRuntime.java
@@ -40,7 +40,9 @@
     JDK20("jdk20", 64),
     // From JDK-21 only include LTS and latest non-LTS.
     JDK21("jdk21", 65),
-    JDK23("jdk23", 67);
+    // TODO(b/383073689) Remove JDK-23 when bots test JDK-23.
+    JDK23("jdk23", 67),
+    JDK24("jdk24", 68);
 
     /** This should generally be the latest checked in CF runtime we fully support. */
     private static final CfVm DEFAULT = JDK11;
@@ -96,6 +98,7 @@
   private static final Path JDK17_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-17");
   private static final Path JDK21_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-21");
   private static final Path JDK23_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-23");
+  private static final Path JDK24_PATH = Paths.get(ToolHelper.THIRD_PARTY_DIR, "openjdk", "jdk-24");
   private static final Map<CfVm, Path> jdkPaths =
       ImmutableMap.of(
           CfVm.JDK8, JDK8_PATH,
@@ -103,7 +106,8 @@
           CfVm.JDK11, JDK11_PATH,
           CfVm.JDK17, JDK17_PATH,
           CfVm.JDK21, JDK21_PATH,
-          CfVm.JDK23, JDK23_PATH);
+          CfVm.JDK23, JDK23_PATH,
+          CfVm.JDK24, JDK24_PATH);
 
   public static CfRuntime getCheckedInJdk(CfVm vm) {
     if (vm == CfVm.JDK8) {
@@ -156,8 +160,8 @@
     return new CfRuntime(CfVm.JDK21, getCheckedInJdkHome(CfVm.JDK21));
   }
 
-  public static CfRuntime getCheckedInJdk23() {
-    return new CfRuntime(CfVm.JDK23, getCheckedInJdkHome(CfVm.JDK23));
+  public static CfRuntime getCheckedInJdk24() {
+    return new CfRuntime(CfVm.JDK24, getCheckedInJdkHome(CfVm.JDK24));
   }
 
   public static List<CfRuntime> getCheckedInCfRuntimes() {
@@ -168,7 +172,7 @@
           getCheckedInJdk11(),
           getCheckedInJdk17(),
           getCheckedInJdk21(),
-          getCheckedInJdk23()
+          getCheckedInJdk24()
         };
     Builder<CfRuntime> builder = ImmutableList.builder();
     for (CfRuntime jdk : jdks) {
@@ -229,8 +233,8 @@
     if (version.equals("21") || version.startsWith("21.")) {
       return new CfRuntime(CfVm.JDK21, Paths.get(home));
     }
-    if (version.equals("23") || version.startsWith("23.")) {
-      return new CfRuntime(CfVm.JDK23, Paths.get(home));
+    if (version.equals("24") || version.startsWith("24.")) {
+      return new CfRuntime(CfVm.JDK24, Paths.get(home));
     }
     throw new Unimplemented("No support for JDK version: " + version);
   }
diff --git a/third_party/openjdk/jdk-24/linux.tar.gz.sha1 b/third_party/openjdk/jdk-24/linux.tar.gz.sha1
new file mode 100644
index 0000000..d0392f1
--- /dev/null
+++ b/third_party/openjdk/jdk-24/linux.tar.gz.sha1
@@ -0,0 +1 @@
+b52dbdd566a9cc17bfaab422b7fe6399b4686fdc
\ No newline at end of file
diff --git a/third_party/openjdk/jdk-24/osx.tar.gz.sha1 b/third_party/openjdk/jdk-24/osx.tar.gz.sha1
new file mode 100644
index 0000000..c6baaab
--- /dev/null
+++ b/third_party/openjdk/jdk-24/osx.tar.gz.sha1
@@ -0,0 +1 @@
+acd69121b6d857b279d9c4836743e302f3738d9e
\ No newline at end of file
diff --git a/third_party/openjdk/jdk-24/windows.tar.gz.sha1 b/third_party/openjdk/jdk-24/windows.tar.gz.sha1
new file mode 100644
index 0000000..7500e8e
--- /dev/null
+++ b/third_party/openjdk/jdk-24/windows.tar.gz.sha1
@@ -0,0 +1 @@
+17eeb98e6e5829bcac03bdbe95d6d0673fa40d46
\ No newline at end of file
diff --git a/tools/jdk.py b/tools/jdk.py
index 6b92f2c..e2454eb 100755
--- a/tools/jdk.py
+++ b/tools/jdk.py
@@ -10,7 +10,7 @@
 
 JDK_DIRS = os.path.join(defines.THIRD_PARTY, 'openjdk')
 
-ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-17', 'jdk-21', 'jdk-23']
+ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-17', 'jdk-21', 'jdk-24']
 
 
 def GetDefaultJdkHome():
diff --git a/tools/test.py b/tools/test.py
index 8dc8b32..b08e1ba 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -52,7 +52,7 @@
     'jdk11',
     'jdk17',
     'jdk21',
-    'jdk23',
+    'jdk24'
 ] + ['dex-%s' % dexvm for dexvm in ALL_ART_VMS]