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() + ")";