Replace the native Java host runtime alias rule with a starlark implementation

in preparation for adding toolchain resolution support for the starlark
rules, and eventually removing them once the migration to toolchain
resolution is complete.

PiperOrigin-RevId: 233962397
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
index f2e1ae4..7c19179 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/JavaRules.java
@@ -30,7 +30,6 @@
 import com.google.devtools.build.lib.rules.extra.ExtraActionRule;
 import com.google.devtools.build.lib.rules.java.JavaCcLinkParamsProvider;
 import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
-import com.google.devtools.build.lib.rules.java.JavaHostRuntimeAliasRule;
 import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaInfo;
 import com.google.devtools.build.lib.rules.java.JavaOptions;
@@ -83,7 +82,6 @@
     builder.addRuleDefinition(new JavaPackageConfigurationRule());
     builder.addRuleDefinition(new JavaRuntimeRule());
     builder.addRuleDefinition(new JavaRuntimeAliasRule());
-    builder.addRuleDefinition(new JavaHostRuntimeAliasRule());
     builder.addRuleDefinition(new JavaToolchainAliasRule());
 
     builder.addRuleDefinition(new ExtraActionRule());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
index 669b1c5..af87385 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/BUILD
@@ -13,7 +13,6 @@
         "JavaBinary.java",
         "JavaCcLinkParamsProvider.java",
         "JavaConfigurationLoader.java",
-        "JavaHostRuntimeAliasRule.java",
         "JavaImport.java",
         "JavaImportBaseRule.java",
         "JavaInfo.java",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java
deleted file mode 100644
index 9feffe1..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHostRuntimeAliasRule.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.java;
-
-import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.config.HostTransition;
-import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
-import com.google.devtools.build.lib.rules.LateBoundAlias.CommonAliasRule;
-import java.io.Serializable;
-
-/** Implementation of the {@code java_runtime_alias} rule. */
-public class JavaHostRuntimeAliasRule extends CommonAliasRule<JavaConfiguration> {
-  public JavaHostRuntimeAliasRule() {
-    super(
-        "java_host_runtime_alias",
-        JavaHostRuntimeAliasRule::hostJdkAttribute,
-        JavaConfiguration.class);
-  }
-
-  @Override
-  protected Attribute.Builder<Label> makeAttribute(RuleDefinitionEnvironment environment) {
-    Attribute.Builder<Label> builder = super.makeAttribute(environment);
-    return builder.cfg(HostTransition.INSTANCE).mandatoryProviders(ToolchainInfo.PROVIDER.id());
-  }
-
-  static LabelLateBoundDefault<JavaConfiguration> hostJdkAttribute(RuleDefinitionEnvironment env) {
-    return LabelLateBoundDefault.fromHostConfiguration(
-        JavaConfiguration.class,
-        env.getToolsLabel(JavaImplicitAttributes.HOST_JDK_LABEL),
-        (Attribute.LateBoundDefault.Resolver<JavaConfiguration, Label> & Serializable)
-            (rule, attributes, configuration) -> configuration.getRuntimeLabel());
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 58c28c9..6f17d30 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -629,6 +629,9 @@
         ],
         exclude = ["analysis/util/DefaultBuildOptionsForTesting.java"],
     ),
+    data = [
+        "//tools/jdk:srcs",
+    ],
     resources = [
         "analysis/mock/MOCK_CROSSTOOL",
     ],
@@ -692,6 +695,7 @@
         "//third_party:jsr305",
         "//third_party:mockito",
         "//third_party/protobuf:protobuf_java",
+        "@bazel_tools//tools/java/runfiles",
     ],
 )
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index e58cd0e..99510e1 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -13,9 +13,12 @@
 // limitations under the License.
 package com.google.devtools.build.lib.analysis.mock;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
+import com.google.common.io.MoreFiles;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.PlatformConfigurationLoader;
 import com.google.devtools.build.lib.analysis.ShellConfiguration;
@@ -46,8 +49,12 @@
 import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
 import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.runfiles.Runfiles;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /** Subclass of {@link AnalysisMock} using Bazel-specific semantics. */
@@ -92,8 +99,19 @@
     config.create("/protobuf/WORKSPACE");
     config.overwrite("WORKSPACE", workspaceContents.toArray(new String[workspaceContents.size()]));
     config.create("/bazel_tools_workspace/WORKSPACE", "workspace(name = 'bazel_tools')");
+    Runfiles runfiles = Runfiles.create();
+    for (String filename :
+        Arrays.asList("tools/jdk/toolchain_utils.bzl", "tools/jdk/java_toolchain_alias.bzl")) {
+      java.nio.file.Path path = Paths.get(runfiles.rlocation("io_bazel/" + filename));
+      if (!Files.exists(path)) {
+        continue; // the io_bazel workspace root only exists for Bazel
+      }
+      config.create(
+          "/bazel_tools_workspace/" + filename, MoreFiles.asCharSource(path, UTF_8).read());
+    }
     config.create(
         "/bazel_tools_workspace/tools/jdk/BUILD",
+        "load(':java_toolchain_alias.bzl', 'java_host_runtime_alias')",
         "package(default_visibility=['//visibility:public'])",
         "java_toolchain(",
         "  name = 'toolchain',",
@@ -368,3 +386,4 @@
     repositoryHandlers.put(LocalConfigPlatformRule.NAME, new LocalConfigPlatformFunction());
   }
 }
+
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
index ccdc053..d57016f 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java
@@ -89,12 +89,6 @@
       scratch.file(RULE_DIRECTORY + "/" + file.getName(), Files.readAllBytes(file.toPath()));
     }
     scratch.file(RULE_DIRECTORY + "/BUILD", "exports_files(['java_lite_proto_library.bzl'])");
-    scratch.file(
-        "tools/jdk/build_defs.bzl",
-        Files.readAllBytes(Runfiles.location("tools/jdk/build_defs.bzl").toPath()));
-    scratch.file(
-        "tools/jdk/toolchain_utils.bzl",
-        Files.readAllBytes(Runfiles.location("tools/jdk/toolchain_utils.bzl").toPath()));
     invalidatePackages();
   }