Refactor JDK dependency to separate host and target JDKs

PiperOrigin-RevId: 235554287
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 92ebf3c..f0a457a 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
@@ -35,6 +35,7 @@
 import com.google.devtools.build.lib.rules.java.JavaOptions;
 import com.google.devtools.build.lib.rules.java.JavaPackageConfigurationRule;
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses.IjarBaseRule;
+import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaHostRuntimeBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaRuntimeBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaToolchainBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaRuntimeAliasRule;
@@ -69,6 +70,7 @@
     builder.addRuleDefinition(new IjarBaseRule());
     builder.addRuleDefinition(new JavaToolchainBaseRule());
     builder.addRuleDefinition(new JavaRuntimeBaseRule());
+    builder.addRuleDefinition(new JavaHostRuntimeBaseRule());
     builder.addRuleDefinition(new BazelJavaRuleClasses.JavaBaseRule());
     builder.addRuleDefinition(new ProguardLibraryRule());
     builder.addRuleDefinition(new JavaImportBaseRule());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
index a7a467d..211a4c7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
@@ -27,7 +27,7 @@
 import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
 import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
-import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaRuntimeBaseRule;
+import com.google.devtools.build.lib.rules.java.JavaRuleClasses.JavaHostRuntimeBaseRule;
 
 /** A base rule for building the java_import rule. */
 public class JavaImportBaseRule implements RuleDefinition {
@@ -75,7 +75,9 @@
         .name("$java_import_base")
         .type(RuleClassType.ABSTRACT)
         .ancestors(
-            BaseRuleClasses.RuleBase.class, ProguardLibraryRule.class, JavaRuntimeBaseRule.class)
+            BaseRuleClasses.RuleBase.class,
+            ProguardLibraryRule.class,
+            JavaHostRuntimeBaseRule.class)
         .build();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
index 2364901..5467c8c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleClasses.java
@@ -82,6 +82,24 @@
                   .value(JavaSemantics.jvmAttribute(env))
                   .mandatoryProviders(ToolchainInfo.PROVIDER.id())
                   .useOutputLicenses())
+          .build();
+    }
+
+    @Override
+    public Metadata getMetadata() {
+      return RuleDefinition.Metadata.builder()
+          .name("$java_runtime_toolchain_base_rule")
+          .type(RuleClassType.ABSTRACT)
+          .ancestors(JavaHostRuntimeBaseRule.class)
+          .build();
+    }
+  }
+
+  /** Common attributes for rules that use the host Java runtime. */
+  public static final class JavaHostRuntimeBaseRule implements RuleDefinition {
+    @Override
+    public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
+      return builder
           .add(
               attr(HOST_JAVA_RUNTIME_ATTRIBUTE_NAME, LABEL)
                   .cfg(HostTransition.INSTANCE)
@@ -93,7 +111,7 @@
     @Override
     public Metadata getMetadata() {
       return RuleDefinition.Metadata.builder()
-          .name("$java_runtime_toolchain_base_rule")
+          .name("$java_host_runtime_toolchain_base_rule")
           .type(RuleClassType.ABSTRACT)
           .build();
     }