From 6b5205b000fe391faf12f84ed4f2e9ea38ae81ff Mon Sep 17 00:00:00 2001 From: Googler Date: Tue, 17 Jul 2018 18:35:36 -0700 Subject: Expose AndroidFeatureFlagSetProvider to Skylark RELNOTES: None PiperOrigin-RevId: 205011761 --- .../android/AndroidFeatureFlagSetProvider.java | 53 ++++++++++++++++++---- 1 file changed, 45 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java') diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java index 3746a85c8d..dae015df42 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidFeatureFlagSetProvider.java @@ -14,22 +14,25 @@ package com.google.devtools.build.lib.rules.android; -import com.google.auto.value.AutoValue; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.AliasProvider; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.BuildType; +import com.google.devtools.build.lib.packages.BuiltinProvider; +import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.config.ConfigFeatureFlag; +import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidFeatureFlagSetProviderApi; +import com.google.devtools.build.lib.syntax.EvalException; +import com.google.devtools.build.lib.syntax.SkylarkDict; import java.util.Map; /** @@ -40,18 +43,25 @@ import java.util.Map; * of the android_test will be compiled with different flags from the android_binary code which runs * in the same Android virtual machine, which may cause compatibility issues at runtime. */ -@AutoValue @Immutable -public abstract class AndroidFeatureFlagSetProvider implements TransitiveInfoProvider { +public final class AndroidFeatureFlagSetProvider extends NativeInfo + implements AndroidFeatureFlagSetProviderApi { + + public static final String PROVIDER_NAME = "AndroidFeatureFlagSetProvider"; + public static final Provider PROVIDER = new Provider(); /** The name of the attribute used by Android rules to set config_feature_flags. */ public static final String FEATURE_FLAG_ATTR = "feature_flags"; - AndroidFeatureFlagSetProvider() {} + private final Optional> flags; + + AndroidFeatureFlagSetProvider(Optional> flags) { + super(PROVIDER); + this.flags = flags.transform(ImmutableMap::copyOf); + } - /** Creates a new AndroidFeatureFlagSetProvider with the given flags. */ public static AndroidFeatureFlagSetProvider create(Optional> flags) { - return new AutoValue_AndroidFeatureFlagSetProvider(flags.transform(ImmutableMap::copyOf)); + return new AndroidFeatureFlagSetProvider(flags.transform(ImmutableMap::copyOf)); } /** @@ -123,5 +133,32 @@ public abstract class AndroidFeatureFlagSetProvider implements TransitiveInfoPro || (targetFlags.isPresent() && targetFlags.get().equals(depFlags.get())); } - public abstract Optional> getFlags(); + public Optional> getFlags() { + return flags; + } + + @Override + public ImmutableMap getFlagMap() { + return flags.or(ImmutableMap.of()); + } + + /** Provider class for {@link AndroidFeatureFlagSetProvider} objects. */ + public static class Provider extends BuiltinProvider + implements AndroidFeatureFlagSetProviderApi.Provider { + private Provider() { + super(PROVIDER_NAME, AndroidFeatureFlagSetProvider.class); + } + + public String getName() { + return PROVIDER_NAME; + } + + @Override + public AndroidFeatureFlagSetProvider create(SkylarkDict flags) + throws EvalException { + return new AndroidFeatureFlagSetProvider( + Optional.of( + SkylarkDict.castSkylarkDictOrNoneToDict(flags, Label.class, String.class, "flags"))); + } + } } -- cgit v1.2.3