diff options
author | 2017-09-01 00:55:14 +0200 | |
---|---|---|
committer | 2017-09-01 12:28:51 +0200 | |
commit | 7972a3db819897a3b89896d453b1e99756bd3ffc (patch) | |
tree | 0b8ad2bb089b788e6460f959204ea1f15788ab8e /src/main/java/com/google/devtools/build/lib | |
parent | 8fb8a28bb4a91ff2f7a1d82935defa3473dfae2d (diff) |
Expose ConfigFeatureFlagProvider to skylark
This will be used to create thin skylark rules to allow for select() on provider values, with xcode_config_alias's XcodeProperties to be the first.
This is demonstrated in XcodeConfigTest.
RELNOTES: None.
PiperOrigin-RevId: 167204266
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/BUILD | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java | 29 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD index 647c284106..e76a34e67c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD @@ -15,6 +15,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib:build-configuration-option-details", "//src/main/java/com/google/devtools/build/lib:collect", "//src/main/java/com/google/devtools/build/lib:concurrent", + "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:packages-internal", "//src/main/java/com/google/devtools/build/lib:preconditions", "//src/main/java/com/google/devtools/build/lib:skylarkinterface", diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java index 588ef283a3..80b122c711 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java @@ -15,15 +15,19 @@ package com.google.devtools.build.lib.rules.config; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.EvalException; +import java.util.Map; /** Provider for exporting value and valid value predicate of feature flags to consuming targets. */ @SkylarkModule( @@ -37,9 +41,7 @@ public class ConfigFeatureFlagProvider extends NativeInfo { static final String SKYLARK_NAME = "FeatureFlagInfo"; /** Skylark constructor and identifier for ConfigFeatureFlagProvider. */ - static final NativeProvider<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR = - new NativeProvider<ConfigFeatureFlagProvider>( - ConfigFeatureFlagProvider.class, SKYLARK_NAME) {}; + static final NativeProvider<ConfigFeatureFlagProvider> SKYLARK_CONSTRUCTOR = new Constructor(); private final String value; private final Predicate<String> validityPredicate; @@ -56,6 +58,27 @@ public class ConfigFeatureFlagProvider extends NativeInfo { return new ConfigFeatureFlagProvider(value, isValidValue); } + /** A constructor callable from Skylark for OutputGroupProvider. */ + private static class Constructor extends NativeProvider<ConfigFeatureFlagProvider> { + + private Constructor() { + super(ConfigFeatureFlagProvider.class, SKYLARK_NAME); + } + + @Override + protected ConfigFeatureFlagProvider createInstanceFromSkylark(Object[] args, Location loc) + throws EvalException { + + @SuppressWarnings("unchecked") + Map<String, Object> kwargs = (Map<String, Object>) args[0]; + + if (!kwargs.containsKey("value") || !(kwargs.get("value") instanceof String)) { + throw new EvalException(loc, "FeatureFlagInfo requires 'value' to be set to a string"); + } + return create((String) kwargs.get("value"), Predicates.alwaysTrue()); + } +} + public static SkylarkProviderIdentifier id() { return SKYLARK_CONSTRUCTOR.id(); } |