Automated rollback of commit 37eb1d79ecb019220073b62321f9eb88aebaa4e4.

*** Reason for rollback ***

Breaks multiple downstream projects, see https://buildkite.com/bazel/bazel-auto-sheriff-face-with-cowboy-hat/builds/364#c671c11c-f885-4527-829f-057b0e29d29c

*** Original change description ***

Attach Java runtime to Java toolchains

Defining a new rule "java_runtime_version_alias", which uses a custom configuration flag transition to select a specific version of remote JDK.

Added a weird "selected_java_runtime" attribute, which needs to exist until the incompatible_use_java_toolchain_resolution is flipped.

Added the test for the attached runtime and fixing the test for host_javabase (now it is only modified for targets in exec...

***

PiperOrigin-RevId: 346949769
diff --git a/scripts/bootstrap/BUILD.bootstrap b/scripts/bootstrap/BUILD.bootstrap
deleted file mode 100644
index b5991f6..0000000
--- a/scripts/bootstrap/BUILD.bootstrap
+++ /dev/null
@@ -1,23 +0,0 @@
-load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain")
-
-# This toolchain is used to bootstrap Bazel.
-default_java_toolchain(
-    name = "bootstrap_toolchain",
-    bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath.jar"],
-    genclass = ["//src/java_tools/buildjar:bootstrap_genclass_deploy.jar"],
-    ijar = ["//third_party/ijar"],
-    java_runtime = "@local_jdk//:jdk",
-    javabuilder = ["//src/java_tools/buildjar:bootstrap_VanillaJavaBuilder_deploy.jar"],
-    jvm_opts = [
-        # Prevent "Could not reserve enough space for object heap" errors on Windows.
-        "-Xmx512m",
-        # Using tiered compilation improves performance of Javac when not using the worker mode.
-        "-XX:+TieredCompilation",
-        "-XX:TieredStopAtLevel=1",
-    ],
-    singlejar = ["//src/java_tools/singlejar:bootstrap_deploy.jar"],
-    source_version = "8",
-    tags = ["manual"],
-    target_version = "8",
-    visibility = ["//visibility:public"],
-)
diff --git a/scripts/bootstrap/bootstrap.sh b/scripts/bootstrap/bootstrap.sh
index 597379b..a42c861 100755
--- a/scripts/bootstrap/bootstrap.sh
+++ b/scripts/bootstrap/bootstrap.sh
@@ -36,15 +36,12 @@
       --strategy=Javac=worker --worker_quit_after_build --ignore_unsupported_sandboxing \
       --compilation_mode=opt \
       --distdir=derived/distdir \
-      --java_toolchain=//scripts/bootstrap:bootstrap_toolchain \
-      --host_java_toolchain=//scripts/bootstrap:bootstrap_toolchain \
-      --incompatible_use_toolchain_resolution_for_java_rules \
-      --extra_toolchains=//scripts/bootstrap:bootstrap_toolchain_definition \
+      --java_toolchain=//src/java_tools/buildjar:bootstrap_toolchain \
+      --host_java_toolchain=//src/java_tools/buildjar:bootstrap_toolchain \
+      --extra_toolchains=//src/java_tools/buildjar:bootstrap_toolchain_definition \
       ${DIST_BOOTSTRAP_ARGS:-} \
       ${EXTRA_BAZEL_ARGS:-}"
 
-cp scripts/bootstrap/BUILD.bootstrap scripts/bootstrap/BUILD
-
 if [ -z "${BAZEL-}" ]; then
   function _run_bootstrapping_bazel() {
     local command=$1
diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD
index cf24d76..6edcb24 100644
--- a/src/java_tools/buildjar/BUILD
+++ b/src/java_tools/buildjar/BUILD
@@ -1,4 +1,5 @@
 load("@rules_java//java:defs.bzl", "java_binary")
+load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain")
 
 # Description:
 # JavaBuilder and java tools used by Bazel
@@ -53,3 +54,24 @@
     tags = ["manual"],
     visibility = ["//visibility:public"],
 )
+
+# This toolchain is used to bootstrap Bazel.
+default_java_toolchain(
+    name = "bootstrap_toolchain",
+    bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath.jar"],
+    genclass = ["bootstrap_genclass_deploy.jar"],
+    ijar = ["//third_party/ijar"],
+    javabuilder = ["bootstrap_VanillaJavaBuilder_deploy.jar"],
+    jvm_opts = [
+        # Prevent "Could not reserve enough space for object heap" errors on Windows.
+        "-Xmx512m",
+        # Using tiered compilation improves performance of Javac when not using the worker mode.
+        "-XX:+TieredCompilation",
+        "-XX:TieredStopAtLevel=1",
+    ],
+    singlejar = ["//src/java_tools/singlejar:bootstrap_deploy.jar"],
+    source_version = "8",
+    tags = ["manual"],
+    target_version = "8",
+    visibility = ["//visibility:public"],
+)
diff --git a/src/java_tools/singlejar/BUILD b/src/java_tools/singlejar/BUILD
index 4eeae88..2de4688 100644
--- a/src/java_tools/singlejar/BUILD
+++ b/src/java_tools/singlejar/BUILD
@@ -1,10 +1,7 @@
 # Description:
 #   SingleJar combines multiple zip files and additional files
 #   into a single zip file.
-package(default_visibility = [
-    "//scripts/bootstrap:__subpackages__",
-    "//src/java_tools:__subpackages__",
-])
+package(default_visibility = ["//src/java_tools:__subpackages__"])
 
 filegroup(
     name = "srcs",
diff --git a/src/test/shell/bazel/bazel_java14_test.sh b/src/test/shell/bazel/bazel_java14_test.sh
index b9db489..51882b8 100755
--- a/src/test/shell/bazel/bazel_java14_test.sh
+++ b/src/test/shell/bazel/bazel_java14_test.sh
@@ -125,7 +125,8 @@
   }
 }
 EOF
-  bazel run java/main:Javac14Example --java_language_version=14 --java_runtime_version=14 --test_output=all --verbose_failures &>"${TEST_log}"
+  # TODO(ilist): remove tool_java_runtime_version after java_runtime is attached to the toolchain
+  bazel run java/main:Javac14Example --java_language_version=14 --java_runtime_version=14 --tool_java_runtime_version=14 --test_output=all --verbose_failures &>"${TEST_log}"
   expect_log "0"
 }
 
diff --git a/src/test/shell/bazel/bazel_java15_test.sh b/src/test/shell/bazel/bazel_java15_test.sh
index 118efac..ffe866e 100755
--- a/src/test/shell/bazel/bazel_java15_test.sh
+++ b/src/test/shell/bazel/bazel_java15_test.sh
@@ -125,7 +125,8 @@
   }
 }
 EOF
-  bazel run java/main:Javac15Example --java_language_version=15 --java_runtime_version=15 --test_output=all --verbose_failures &>"${TEST_log}"
+  # TODO(ilist): remove tool_java_runtime_version after java_runtime is attached to the toolchain
+  bazel run java/main:Javac15Example --java_language_version=15 --java_runtime_version=15 --tool_java_runtime_version=15 --test_output=all --verbose_failures &>"${TEST_log}"
   expect_log "^Hello,\$"
   expect_log "^World\$"
 }
diff --git a/src/test/shell/bazel/bazel_java_test_defaults.sh b/src/test/shell/bazel/bazel_java_test_defaults.sh
index 22e18c9..a6bce31 100755
--- a/src/test/shell/bazel/bazel_java_test_defaults.sh
+++ b/src/test/shell/bazel/bazel_java_test_defaults.sh
@@ -155,7 +155,6 @@
   bazel coverage java/main:JavaBinary \
       --java_toolchain=//java/main:default_toolchain \
       --javabase=@bazel_tools//tools/jdk:remote_jdk11 \
-      --extra_toolchains=//java/main:default_toolchain_definition \
       --verbose_failures -s &>"${TEST_log}" \
       && fail "Coverage succeeded even when jacocorunner not set"
   expect_log "jacocorunner not set in java_toolchain:"
diff --git a/src/test/shell/integration/bazel_java_test.sh b/src/test/shell/integration/bazel_java_test.sh
index 662a04a..524f446 100755
--- a/src/test/shell/integration/bazel_java_test.sh
+++ b/src/test/shell/integration/bazel_java_test.sh
@@ -44,7 +44,7 @@
   expect_log "java-home: .*/embedded_tools/jdk"
 }
 
-function test_toolchain_javabase() {
+function test_host_javabase() {
   cat << EOF >> WORKSPACE
 load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_repository")
 local_java_repository(
@@ -66,98 +66,27 @@
   mkdir -p foobar/bin
   touch foobar/bin/java
 
-  # We expect the given host_javabase does not appear in the command line of
+  # We expect the given host_javabase to appear in the command line of
   # java_library actions.
   bazel aquery --output=text --host_javabase=@host_javabase//:jdk --tool_java_runtime_version='host_javabase' //java:javalib >& $TEST_log
-  expect_log "exec external/remotejdk11_.*/bin/java"
-  expect_not_log "exec external/host_javabase/bin/java"
+  expect_log "exec external/host_javabase/bin/java"
 
-  # If we don't specify anything, we expect the remote JDK to be used.
+  # If we don't specify anything, we expect the embedded JDK to be used.
+  # Note that this will change in the future but is the current state.
   bazel aquery --output=text //java:javalib >& $TEST_log
   expect_not_log "exec external/embedded_jdk/bin/java"
   expect_log "exec external/remotejdk11_.*/bin/java"
 
   bazel aquery --output=text --host_javabase=@host_javabase//:jdk --tool_java_runtime_version='host_javabase' \
     //java:javalib >& $TEST_log
-  expect_log "exec external/remotejdk11_.*/bin/java"
-  expect_not_log "exec external/host_javabase/bin/java"
+  expect_log "exec external/host_javabase/bin/java"
+  expect_not_log "exec external/remotejdk_.*/bin/java"
 
   bazel aquery --output=text \
     //java:javalib >& $TEST_log
   expect_log "exec external/remotejdk11_.*/bin/java"
-
-  # If we change language version to 15, we expect runtime to change
-  bazel aquery --incompatible_use_toolchain_resolution_for_java_rules --output=text --host_javabase=@host_javabase//:jdk \
-     --tool_java_runtime_version='host_javabase' --java_language_version=15 \
-    //java:javalib >& $TEST_log
-  expect_not_log "exec external/remotejdk11_.*/bin/java"
-  expect_log "exec external/remotejdk15_.*/bin/java"
 }
 
-function test_host_javabase() {
-  cat << EOF >> WORKSPACE
-load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_repository")
-local_java_repository(
-    name = "host_javabase",
-    java_home = "$PWD/foobar",
-    version = "11",
-)
-EOF
-  mkdir -p java
-  cat >> java/rule.bzl <<EOF
-def _sample_rule_impl(ctx):
-  return []
-
-sample_rule = rule(
-  implementation = _sample_rule_impl,
-  attrs = {
-    "dep": attr.label(cfg = 'exec'),
-  },
-)
-EOF
-
-  cat << EOF > java/BUILD
-load(":rule.bzl", "sample_rule")
-
-java_library(
-    name = "javalib",
-    srcs = ["HelloWorld.java"],
-)
-sample_rule(
-    name = 'sample',
-    dep = ':javalib',
-)
-EOF
-  touch java/HelloWorld.java
-
-  mkdir -p foobar/bin
-  touch foobar/bin/java
-
-  # We expect the given host_javabase does not appear in the command line of
-  # java_library actions.
-  bazel aquery --output=text --host_javabase=@host_javabase//:jdk --tool_java_runtime_version='host_javabase' 'deps(//java:sample,1)' >& $TEST_log
-  expect_log "exec external/remotejdk11_.*/bin/java"
-  expect_not_log "exec external/host_javabase/bin/java"
-
-  # If we don't specify anything, we expect the embedded JDK to be used.
-  # Note that this will change in the future but is the current state.
-  bazel aquery --output=text 'deps(//java:sample,1)' >& $TEST_log
-  expect_not_log "exec external/embedded_jdk/bin/java"
-  expect_log "exec external/remotejdk11_.*/bin/java"
-
-  bazel aquery --output=text --host_javabase=@host_javabase//:jdk --tool_java_runtime_version='host_javabase' \
-    'deps(//java:sample,1)' >& $TEST_log
-  expect_log "exec external/remotejdk11_.*/bin/java"
-  expect_not_log "exec external/host_javabase/bin/java"
-
-
-  bazel aquery --output=text \
-    'deps(//java:sample,1)' >& $TEST_log
-  expect_log "exec external/remotejdk11_.*/bin/java"
-}
-
-
-
 function test_javabase() {
    cat << EOF >> WORKSPACE
 load("@bazel_tools//tools/jdk:local_java_repository.bzl", "local_java_repository")
diff --git a/tools/jdk/BUILD.tools b/tools/jdk/BUILD.tools
index b1fc627..e0ccf4f 100644
--- a/tools/jdk/BUILD.tools
+++ b/tools/jdk/BUILD.tools
@@ -13,7 +13,6 @@
     "//tools/jdk:java_toolchain_alias.bzl",
     "java_host_runtime_alias",
     "java_runtime_alias",
-    "java_runtime_version_alias",
     "java_toolchain_alias",
     "legacy_java_runtime_alias",
     "legacy_java_toolchain_alias",
@@ -378,7 +377,6 @@
 default_java_toolchain(
     name = "toolchain_jdk_14",
     configuration = dict(),
-    java_runtime = "@bazel_tools//tools/jdk:remotejdk_14",
     source_version = "14",
     target_version = "14",
 )
@@ -387,7 +385,6 @@
 default_java_toolchain(
     name = "toolchain_jdk_15",
     configuration = dict(),
-    java_runtime = "@bazel_tools//tools/jdk:remotejdk_15",
     source_version = "15",
     target_version = "15",
 )
@@ -423,10 +420,9 @@
 )
 
 # A JDK 11 for use as a --host_javabase.
-java_runtime_version_alias(
+alias(
     name = "remote_jdk11",
-    runtime_version = "remotejdk_11",
-    selected_java_runtime = select(
+    actual = select(
         {
             "//src/conditions:darwin": "@remotejdk11_macos//:jdk",
             "//src/conditions:windows": "@remotejdk11_win//:jdk",
@@ -440,33 +436,3 @@
     ),
     visibility = ["//visibility:public"],
 )
-
-java_runtime_version_alias(
-    name = "remotejdk_14",
-    runtime_version = "remotejdk_14",
-    selected_java_runtime = select(
-        {
-            "//src/conditions:darwin": "@remotejdk14_macos//:jdk",
-            "//src/conditions:windows": "@remotejdk14_win//:jdk",
-            "//src/conditions:linux_x86_64": "@remotejdk14_linux//:jdk",
-        },
-        no_match_error = "Could not find a JDK for host execution environment, please explicitly" +
-                         " provide one using `--host_javabase.`",
-    ),
-    visibility = ["//visibility:public"],
-)
-
-java_runtime_version_alias(
-    name = "remotejdk_15",
-    runtime_version = "remotejdk_15",
-    selected_java_runtime = select(
-        {
-            "//src/conditions:darwin": "@remotejdk15_macos//:jdk",
-            "//src/conditions:windows": "@remotejdk15_win//:jdk",
-            "//src/conditions:linux_x86_64": "@remotejdk15_linux//:jdk",
-        },
-        no_match_error = "Could not find a JDK for host execution environment, please explicitly" +
-                         " provide one using `--host_javabase.`",
-    ),
-    visibility = ["//visibility:public"],
-)
diff --git a/tools/jdk/default_java_toolchain.bzl b/tools/jdk/default_java_toolchain.bzl
index f71f794..f98adef 100644
--- a/tools/jdk/default_java_toolchain.bzl
+++ b/tools/jdk/default_java_toolchain.bzl
@@ -71,7 +71,6 @@
     bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
     source_version = "8",
     target_version = "8",
-    java_runtime = "@bazel_tools//tools/jdk:remote_jdk11",
 )
 
 JVM8_TOOLCHAIN_CONFIGURATION = dict(
diff --git a/tools/jdk/java_toolchain_alias.bzl b/tools/jdk/java_toolchain_alias.bzl
index b7a6126..4647666 100644
--- a/tools/jdk/java_toolchain_alias.bzl
+++ b/tools/jdk/java_toolchain_alias.bzl
@@ -72,48 +72,6 @@
     },
 )
 
-def _java_runtime_version_alias(ctx):
-    """An alias fixing a specific version of java_runtime."""
-    if java_common.is_java_toolchain_resolution_enabled_do_not_use(ctx = ctx):
-        toolchain = ctx.toolchains["@bazel_tools//tools/jdk:runtime_toolchain_type"]
-    else:
-        toolchain = ctx.attr.selected_java_runtime[java_common.JavaRuntimeInfo]
-    return [
-        toolchain,
-        platform_common.TemplateVariableInfo({
-            "JAVA": str(toolchain.java_executable_exec_path),
-            "JAVABASE": str(toolchain.java_home),
-        }),
-        # See b/65239471 for related discussion of handling toolchain runfiles/data.
-        DefaultInfo(
-            runfiles = ctx.runfiles(transitive_files = toolchain.files),
-            files = toolchain.files,
-        ),
-    ]
-
-def _java_runtime_transition_impl(settings, attr):
-    return {"//command_line_option:java_runtime_version": attr.runtime_version}
-
-_java_runtime_transition = transition(
-    implementation = _java_runtime_transition_impl,
-    inputs = [],
-    outputs = ["//command_line_option:java_runtime_version"],
-)
-
-java_runtime_version_alias = rule(
-    implementation = _java_runtime_version_alias,
-    toolchains = ["@bazel_tools//tools/jdk:runtime_toolchain_type"],
-    attrs = {
-        "runtime_version": attr.string(mandatory = True),
-        # TODO(ilist): remove after java toolchain resolution flag is flipped
-        "selected_java_runtime": attr.label(mandatory = True),
-        "_allowlist_function_transition": attr.label(
-            default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
-        ),
-    },
-    cfg = _java_runtime_transition,
-)
-
 def _java_toolchain_alias(ctx):
     """An experimental implementation of java_toolchain_alias using toolchain resolution."""
     if java_common.is_java_toolchain_resolution_enabled_do_not_use(ctx = ctx):