Add a mode to show directly required configuration fragments for only targets in the host config.

PiperOrigin-RevId: 322622765
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 e51ccca..b14773c 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
@@ -47,6 +47,8 @@
 import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoKey;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
+import com.google.devtools.build.lib.analysis.config.CoreOptions;
+import com.google.devtools.build.lib.analysis.config.CoreOptions.IncludeConfigFragmentsEnum;
 import com.google.devtools.build.lib.analysis.config.Fragment;
 import com.google.devtools.build.lib.analysis.config.FragmentCollection;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
@@ -1723,6 +1725,28 @@
     return this;
   }
 
+  /**
+   * Returns {@code true} if a {@link RequiredConfigFragmentsProvider} should be included for this
+   * rule.
+   */
+  public boolean shouldIncludeRequiredConfigFragmentsProvider() {
+    IncludeConfigFragmentsEnum setting =
+        getConfiguration()
+            .getOptions()
+            .get(CoreOptions.class)
+            .includeRequiredConfigFragmentsProvider;
+    switch (setting) {
+      case OFF:
+        return false;
+      case DIRECT_HOST_ONLY:
+        return getConfiguration().isHostConfiguration();
+      case DIRECT:
+      case TRANSITIVE:
+        return true;
+    }
+    throw new IllegalStateException("Unknown setting: " + setting);
+  }
+
   @Override
   public String toString() {
     return "RuleContext(" + getLabel() + ", " + getConfiguration() + ")";