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"),