aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-12-22 19:32:09 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-12-23 09:43:38 +0000
commit66a90839e5534aa30cfd90e864e9d74c85f294f4 (patch)
tree74ba2cb472034ec1321aea8c616a0012c6441065
parent772f7e91dc032086d7e4a7125dc265c2c41317ba (diff)
Expose ios_device attributes to Skylark.
-- PiperOrigin-RevId: 142784138 MOS_MIGRATED_REVID=142784138
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java30
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/TestSupport.java4
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);