diff options
author | 2016-12-22 19:32:09 +0000 | |
---|---|---|
committer | 2016-12-23 09:43:38 +0000 | |
commit | 66a90839e5534aa30cfd90e864e9d74c85f294f4 (patch) | |
tree | 74ba2cb472034ec1321aea8c616a0012c6441065 | |
parent | 772f7e91dc032086d7e4a7125dc265c2c41317ba (diff) |
Expose ios_device attributes to Skylark.
--
PiperOrigin-RevId: 142784138
MOS_MIGRATED_REVID=142784138
4 files changed, 41 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index 1c048fb9d4..4575bae515 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -120,6 +120,18 @@ public class AppleSkylarkCommon { return XcodeVersionProperties.SKYLARK_CONSTRUCTOR; } + + @SkylarkCallable( + name = IosDeviceProvider.SKYLARK_NAME, + doc = + "Returns the provider constructor for IosDeviceProvider. Use this as a key to access the " + + "attributes exposed by ios_device.", + structField = true + ) + public SkylarkClassObjectConstructor getIosDeviceProviderConstructor() { + return IosDeviceProvider.SKYLARK_CONSTRUCTOR; + } + @SkylarkSignature( name = "new_objc_provider", objectType = AppleSkylarkCommon.class, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java index a124577dfe..d3e6ffac99 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java @@ -72,7 +72,7 @@ public final class IosDevice implements RuleConfiguredTargetFactory { return new RuleConfiguredTargetBuilder(context) .add(RunfilesProvider.class, RunfilesProvider.EMPTY) - .add(IosDeviceProvider.class, provider) + .addNativeDeclaredProvider(provider) .add(IosTestSubstitutionProvider.class, provider.iosTestSubstitutionProvider()) .build(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java index 2f62c5dea3..810f071804 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java @@ -15,19 +15,20 @@ package com.google.devtools.build.lib.rules.objc; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.SkylarkClassObject; +import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.util.Preconditions; - +import java.util.Map; import javax.annotation.Nullable; -/** - * Provider that describes a simulator device. - */ +/** Provider that describes a simulator device. */ @Immutable -public final class IosDeviceProvider implements TransitiveInfoProvider { +public final class IosDeviceProvider extends SkylarkClassObject implements TransitiveInfoProvider { /** A builder of {@link IosDeviceProvider}s. */ public static final class Builder { private String type; @@ -72,12 +73,20 @@ public final class IosDeviceProvider implements TransitiveInfoProvider { } } + /** Skylark name for the IosDeviceProvider. */ + public static final String SKYLARK_NAME = "IosDevice"; + + /** Skylark constructor and identifier for the IosDeviceProvider. */ + public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR = + SkylarkClassObjectConstructor.createNative(SKYLARK_NAME); + private final String type; private final DottedVersion iosVersion; private final DottedVersion xcodeVersion; private final String locale; private IosDeviceProvider(Builder builder) { + super(SKYLARK_CONSTRUCTOR, getSkylarkFields(builder)); this.type = Preconditions.checkNotNull(builder.type); this.iosVersion = Preconditions.checkNotNull(builder.iosVersion); this.locale = Preconditions.checkNotNull(builder.locale); @@ -112,4 +121,15 @@ public final class IosDeviceProvider implements TransitiveInfoProvider { Substitution.of("%(simulator_sdk)s", getIosVersion().toString()), Substitution.of("%(locale)s", getLocale()))); } + + private static Map<String, Object> getSkylarkFields(Builder builder) { + ImmutableMap.Builder<String, Object> skylarkFields = + new ImmutableMap.Builder<String, Object>() + .put("type", builder.type) + .put("ios_version", builder.iosVersion.toString()); + if (builder.xcodeVersion != null) { + skylarkFields.put("xcode_version", builder.xcodeVersion.toString()); + } + return skylarkFields.build(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java index a1fb0acfe0..333cf45383 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java @@ -244,7 +244,9 @@ public class TestSupport { */ public Iterable<SkylarkClassObject> getExtraProviders() { IosDeviceProvider deviceProvider = - ruleContext.getPrerequisite(IosTest.TARGET_DEVICE, Mode.TARGET, IosDeviceProvider.class); + (IosDeviceProvider) + ruleContext.getPrerequisite( + IosTest.TARGET_DEVICE, Mode.TARGET, IosDeviceProvider.SKYLARK_CONSTRUCTOR.getKey()); DottedVersion xcodeVersion = deviceProvider.getXcodeVersion(); AppleConfiguration configuration = ruleContext.getFragment(AppleConfiguration.class); |