Fix bootstrap runtime version selection

Use the default language version when `--java_language_version` is unset

Work towards https://github.com/bazelbuild/rules_java/issues/387

PiperOrigin-RevId: 1007171705
Change-Id: Ibb1ce2fdb76b3f532bb6634361cc8bbafdfda7c0
diff --git a/test/toolchains/bootclasspath_tests.bzl b/test/toolchains/bootclasspath_tests.bzl
index 15ccd4f..7e5caf1 100644
--- a/test/toolchains/bootclasspath_tests.bzl
+++ b/test/toolchains/bootclasspath_tests.bzl
@@ -68,6 +68,22 @@
     system_path = target[java_common.BootClassPathInfo]._system_path
     env.expect.that_str(system_path).contains("local_jdk")
 
+def _test_incompatible_language_version_bootclasspath_enabled_default_language_version(name):
+    analysis_test(
+        name = name,
+        impl = _test_incompatible_language_version_bootclasspath_enabled_default_language_version_impl,
+        target = Label("//toolchains:platformclasspath"),
+        config_settings = {
+            "//command_line_option:java_language_version": "",
+            "//command_line_option:java_runtime_version": "remotejdk_17",
+            str(Label("//toolchains:incompatible_language_version_bootclasspath")): True,
+        },
+    )
+
+def _test_incompatible_language_version_bootclasspath_enabled_default_language_version_impl(env, target):
+    system_path = target[java_common.BootClassPathInfo]._system_path
+    env.expect.that_str(system_path).contains("remotejdk11_")
+
 def _test_jdk8_uses_tree_artifact(name):
     analysis_test(
         name = name,
@@ -123,6 +139,7 @@
             _test_incompatible_language_version_bootclasspath_disabled,
             _test_incompatible_language_version_bootclasspath_enabled_versioned,
             _test_incompatible_language_version_bootclasspath_enabled_unversioned,
+            _test_incompatible_language_version_bootclasspath_enabled_default_language_version,
             _test_jdk8_uses_tree_artifact,
             _test_jdk11_uses_source_launcher,
         ],
diff --git a/toolchains/bootclasspath.bzl b/toolchains/bootclasspath.bzl
index 256c032..4002cbf 100644
--- a/toolchains/bootclasspath.bzl
+++ b/toolchains/bootclasspath.bzl
@@ -20,6 +20,10 @@
 
 visibility("private")
 
+# If this is changed, the docs for "{,tool_}java_language_version" also
+# need to be updated in the Bazel user manual
+DEFAULT_JAVA_LANGUAGE_VERSION = "11"
+
 # TODO: This provider and is only necessary since --java_{language,runtime}_version
 # are not available directly to Starlark.
 _JavaVersionsInfo = provider(
@@ -66,6 +70,9 @@
     Otherwise, the language version replaces the numeric part of the runtime version, e.g.,
     "remotejdk_17" becomes "remotejdk_8".
     """
+    if java_language_version == "":
+        java_language_version = DEFAULT_JAVA_LANGUAGE_VERSION
+
     prefix, separator, version = java_runtime_version.rpartition("_")
     if version and version.isdigit():
         new_version = java_language_version
diff --git a/toolchains/default_java_toolchain.bzl b/toolchains/default_java_toolchain.bzl
index f131a62..b047d9d 100644
--- a/toolchains/default_java_toolchain.bzl
+++ b/toolchains/default_java_toolchain.bzl
@@ -15,7 +15,11 @@
 """Rules for defining default_java_toolchain"""
 
 load("//java/toolchains:java_toolchain.bzl", "java_toolchain")
-load(":bootclasspath.bzl", _bootclasspath = "bootclasspath")
+load(
+    ":bootclasspath.bzl",
+    _DEFAULT_JAVA_LANGUAGE_VERSION = "DEFAULT_JAVA_LANGUAGE_VERSION",
+    _bootclasspath = "bootclasspath",
+)
 
 # JVM options, without patching java.compiler and jdk.compiler modules.
 BASE_JDK9_JVM_OPTS = [
@@ -70,10 +74,6 @@
     "-Xmaxwarns -1",
 ]
 
-# If this is changed, the docs for "{,tool_}java_language_version" also
-# need to be updated in the Bazel user manual
-_DEFAULT_JAVA_LANGUAGE_VERSION = "11"
-
 # Default java_toolchain parameters
 _BASE_TOOLCHAIN_CONFIGURATION = dict(
     deps_checker = Label("@remote_java_tools//:ImportDepsChecker"),