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);
       }