Add a testing Skylark module that exposes an ExecutionInfoProvider constructor.
--
PiperOrigin-RevId: 141594768
MOS_MIGRATED_REVID=141594768
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
index 495d5eb..1abc893 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
@@ -25,6 +25,8 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.BuildType;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -77,6 +79,23 @@
}
/**
+ * Returns the list of declared providers (native and Skylark) of the specified Skylark key from a
+ * set of transitive info collections.
+ */
+ public static Iterable<SkylarkClassObject> getProviders(
+ Iterable<? extends TransitiveInfoCollection> prerequisites,
+ final SkylarkClassObjectConstructor.Key skylarkKey) {
+ ImmutableList.Builder<SkylarkClassObject> result = ImmutableList.builder();
+ for (TransitiveInfoCollection prerequisite : prerequisites) {
+ SkylarkClassObject prerequisiteProvider = prerequisite.get(skylarkKey);
+ if (prerequisiteProvider != null) {
+ result.add(prerequisiteProvider);
+ }
+ }
+ return result.build();
+ }
+
+ /**
* Returns the iterable of collections that have the specified provider.
*/
public static <S extends TransitiveInfoCollection, C extends TransitiveInfoProvider> Iterable<S>
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
index 0047976..78877d3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
@@ -224,7 +224,11 @@
TestParams testParams =
testActionBuilder
.setFilesToRunProvider(filesToRunProvider)
- .setExecutionRequirements(providersBuilder.getProvider(ExecutionInfoProvider.class))
+ .setExecutionRequirements(
+ (ExecutionInfoProvider)
+ skylarkDeclaredProviders
+ .build()
+ .get(ExecutionInfoProvider.SKYLARK_CONSTRUCTOR.getKey()))
.setShardCount(explicitShardCount)
.build();
ImmutableList<String> testTags = ImmutableList.copyOf(ruleContext.getRule().getRuleTags());
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 fad548a..879a1bb 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
@@ -71,6 +71,8 @@
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -838,6 +840,15 @@
}
/**
+ * Returns all the declared providers (native and Skylark) for the specified constructor under the
+ * specified attribute of this target in the BUILD file.
+ */
+ public Iterable<SkylarkClassObject> getPrerequisites(
+ String attributeName, Mode mode, final SkylarkClassObjectConstructor.Key skylarkKey) {
+ return AnalysisUtils.getProviders(getPrerequisites(attributeName, mode), skylarkKey);
+ }
+
+ /**
* Returns all the providers of the specified type that are listed under the specified attribute
* of this target in the BUILD file, and that contain the specified provider.
*/