Put aspect_hints behind an experimental flag
RELNOTES:None.
PiperOrigin-RevId: 399179406
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
index 6a13252..ae769d7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java
@@ -246,6 +246,14 @@
metadataTags = {OptionMetadataTag.INTERNAL})
public String transitionDirectoryNameFragment;
+ @Option(
+ name = "experimental_enable_aspect_hints",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS},
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL})
+ public boolean enableAspectHints;
+
/** Regardless of input, converts to an empty list. For use with affectedByStarlarkTransition */
public static class EmptyListConverter implements Converter<List<String>> {
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
index c32d52e..f7042ef 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -44,6 +44,7 @@
import com.google.devtools.build.lib.analysis.ShToolchain;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.config.CoreOptions;
import com.google.devtools.build.lib.analysis.config.FragmentCollection;
import com.google.devtools.build.lib.analysis.config.HostTransition;
import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
@@ -260,6 +261,17 @@
StarlarkAttributesCollection.Builder ruleBuilder = StarlarkAttributesCollection.builder(this);
for (Attribute attribute : rule.getAttributes()) {
+ // The aspect_hints attribute is experimental. When not enabled through the
+ // --enable_aspect_hints flag, we don't add it to the list of attributes that the aspect
+ // has access to.
+ if (attribute.getName().equals("aspect_hints")
+ && !ruleContext
+ .getConfiguration()
+ .getOptions()
+ .get(CoreOptions.class)
+ .enableAspectHints) {
+ continue;
+ }
Object value = ruleContext.attributes().get(attribute.getName(), attribute.getType());
ruleBuilder.addAttribute(attribute, value);
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
index d4fde85..f7f29fe 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
@@ -120,6 +120,7 @@
@Test
public void testAspectHintsChanged() throws Exception {
+ useConfiguration("--experimental_enable_aspect_hints");
scratch.file(
"foo/rule.bzl",
"def _rule_impl(ctx):",
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index 618b6ae..9a15bc4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -1159,6 +1159,7 @@
@Test
public void aspectSeesAspectHintsAttributeOnNativeRule() throws Exception {
+ useConfiguration("--experimental_enable_aspect_hints");
setupAspectHints();
scratch.file(
"aspect_hints/BUILD",
@@ -1179,6 +1180,7 @@
@Test
public void aspectSeesAspectHintsAttributeOnStarlarkRule() throws Exception {
+ useConfiguration("--experimental_enable_aspect_hints");
setupAspectHints();
setupStarlarkRule();
scratch.file(
diff --git a/src/test/shell/integration/aspect_test.sh b/src/test/shell/integration/aspect_test.sh
index bb3e7c7..dcfeb20 100755
--- a/src/test/shell/integration/aspect_test.sh
+++ b/src/test/shell/integration/aspect_test.sh
@@ -652,18 +652,49 @@
count_hints(name = "cnt", deps = [":cc_foo"])
EOF
- bazel build "//${package}:cnt" --output_groups=out || fail "Build failed"
+ bazel build "//${package}:cnt" --experimental_enable_aspect_hints \
+ --output_groups=out \
+ || fail "Build failed"
assert_contains "Used hints: 5" "./${PRODUCT_NAME}-bin/${package}/cnt_res"
}
function test_aspect_has_access_to_aspect_hints_attribute_in_starlark_rules() {
local package="aspect_hints"
mkdir -p "${package}"
+ setup_aspect_hints "${package}"
+
+ bazel build "//${package}:cnt" --experimental_enable_aspect_hints \
+ --output_groups=out \
+ || fail "Build failed"
+ assert_contains "Used hints: 22" "./${PRODUCT_NAME}-bin/${package}/cnt_res"
+}
+
+function test_aspect_hints_disabled() {
+ local package="aspect_hints_disabled"
+ mkdir -p "${package}"
+ setup_aspect_hints "${package}"
+
+ bazel build "//${package}:cnt" --noexperimental_enable_aspect_hints \
+ --output_groups=out &>"${TEST_log}" \
+ && fail "The aspect found 'aspect_hints' although it was disabled"
+
+ expect_log "Error: No attribute 'aspect_hints' in attr."
+}
+
+function setup_aspect_hints() {
+ local package="$1"
+ mkdir -p "${package}"
create_aspect_hints_rule_and_aspect "${package}"
create_aspect_hints_custom_rule "${package}"
+ create_aspect_hints_BUILD_file "${package}"
+}
- cat > "${package}/BUILD" <<EOF
+function create_aspect_hints_BUILD_file() {
+ local package="$1"
+ mkdir -p "${package}"
+
+cat > "${package}/BUILD" <<EOF
load("//${package}:hints_counter.bzl", "count_hints")
load("//${package}:custom_rule.bzl", "custom_rule")
load("//${package}:hints.bzl", "hint")
@@ -683,9 +714,6 @@
count_hints(name = "cnt", deps = [":custom_foo"])
EOF
-
- bazel build "//${package}:cnt" --output_groups=out || fail "Build failed"
- assert_contains "Used hints: 22" "./${PRODUCT_NAME}-bin/${package}/cnt_res"
}
function create_aspect_hints_rule_and_aspect() {
diff --git a/src/test/shell/integration/bazel_query_test.sh b/src/test/shell/integration/bazel_query_test.sh
index f60e7ad..f8f7442 100755
--- a/src/test/shell/integration/bazel_query_test.sh
+++ b/src/test/shell/integration/bazel_query_test.sh
@@ -1034,8 +1034,8 @@
)
EOF
- bazel query "somepath(//${package}:foo, //${package}:hint)" >& $TEST_log \
- || fail "Expected success"
+ bazel query "somepath(//${package}:foo, //${package}:hint)" >& $TEST_log \
+ || fail "Expected success"
expect_log "//${package}:hint"
}