diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java | 29 |
1 files changed, 26 insertions, 3 deletions
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(); } |