Restrict validation on rule attributes to rules.
Previously validation of attributes could occur on non-rules (e.g. OutputFiles)
when an output file is explicitly requested on the command line in combination
with --experimental_use_validation_aspect.
RELNOTES: None
PiperOrigin-RevId: 480378472
Change-Id: Idbe7844a82f223f5c81d197595ce49b576724506
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 7cd33fa..6c532fd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1717,10 +1717,13 @@
ConfiguredAttributeMapper.of(
target.getAssociatedRule(), configConditions.asProviders(), configuration);
ListMultimap<String, ConfiguredTargetAndData> targetMap = createTargetMap();
- // These checks can fail in BuildViewForTesting.getRuleContextForTesting as it specifies
- // ConfigConditions.EMPTY, resulting in noMatchError accessing attributes without a default
- // condition.
- if (attributeChecks) {
+ // These checks can fail when ConfigConditions.EMPTY are empty, resulting in noMatchError
+ // accessing attributes without a default condition.
+ // ConfigConditions.EMPTY is always true for non-rules:
+ // https://cs.opensource.google/bazel/bazel/+/master:src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java;l=943;drc=720dc5fd640de692db129777c7c7c32924627c43
+ // This can happen in BuildViewForTesting.getRuleContextForTesting as it specifies
+ // ConfigConditions.EMPTY.
+ if (attributeChecks && target instanceof Rule) {
checkAttributesNonEmpty(attributes);
checkAttributesForDuplicateLabels(attributes);
}