aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-09-01 09:11:02 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-09-01 10:54:44 +0000
commit37a1c1ca019e719250868d066f41fc6e39d0368c (patch)
tree1c1ce9eedd4186d3c6b2fe93eb124241ce55533e /src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java
parentffe049e689103784d540a868ae4c9d348e3e7982 (diff)
First step towards allowing returning declared providers from rule implementations.
-- MOS_MIGRATED_REVID=131923497
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java23
1 files changed, 21 insertions, 2 deletions
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 ee56c4fbe1..d111fd6f58 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
@@ -29,6 +29,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.rules.test.ExecutionInfoProvider;
@@ -40,7 +42,6 @@ import com.google.devtools.build.lib.rules.test.TestProvider.TestParams;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Preconditions;
-
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -61,6 +62,8 @@ public final class RuleConfiguredTargetBuilder {
private final Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> providers =
new LinkedHashMap<>();
private final ImmutableMap.Builder<String, Object> skylarkProviders = ImmutableMap.builder();
+ private final ImmutableMap.Builder<SkylarkClassObjectConstructor.Key, SkylarkClassObject>
+ skylarkDeclaredProviders = ImmutableMap.builder();
private final Map<String, NestedSetBuilder<Artifact>> outputGroupBuilders = new TreeMap<>();
/** These are supported by all configured targets and need to be specially handled. */
@@ -131,7 +134,10 @@ public final class RuleConfiguredTargetBuilder {
addRegisteredProvidersToSkylarkProviders();
- return new RuleConfiguredTarget(ruleContext, skylarkProviders.build(), providers);
+ return new RuleConfiguredTarget(
+ ruleContext,
+ providers,
+ new SkylarkProviders(skylarkProviders.build(), skylarkDeclaredProviders.build()));
}
/**
@@ -271,6 +277,19 @@ public final class RuleConfiguredTargetBuilder {
return this;
}
+ public RuleConfiguredTargetBuilder addSkylarkDeclaredProvider(
+ SkylarkClassObject provider, Location loc) throws EvalException {
+ SkylarkClassObjectConstructor constructor = provider.getConstructor();
+ SkylarkProviderValidationUtil.validateAndThrowEvalException(
+ constructor.getPrintableName(), provider, loc);
+ if (!constructor.isExported()) {
+ throw new EvalException(constructor.getLocation(),
+ "All providers must be top level values");
+ }
+ skylarkDeclaredProviders.put(constructor.getKey(), provider);
+ return this;
+ }
+
/**
* Add a Skylark transitive info. The provider value must be safe.
*/