Use exec transitions in Java related rules.
Android rule's transitions are the first thing Java toolchain resolution hits. Android uses Java to build build tools and needs correct transition of Java for this.
Closes #12202.
PiperOrigin-RevId: 335415908
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
index c4da347..8d467f6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBaseRule.java
@@ -24,7 +24,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.rules.config.ConfigFeatureFlagProvider;
@@ -93,7 +93,7 @@
// rule so they're not defined in multiple places
.add(
attr("$android_resources_busybox", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(environment.getToolsLabel(AndroidRuleClasses.DEFAULT_RESOURCES_BUSYBOX)))
.add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 4ec66bb..4f3288a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -38,8 +38,8 @@
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.BuildOptionsView;
import com.google.devtools.build.lib.analysis.config.CoreOptions;
+import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
-import com.google.devtools.build.lib.analysis.config.HostTransition;
import com.google.devtools.build.lib.analysis.config.TransitionFactories;
import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.cmdline.Label;
@@ -488,11 +488,11 @@
// processed XML expressions into Java code.
.add(
attr(DataBinding.DATABINDING_ANNOTATION_PROCESSOR_ATTR, LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(env.getToolsLabel("//tools/android:databinding_annotation_processor")))
.add(
attr(DataBinding.DATABINDING_EXEC_PROCESSOR_ATTR, LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:databinding_exec")))
.advertiseStarlarkProvider(
@@ -531,12 +531,12 @@
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr("plugins", LABEL_LIST)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.allowedRuleClasses("java_plugin")
.legacyAllowAnyFileType())
.add(
attr(":java_plugins", LABEL_LIST)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.allowedRuleClasses("java_plugin")
.silentRuleClassFilter()
.value(JavaSemantics.JAVA_PLUGINS))
@@ -550,16 +550,16 @@
.add(attr("javacopts", STRING_LIST))
.add(
attr("$idlclass", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:IdlClass")))
.add(
attr("$desugar_java8_extra_bootclasspath", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(env.getToolsLabel("//tools/android:desugar_java8_extra_bootclasspath")))
.add(
attr("$android_resources_busybox", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(DEFAULT_RESOURCES_BUSYBOX)))
.build();
@@ -639,7 +639,7 @@
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr("debug_key", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.legacyAllowAnyFileType()
.value(env.getToolsLabel("//tools/android:debug_keystore")))
/* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(debug_signing_keys) -->
@@ -650,7 +650,7 @@
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr("debug_signing_keys", LABEL_LIST)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.legacyAllowAnyFileType())
/* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(debug_signing_lineage_file) -->
File containing the signing lineage for the debug_signing_keys. Usually you do not
@@ -660,7 +660,7 @@
<!-- #END_BLAZE_RULE.ATTRIBUTE --> */
.add(
attr("debug_signing_lineage_file", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.legacyAllowAnyFileType())
/* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(nocompress_extensions) -->
A list of file extension to leave uncompressed in apk.
@@ -713,57 +713,57 @@
.add(attr(ResourceFilterFactory.DENSITIES_NAME, STRING_LIST))
.add(
attr("$build_incremental_dexmanifest", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
.add(
attr("$stubify_manifest", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(STUBIFY_MANIFEST_LABEL)))
.add(
attr("$shuffle_jars", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:shuffle_jars")))
.add(
attr("$dexbuilder", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:dexbuilder")))
.add(
attr("$dexbuilder_after_proguard", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:dexbuilder_after_proguard")))
.add(
attr("$dexsharder", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:dexsharder")))
.add(
attr("$dexmerger", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:dexmerger")))
.add(
attr("$merge_dexzips", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:merge_dexzips")))
.add(
attr("$incremental_install", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(INCREMENTAL_INSTALL_LABEL)))
.add(
attr("$build_split_manifest", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(BUILD_SPLIT_MANIFEST_LABEL)))
.add(
attr("$strip_resources", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel(STRIP_RESOURCES_LABEL)))
.add(
@@ -776,7 +776,7 @@
.aspect(dexArchiveAspect, DexArchiveAspect.ONLY_DESUGAR_JAVA8))
.add(
attr("$desugar", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:desugar_java8")))
.add(
@@ -784,7 +784,7 @@
.value(env.getToolsLabel("//tools/android:java8_legacy_dex")))
.add(
attr("$build_java8_legacy_dex", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:build_java8_legacy_dex")))
.add(
@@ -892,12 +892,12 @@
.add(attr(":extra_proguard_specs", LABEL_LIST).value(JavaSemantics.EXTRA_PROGUARD_SPECS))
.add(
attr("$dex_list_obfuscator", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:dex_list_obfuscator")))
.add(
attr(":bytecode_optimizer", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(JavaSemantics.BYTECODE_OPTIMIZER))
// We need the C++ toolchain for every sub-configuration to get the correct linker.
.add(
@@ -926,7 +926,7 @@
// deploy jar so that they can be added to the APK.
.add(
attr("$resource_extractor", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:resource_extractor")))
/* <!-- #BLAZE_RULE(android_binary).ATTRIBUTE(instruments) -->
@@ -942,7 +942,7 @@
.allowedFileTypes(NO_FILE))
.add(
attr("$instrumentation_test_check", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(
new Attribute.ComputedDefault() {
@Override
@@ -955,7 +955,7 @@
.exec())
.add(
attr("$zip_filter", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(env.getToolsLabel("//tools/android:zip_filter")))
.add(
@@ -968,7 +968,7 @@
// This comes from the --legacy_main_dex_list_generator flag.
.add(
attr(":legacy_main_dex_list_generator", LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(LEGACY_MAIN_DEX_LIST_GENERATOR)
.exec())
.removeAttribute("data")
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
index 42e45fe..3c67766 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/BUILD
@@ -48,6 +48,7 @@
"//src/main/java/com/google/devtools/build/lib/analysis:config/compilation_mode",
"//src/main/java/com/google/devtools/build/lib/analysis:config/core_option_converters",
"//src/main/java/com/google/devtools/build/lib/analysis:config/core_options",
+ "//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_provider",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
index d2acd2e..72cedfb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/DexArchiveAspect.java
@@ -43,7 +43,7 @@
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
-import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.IterablesChain;
@@ -147,7 +147,7 @@
// Parse labels since we don't have RuleDefinitionEnvironment.getLabel like in a rule
.add(
attr(ASPECT_DESUGAR_PREREQ, LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(
Label.parseAbsoluteUnchecked(
@@ -168,7 +168,7 @@
// Marginally improves "query2" precision for targets that disable incremental dexing
result.add(
attr(ASPECT_DEXBUILDER_PREREQ, LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.exec()
.value(Label.parseAbsoluteUnchecked(toolsRepository + "//tools/android:dexbuilder")));
}
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 1b0f335..9cf587a 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
@@ -187,9 +187,9 @@
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_configuration",
"//src/main/java/com/google/devtools/build/lib/analysis:config/build_options",
"//src/main/java/com/google/devtools/build/lib/analysis:config/core_option_converters",
+ "//src/main/java/com/google/devtools/build/lib/analysis:config/execution_transition_factory",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment",
"//src/main/java/com/google/devtools/build/lib/analysis:config/fragment_options",
- "//src/main/java/com/google/devtools/build/lib/analysis:config/host_transition",
"//src/main/java/com/google/devtools/build/lib/analysis:config/invalid_configuration_exception",
"//src/main/java/com/google/devtools/build/lib/analysis:file_provider",
"//src/main/java/com/google/devtools/build/lib/analysis:package_specification_provider",
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 02103dc..955c8f4 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
@@ -20,7 +20,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.ExecutionTransitionFactory;
import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
@@ -102,7 +102,7 @@
return builder
.add(
attr(HOST_JAVA_RUNTIME_ATTRIBUTE_NAME, LABEL)
- .cfg(HostTransition.createFactory())
+ .cfg(ExecutionTransitionFactory.create())
.value(JavaSemantics.hostJdkAttribute(env))
.mandatoryProviders(ToolchainInfo.PROVIDER.id()))
.build();
diff --git a/src/test/shell/integration/bazel_worker_test.sh b/src/test/shell/integration/bazel_worker_test.sh
index 40feecb..cbac89f 100755
--- a/src/test/shell/integration/bazel_worker_test.sh
+++ b/src/test/shell/integration/bazel_worker_test.sh
@@ -145,7 +145,7 @@
work = rule(
implementation=_impl,
attrs={
- "worker": attr.label(cfg="host", mandatory=True, allow_files=True, executable=True),
+ "worker": attr.label(cfg="exec", mandatory=True, allow_files=True, executable=True),
"worker_args": attr.string_list(),
"worker_key_mnemonic": attr.string(),
"action_mnemonic": attr.string(default = "Work"),