Fix issues with daemon and Kotlin tests
diff --git a/platforms/core-runtime/base-services/src/main/java/org/gradle/internal/jvm/Jvm.java b/platforms/core-runtime/base-services/src/main/java/org/gradle/internal/jvm/Jvm.java
index dd7ae40..522c765 100644
--- a/platforms/core-runtime/base-services/src/main/java/org/gradle/internal/jvm/Jvm.java
+++ b/platforms/core-runtime/base-services/src/main/java/org/gradle/internal/jvm/Jvm.java
@@ -122,6 +122,14 @@ public static Jvm discovered(File javaHome, String implementationJavaVersion, In
         return create(javaHome, implementationJavaVersion, javaVersionMajor);
     }
 
+    /**
+     * @deprecated KGP uses this, new code should use {@link #discovered(File, String, Integer)}
+     */
+    @Deprecated
+    public static Jvm discovered(File javaHome, String implementationJavaVersion, JavaVersion javaVersion) {
+        return create(javaHome, implementationJavaVersion, Integer.parseInt(javaVersion.getMajorVersion()));
+    }
+
     @Override
     public String toString() {
         if (userSupplied) {
diff --git a/platforms/core-runtime/base-services/src/test/groovy/org/gradle/internal/jvm/JvmTest.groovy b/platforms/core-runtime/base-services/src/test/groovy/org/gradle/internal/jvm/JvmTest.groovy
index e216275..2e090f7 100644
--- a/platforms/core-runtime/base-services/src/test/groovy/org/gradle/internal/jvm/JvmTest.groovy
+++ b/platforms/core-runtime/base-services/src/test/groovy/org/gradle/internal/jvm/JvmTest.groovy
@@ -17,6 +17,7 @@
 package org.gradle.internal.jvm
 
 import org.gradle.api.JavaVersion
+import org.gradle.api.internal.jvm.JavaVersionParser
 import org.gradle.internal.os.OperatingSystem
 import org.gradle.test.fixtures.file.TestFile
 import org.gradle.test.fixtures.file.TestNameTestDirectoryProvider
@@ -106,7 +107,7 @@
         }
 
         when:
-        def jvm = new Jvm(os, software.file('jdk/jre'), "1.8.0.221", JavaVersion.VERSION_1_8)
+        def jvm = new Jvm(os, software.file('jdk/jre'), "1.8.0.221", 8)
 
         then:
         jvm.javaHome == software.file('jdk')
@@ -142,7 +143,7 @@
         }
 
         when:
-        def jvm = new Jvm(os, software.file('jdk'), java8ImplementationVersion, JavaVersion.VERSION_1_8)
+        def jvm = new Jvm(os, software.file('jdk'), java8ImplementationVersion, 8)
 
         then:
         jvm.javaHome == software.file('jdk')
@@ -175,7 +176,7 @@
         }
 
         when:
-        def jvm = new Jvm(os, software.file('jdk'), java9ImplementationVersion, JavaVersion.VERSION_1_9)
+        def jvm = new Jvm(os, software.file('jdk'), java9ImplementationVersion, 9)
 
         then:
         jvm.javaHome == software.file('jdk')
@@ -200,7 +201,7 @@
         }
 
         when:
-        def jvm = new Jvm(os, software.file('jre'), "1.8.0.221", JavaVersion.VERSION_1_8)
+        def jvm = new Jvm(os, software.file('jre'), "1.8.0.221", 8)
 
         then:
         jvm.javaHome == software.file('jre')
@@ -236,7 +237,7 @@
         _ * os.windows >> true
 
         when:
-        def jvm = new Jvm(os, jreDir, version, JavaVersion.toVersion(version))
+        def jvm = new Jvm(os, jreDir, version, JavaVersionParser.parseMajorVersion(version))
 
         then:
         jvm.javaHome == jdkDir
@@ -288,7 +289,7 @@
         _ * os.windows >> true
 
         when:
-        def jvm = new Jvm(os, jdkDir, version, JavaVersion.toVersion(version))
+        def jvm = new Jvm(os, jdkDir, version, JavaVersionParser.parseMajorVersion(version))
 
         then:
         jvm.javaHome == jdkDir
@@ -320,8 +321,8 @@
         }
 
         expect:
-        def jvm = new Jvm(os, installDir, "1.8.0", JavaVersion.VERSION_1_8)
-        def jvm2 = new Jvm(os, installDir, "1.8.0", JavaVersion.VERSION_1_8)
+        def jvm = new Jvm(os, installDir, "1.8.0", 8)
+        def jvm2 = new Jvm(os, installDir, "1.8.0", 8)
         Matchers.strictlyEquals(jvm, jvm2)
     }
 
@@ -461,7 +462,7 @@
         }
 
         when:
-        def jvm = new Jvm(os, jdkDir, "1.8.0", JavaVersion.VERSION_1_8)
+        def jvm = new Jvm(os, jdkDir, "1.8.0", 8)
 
         then:
         jvm.toString().contains('dummyFolder')
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/cli/BuildActionsFactoryTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/cli/BuildActionsFactoryTest.groovy
index f591a60..14dcf9a 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/cli/BuildActionsFactoryTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/cli/BuildActionsFactoryTest.groovy
@@ -16,7 +16,6 @@
 package org.gradle.launcher.cli
 
 import org.gradle.api.Action
-import org.gradle.api.JavaVersion
 import org.gradle.api.internal.file.FileCollectionFactory
 import org.gradle.cli.CommandLineParser
 import org.gradle.internal.Actions
@@ -30,6 +29,7 @@
 import org.gradle.internal.service.DefaultServiceRegistry
 import org.gradle.internal.service.ServiceRegistry
 import org.gradle.internal.time.Clock
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.bootstrap.ForegroundDaemonAction
 import org.gradle.launcher.daemon.client.DaemonClient
 import org.gradle.launcher.daemon.client.SingleUseDaemonClient
@@ -167,7 +167,7 @@
     }
 
     private DaemonRequestContext createDaemonRequest(Collection<String> daemonOpts=[]) {
-        def request = new DaemonRequestContext(null, new DaemonJvmCriteria(JavaVersion.current(), null, null), daemonOpts, false, NativeServices.NativeServicesMode.NOT_SET, DaemonParameters.Priority.NORMAL)
+        def request = new DaemonRequestContext(null, new DaemonJvmCriteria(JavaLanguageVersion.current(), null, null), daemonOpts, false, NativeServices.NativeServicesMode.NOT_SET, DaemonParameters.Priority.NORMAL)
         request
     }
 
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/client/DefaultDaemonConnectorTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/client/DefaultDaemonConnectorTest.groovy
index 346df52..a1f5380 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/client/DefaultDaemonConnectorTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/client/DefaultDaemonConnectorTest.groovy
@@ -15,7 +15,7 @@
  */
 package org.gradle.launcher.daemon.client
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.api.internal.specs.ExplainingSpec
 import org.gradle.internal.logging.progress.ProgressLoggerFactory
 import org.gradle.internal.remote.Address
@@ -24,6 +24,7 @@
 import org.gradle.internal.remote.internal.OutgoingConnector
 import org.gradle.internal.remote.internal.RemoteConnection
 import org.gradle.internal.serialize.Serializer
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.configuration.DaemonParameters
 import org.gradle.launcher.daemon.context.DaemonContext
 import org.gradle.launcher.daemon.context.DefaultDaemonContext
@@ -74,7 +75,7 @@
 
     def startBusyDaemon() {
         def daemonNum = daemonCounter++
-        DaemonContext context = new DefaultDaemonContext(daemonNum.toString(), javaHome, JavaVersion.current(), javaHome, daemonNum, 1000, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
+        DaemonContext context = new DefaultDaemonContext(daemonNum.toString(), javaHome, JavaLanguageVersion.current(), javaHome, daemonNum, 1000, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
         def address = createAddress(daemonNum)
         registry.store(new DaemonInfo(address, context, "password".bytes, Busy))
         return new DaemonStartupInfo(daemonNum.toString(), null, null);
@@ -82,7 +83,7 @@
 
     def startIdleDaemon() {
         def daemonNum = daemonCounter++
-        DaemonContext context = new DefaultDaemonContext(daemonNum.toString(), javaHome, JavaVersion.current(), javaHome, daemonNum, 1000, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
+        DaemonContext context = new DefaultDaemonContext(daemonNum.toString(), javaHome, JavaLanguageVersion.current(), javaHome, daemonNum, 1000, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
         def address = createAddress(daemonNum)
         registry.store(new DaemonInfo(address, context, "password".bytes, Idle))
     }
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/configuration/DaemonParametersTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/configuration/DaemonParametersTest.groovy
index 48b7b05d..ca0ff13 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/configuration/DaemonParametersTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/configuration/DaemonParametersTest.groovy
@@ -15,8 +15,9 @@
  */
 package org.gradle.launcher.daemon.configuration
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.api.internal.file.TestFiles
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.configuration.BuildLayoutResult
 import spock.lang.Issue
 import spock.lang.Specification
@@ -51,7 +52,7 @@
     def "does not apply defaults when jvmargs already specified"() {
         when:
         parameters.setJvmArgs(["-Xmx17m"])
-        parameters.applyDefaultsFor(JavaVersion.VERSION_1_8)
+        parameters.applyDefaultsFor(JavaLanguageVersion.of(8))
 
         then:
         parameters.effectiveJvmArgs.containsAll(["-Xmx17m"])
@@ -60,7 +61,7 @@
 
     def "can apply defaults for Java 7 and earlier"() {
         when:
-        parameters.applyDefaultsFor(JavaVersion.VERSION_1_7)
+        parameters.applyDefaultsFor(JavaLanguageVersion.of(7))
 
         then:
         parameters.effectiveJvmArgs.containsAll(DaemonParameters.DEFAULT_JVM_ARGS)
@@ -68,7 +69,7 @@
 
     def "can apply defaults for Java 8 and later"() {
         when:
-        parameters.applyDefaultsFor(JavaVersion.VERSION_1_9)
+        parameters.applyDefaultsFor(JavaLanguageVersion.of(9))
 
         then:
         parameters.effectiveJvmArgs.containsAll(DaemonParameters.DEFAULT_JVM_ARGS)
@@ -77,7 +78,7 @@
     @Issue("20611")
     def "defaults for Java 9+ contain the --add-opens args in the form that can be matched by a user's GRADLE_OPTS"() {
         when:
-        parameters.applyDefaultsFor(JavaVersion.VERSION_1_9)
+        parameters.applyDefaultsFor(JavaLanguageVersion.of(9))
 
         then: "The --add-opens arguments should be in the form that can be matched by user-provided GRADLE_OPTS: --add-opens=x.y/z.a=..."
         def addOpensArgs = parameters.effectiveJvmArgs.findAll { it.startsWith("--add-opens") }
@@ -108,7 +109,7 @@
         parameters.effectiveJvmArgs.contains("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
 
         where:
-        jvmDefault << [JavaVersion.VERSION_1_8, JavaVersion.VERSION_1_9]
+        jvmDefault << [JavaLanguageVersion.of(8), JavaLanguageVersion.of(9)]
     }
 
     def "can configure debug port"() {
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/context/DaemonCompatibilitySpecSpec.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/context/DaemonCompatibilitySpecSpec.groovy
index 6733b35..611296e 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/context/DaemonCompatibilitySpecSpec.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/context/DaemonCompatibilitySpecSpec.groovy
@@ -15,11 +15,12 @@
  */
 package org.gradle.launcher.daemon.context
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.internal.jvm.JavaInfo
 import org.gradle.internal.jvm.Jvm
 import org.gradle.internal.nativeintegration.services.NativeServices
 import org.gradle.internal.os.OperatingSystem
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.jvm.toolchain.JvmImplementation
 import org.gradle.jvm.toolchain.JvmVendorSpec
 import org.gradle.launcher.daemon.configuration.DaemonParameters
@@ -91,9 +92,9 @@
     }
 
     def "contexts with different jvm criteria are incompatible"() {
-        clientWants(new DaemonJvmCriteria(JavaVersion.VERSION_11, JvmVendorSpec.ADOPTIUM, JvmImplementation.VENDOR_SPECIFIC))
+        clientWants(new DaemonJvmCriteria(JavaLanguageVersion.of(11), JvmVendorSpec.ADOPTIUM, JvmImplementation.VENDOR_SPECIFIC))
 
-        candidate.javaVersion >> JavaVersion.VERSION_15
+        candidate.javaVersion >> JavaLanguageVersion.of(15)
 
         expect:
         !compatible
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/DaemonRegistryServicesTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/DaemonRegistryServicesTest.groovy
index 5ca93e0..4996537 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/DaemonRegistryServicesTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/DaemonRegistryServicesTest.groovy
@@ -15,7 +15,7 @@
  */
 package org.gradle.launcher.daemon.registry
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.cache.FileLockManager
 import org.gradle.cache.internal.DefaultFileLockManager
 import org.gradle.cache.internal.ProcessMetaDataProvider
@@ -23,6 +23,7 @@
 import org.gradle.internal.file.Chmod
 import org.gradle.internal.remote.internal.inet.SocketInetAddress
 import org.gradle.internal.service.DefaultServiceRegistry
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.configuration.DaemonParameters
 import org.gradle.launcher.daemon.context.DefaultDaemonContext
 import org.gradle.test.fixtures.ConcurrentTestUtil
@@ -64,7 +65,7 @@
                 def context = new DefaultDaemonContext(
                     "$idx",
                     new File("$idx"),
-                    JavaVersion.current(),
+                    JavaLanguageVersion.current(),
                     new File("$idx"),
                     idx,
                     5000,
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/PersistentDaemonRegistryTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/PersistentDaemonRegistryTest.groovy
index 24bfce4..ddefe42 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/PersistentDaemonRegistryTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/registry/PersistentDaemonRegistryTest.groovy
@@ -16,12 +16,13 @@
 
 package org.gradle.launcher.daemon.registry
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.internal.file.Chmod
 import org.gradle.internal.jvm.Jvm
 import org.gradle.internal.remote.Address
 import org.gradle.internal.remote.internal.inet.InetEndpoint
 import org.gradle.internal.remote.internal.inet.MultiChoiceAddress
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.configuration.DaemonParameters
 import org.gradle.launcher.daemon.context.DaemonContext
 import org.gradle.launcher.daemon.context.DefaultDaemonContext
@@ -156,7 +157,7 @@
     }
 
     DaemonContext daemonContext() {
-        new DefaultDaemonContext(UUID.randomUUID().toString(), Jvm.current().javaHome, JavaVersion.current(), tmp.createDir("daemons"), 1L, 600, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
+        new DefaultDaemonContext(UUID.randomUUID().toString(), Jvm.current().javaHome, JavaLanguageVersion.current(), tmp.createDir("daemons"), 1L, 600, [], false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
     }
 
     Address address(int i = addressCounter++) {
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategyTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategyTest.groovy
index ef0e3ef..ea5bf6f 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategyTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategyTest.groovy
@@ -15,8 +15,9 @@
  */
 package org.gradle.launcher.daemon.server
 
-import org.gradle.api.JavaVersion
+
 import org.gradle.internal.remote.Address
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.configuration.DaemonParameters
 import org.gradle.launcher.daemon.context.DaemonContext
 import org.gradle.launcher.daemon.context.DefaultDaemonContext
@@ -44,7 +45,7 @@
     def "daemon should expire when registry file is unreachable"() {
         given:
         DaemonRegistryUnavailableExpirationStrategy expirationStrategy = new DaemonRegistryUnavailableExpirationStrategy(daemon)
-        DaemonContext daemonContext = new DefaultDaemonContext("user", null, JavaVersion.current(), tempDir.file("BOGUS"), 51234L, 10000, [] as List<String>, false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
+        DaemonContext daemonContext = new DefaultDaemonContext("user", null, JavaLanguageVersion.current(), tempDir.file("BOGUS"), 51234L, 10000, [] as List<String>, false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
 
         when:
         1 * daemon.getDaemonContext() >> { daemonContext }
@@ -62,7 +63,7 @@
                 return "DAEMON_ADDRESS"
             }
         }
-        DaemonContext daemonContext = new DefaultDaemonContext("user", null, JavaVersion.current(), daemonDir, 51234L, 10000, [] as List<String>, false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
+        DaemonContext daemonContext = new DefaultDaemonContext("user", null, JavaLanguageVersion.current(), daemonDir, 51234L, 10000, [] as List<String>, false, NativeServicesMode.ENABLED, DaemonParameters.Priority.NORMAL)
         DaemonDir daemonDir = new DaemonDir(daemonDir)
         DaemonRegistry registry = new EmbeddedDaemonRegistry()
         daemonDir.getRegistry().createNewFile()
diff --git a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/toolchain/DaemonJavaToolchainQueryServiceTest.groovy b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/toolchain/DaemonJavaToolchainQueryServiceTest.groovy
index fa8972d..8c3c478 100644
--- a/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/toolchain/DaemonJavaToolchainQueryServiceTest.groovy
+++ b/platforms/core-runtime/launcher/src/test/groovy/org/gradle/launcher/daemon/toolchain/DaemonJavaToolchainQueryServiceTest.groovy
@@ -25,6 +25,7 @@
 import org.gradle.internal.jvm.inspection.JvmToolchainMetadata
 import org.gradle.internal.jvm.inspection.JvmVendor
 import org.gradle.internal.os.OperatingSystem
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.jvm.toolchain.JvmImplementation
 import org.gradle.jvm.toolchain.JvmVendorSpec
 import org.gradle.jvm.toolchain.internal.DefaultJvmVendorSpec
@@ -43,17 +44,17 @@
         def queryService = createQueryServiceWithInstallations(versionRange(8, 12))
 
         when:
-        def filter = createSpec(versionToFind)
+        def filter = createSpec(JavaLanguageVersion.of(versionToFind))
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
-        toolchain.languageVersion == versionToFind
+        toolchain.languageVersion == JavaVersion.toVersion(versionToFind)
         toolchain.javaHome.toString() == systemSpecificAbsolutePath(expectedPath)
 
         where:
-        versionToFind           | expectedPath
-        JavaVersion.VERSION_1_9 | "/path/9"
-        JavaVersion.VERSION_12  | "/path/12"
+        versionToFind | expectedPath
+        9             | "/path/9"
+        12            | "/path/12"
     }
 
     def "uses most recent version of multiple matches for version #versionToFind"() {
@@ -61,18 +62,18 @@
         def queryService = createQueryServiceWithInstallations(["8.0", "8.0.242.hs-adpt", "7.9", "7.7", "14.0.2+12", "8.0.zzz.foo"])
 
         when:
-        def filter = createSpec(versionToFind)
+        def filter = createSpec(JavaLanguageVersion.of(versionToFind))
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
-        toolchain.languageVersion == versionToFind
+        toolchain.languageVersion == JavaVersion.toVersion(versionToFind)
         toolchain.javaHome.toString() == systemSpecificAbsolutePath(expectedPath)
 
         where:
-        versionToFind           | expectedPath
-        JavaVersion.VERSION_1_7 | "/path/7.9"
-        JavaVersion.VERSION_1_8 | "/path/8.0.zzz.foo" // zzz resolves to a real tool version 999
-        JavaVersion.VERSION_14  | "/path/14.0.2+12"
+        versionToFind | expectedPath
+        7             | "/path/7.9"
+        8             | "/path/8.0.zzz.foo" // zzz resolves to a real tool version 999
+        14            | "/path/14.0.2+12"
     }
 
     def "uses j9 toolchain if requested"() {
@@ -80,7 +81,7 @@
         def queryService = createQueryServiceWithInstallations(["8.0", "8.0.242.hs-adpt", "7.9", "7.7", "14.0.2+12", "8.0.1.j9"])
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8, DefaultJvmVendorSpec.any(), JvmImplementation.J9)
+        def filter = createSpec(JavaLanguageVersion.of(8), DefaultJvmVendorSpec.any(), JvmImplementation.J9)
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -93,7 +94,7 @@
         def queryService = createQueryServiceWithInstallations(["8.0.2.j9", "8.0.1.hs"])
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8, DefaultJvmVendorSpec.any(), JvmImplementation.J9)
+        def filter = createSpec(JavaLanguageVersion.of(8), DefaultJvmVendorSpec.any(), JvmImplementation.J9)
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -111,7 +112,7 @@
         )
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8, JvmVendorSpec.IBM)
+        def filter = createSpec(JavaLanguageVersion.of(8), JvmVendorSpec.IBM)
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -128,7 +129,7 @@
         )
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8, JvmVendorSpec.BELLSOFT)
+        def filter = createSpec(JavaLanguageVersion.of(8), JvmVendorSpec.BELLSOFT)
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -140,7 +141,7 @@
         def queryService = createQueryServiceWithInstallations(["8.0", "8.0.242.hs-adpt", "8.0.broken"])
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8)
+        def filter = createSpec(JavaLanguageVersion.of(8))
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -153,7 +154,7 @@
         def queryService = createQueryServiceWithInstallations(["1.8.1", "1.8.2", "1.8.3"], locationFor("1.8.2"))
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_1_8)
+        def filter = createSpec(JavaLanguageVersion.of(8))
         def toolchain = queryService.findMatchingToolchain(filter)
 
         then:
@@ -166,7 +167,7 @@
         def queryService = createQueryServiceWithInstallations(["8", "9", "10"])
 
         when:
-        def filter = createSpec(JavaVersion.VERSION_12)
+        def filter = createSpec(JavaLanguageVersion.of(12))
         queryService.findMatchingToolchain(filter)
 
         then:
@@ -242,7 +243,7 @@
         return (begin..end).collect { it.toString() }
     }
 
-    DaemonJvmCriteria createSpec(JavaVersion javaVersion, JvmVendorSpec vendor = DefaultJvmVendorSpec.any(), JvmImplementation implementation = JvmImplementation.VENDOR_SPECIFIC) {
+    DaemonJvmCriteria createSpec(JavaLanguageVersion javaVersion, JvmVendorSpec vendor = DefaultJvmVendorSpec.any(), JvmImplementation implementation = JvmImplementation.VENDOR_SPECIFIC) {
         new DaemonJvmCriteria(javaVersion, vendor, implementation)
     }
 }
diff --git a/platforms/jvm/jvm-services/src/test/groovy/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetectorTest.groovy b/platforms/jvm/jvm-services/src/test/groovy/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetectorTest.groovy
index a490ed5..54118ae 100644
--- a/platforms/jvm/jvm-services/src/test/groovy/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetectorTest.groovy
+++ b/platforms/jvm/jvm-services/src/test/groovy/org/gradle/internal/jvm/inspection/DefaultJvmVersionDetectorTest.groovy
@@ -38,22 +38,22 @@
 
     def "can determine version of current jvm"() {
         expect:
-        detector.getJavaVersion(Jvm.current()) == JavaVersion.current()
+        detector.getJavaVersionMajor(Jvm.current()) == Integer.parseInt(JavaVersion.current().majorVersion)
     }
 
     def "can determine version of java command for current jvm"() {
         expect:
-        detector.getJavaVersion(Jvm.current().getJavaExecutable().path) == JavaVersion.current()
+        detector.getJavaVersionMajor(Jvm.current().getJavaExecutable().path) == Integer.parseInt(JavaVersion.current().majorVersion)
     }
 
     def "can determine version of java command without file extension"() {
         expect:
-        detector.getJavaVersion(Jvm.current().getJavaExecutable().path.replace(".exe", "")) == JavaVersion.current()
+        detector.getJavaVersionMajor(Jvm.current().getJavaExecutable().path.replace(".exe", "")) == Integer.parseInt(JavaVersion.current().majorVersion)
     }
 
     def "fails for unknown java command"() {
         when:
-        detector.getJavaVersion("unknown")
+        detector.getJavaVersionMajor("unknown")
 
         then:
         def e = thrown(ExecException)
@@ -71,7 +71,7 @@
         def detector = new DefaultJvmVersionDetector(metadataDetector)
 
         when:
-        detector.getJavaVersion(Jvm.current())
+        detector.getJavaVersionMajor(Jvm.current())
 
         then:
         def e = thrown(GradleException)
diff --git a/testing/internal-integ-testing/src/test/groovy/org/gradle/integtests/fixtures/daemon/DaemonContextParserTest.groovy b/testing/internal-integ-testing/src/test/groovy/org/gradle/integtests/fixtures/daemon/DaemonContextParserTest.groovy
index 933e531..daeb539 100644
--- a/testing/internal-integ-testing/src/test/groovy/org/gradle/integtests/fixtures/daemon/DaemonContextParserTest.groovy
+++ b/testing/internal-integ-testing/src/test/groovy/org/gradle/integtests/fixtures/daemon/DaemonContextParserTest.groovy
@@ -16,7 +16,8 @@
 
 package org.gradle.integtests.fixtures.daemon
 
-import org.gradle.api.JavaVersion
+
+import org.gradle.jvm.toolchain.JavaLanguageVersion
 import org.gradle.launcher.daemon.context.DaemonContext
 import org.gradle.util.GradleVersion
 import spock.lang.Specification
@@ -51,7 +52,7 @@
         DaemonContext parsedContext = DaemonContextParser.parseFromString(contextString, GradleVersion.version("8.7"))
         then:
         parsedContext != null
-        parsedContext.javaVersion == JavaVersion.VERSION_1_8 // hardcoded in fixture
+        parsedContext.javaVersion == JavaLanguageVersion.of(8) // hardcoded in fixture
     }
 
     def "parses entries without agent"() {
@@ -85,7 +86,7 @@
         then:
         parsedContext != null
         !parsedContext.shouldApplyInstrumentationAgent()
-        parsedContext.javaVersion == JavaVersion.VERSION_11
+        parsedContext.javaVersion == JavaLanguageVersion.of(11)
     }
 
     def "parses entries with agent"() {