diff options
author | Dmitry Lomov <dslomov@google.com> | 2016-09-01 09:11:02 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-09-01 10:54:44 +0000 |
commit | 37a1c1ca019e719250868d066f41fc6e39d0368c (patch) | |
tree | 1c1ce9eedd4186d3c6b2fe93eb124241ce55533e /src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java | |
parent | ffe049e689103784d540a868ae4c9d348e3e7982 (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.java | 23 |
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. */ |