Native aspects can opt-in to apply to files.

Only works for top-level targets.

RELNOTES: None.
PiperOrigin-RevId: 154176914
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 5d56cf3..5a45dc6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -526,9 +526,12 @@
       } else {
         final NativeAspectClass aspectFactoryClass =
             ruleClassProvider.getNativeAspectClassMap().get(aspect);
+
         if (aspectFactoryClass != null) {
+          AspectParameters aspectParameters = AspectParameters.EMPTY;
+          boolean applyToFiles = aspectFactoryClass.getDefinition(aspectParameters).applyToFiles();
           for (TargetAndConfiguration targetSpec : topLevelTargetsWithConfigs) {
-            if (!(targetSpec.getTarget() instanceof Rule)) {
+            if (!applyToFiles && !(targetSpec.getTarget() instanceof Rule)) {
               continue;
             }
             // For invoking top-level aspects, use the top-level configuration for both the
@@ -538,7 +541,7 @@
                 AspectValue.createAspectKey(
                     targetSpec.getLabel(),
                     configuration,
-                    new AspectDescriptor(aspectFactoryClass, AspectParameters.EMPTY),
+                    new AspectDescriptor(aspectFactoryClass, aspectParameters),
                     configuration
                 ));
           }