aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-09-01 00:55:14 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-09-01 12:28:51 +0200
commit7972a3db819897a3b89896d453b1e99756bd3ffc (patch)
tree0b8ad2bb089b788e6460f959204ea1f15788ab8e /src/main/java
parent8fb8a28bb4a91ff2f7a1d82935defa3473dfae2d (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java29
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();
}