From 7972a3db819897a3b89896d453b1e99756bd3ffc Mon Sep 17 00:00:00 2001 From: cparsons Date: Fri, 1 Sep 2017 00:55:14 +0200 Subject: 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 --- .../google/devtools/build/lib/rules/config/BUILD | 1 + .../rules/config/ConfigFeatureFlagProvider.java | 29 +++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) (limited to 'src/main/java') 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 SKYLARK_CONSTRUCTOR = - new NativeProvider( - ConfigFeatureFlagProvider.class, SKYLARK_NAME) {}; + static final NativeProvider SKYLARK_CONSTRUCTOR = new Constructor(); private final String value; private final Predicate 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 { + + private Constructor() { + super(ConfigFeatureFlagProvider.class, SKYLARK_NAME); + } + + @Override + protected ConfigFeatureFlagProvider createInstanceFromSkylark(Object[] args, Location loc) + throws EvalException { + + @SuppressWarnings("unchecked") + Map kwargs = (Map) 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(); } -- cgit v1.2.3