aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java
index 3337a440f5..81909fc9c4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/SupportedEnvironmentsProvider.java
@@ -15,6 +15,8 @@
package com.google.devtools.build.lib.analysis.constraints;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.Target;
/**
* A provider that advertises which environments the associated target is compatible with
@@ -39,4 +41,20 @@ public interface SupportedEnvironmentsProvider extends TransitiveInfoProvider {
* {@link ConstraintSemantics} for details.
*/
EnvironmentCollection getRefinedEnvironments();
+
+ /**
+ * If the given environment was refined away from this target's set of supported environments,
+ * returns the dependency that originally removed the environment.
+ *
+ * <p>For example, if the current rule is restricted_to [E] and depends on D1, D1 is
+ * restricted_to [E] and depends on D2, and D2 is restricted_to [E, F] and has a select()
+ * with one path following an E-restricted dep and the other path following an F-restricted dep,
+ * then when the build chooses the F path the current rule has [E] refined to [] and D2 is the
+ * culprit.
+ *
+ * <p>If the given environment was not refined away for this rule, returns null.
+ *
+ * <p>See {@link ConstraintSemantics} class documentation for more details on refinement.
+ */
+ Target getRemovedEnvironmentCulprit(Label environment);
}