aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Sergio Campama <kaipi@google.com>2016-12-13 18:49:28 +0000
committerGravatar John Cater <jcater@google.com>2016-12-13 21:05:01 +0000
commite8cecd90c5bf8c064654600a7412e6287b16dfff (patch)
tree409ad58ccef8abd6978af27994d72ee9c2cd8fc1 /src/main/java
parent2f31d60d1454cd324196a5159262c1ba32eabda8 (diff)
Enables the propagation of the XcodeVersionProperties provider for reading from Skylark.
-- PiperOrigin-RevId: 141912220 MOS_MIGRATED_REVID=141912220
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersion.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java37
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosDevice.java8
5 files changed, 62 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 879a1bbe18..202be7b633 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -849,6 +849,18 @@ public final class RuleContext extends TargetContext
}
/**
+ * Returns the declared provider (native and Skylark) for the specified constructor under the
+ * specified attribute of this target in the BUILD file. May return null if there is no
+ * TransitiveInfoCollection under the specified attribute.
+ */
+ @Nullable
+ public SkylarkClassObject getPrerequisite(
+ String attributeName, Mode mode, final SkylarkClassObjectConstructor.Key skylarkKey) {
+ TransitiveInfoCollection prerequisite = getPrerequisite(attributeName, mode);
+ return prerequisite == null ? null : prerequisite.get(skylarkKey);
+ }
+
+ /**
* Returns all the providers of the specified type that are listed under the specified attribute
* of this target in the BUILD file, and that contain the specified provider.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersion.java
index bafddeea75..c0929ea4ee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersion.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersion.java
@@ -34,7 +34,7 @@ public class XcodeVersion implements RuleConfiguredTargetFactory {
return new RuleConfiguredTargetBuilder(ruleContext)
.addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
- .addProvider(XcodeVersionProperties.class, ruleData.getXcodeVersionProperties())
+ .addNativeDeclaredProvider(ruleData.getXcodeVersionProperties())
.build();
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
index 13b35814b9..719ecf46e2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
@@ -17,14 +17,25 @@ package com.google.devtools.build.lib.rules.apple;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-
+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 java.util.Map;
import javax.annotation.Nullable;
-/**
- * A tuple containing information about a version of xcode and its properties.
- */
-public class XcodeVersionProperties implements TransitiveInfoProvider {
+/** A tuple containing information about a version of xcode and its properties. */
+@Immutable
+public class XcodeVersionProperties extends SkylarkClassObject implements TransitiveInfoProvider {
+
+ /** Skylark name for the XcodeVersionProperties provider. */
+ public static final String SKYLARK_NAME = "XcodeProperties";
+
+ /** Skylark constructor and identifier for XcodeVersionProperties provider. */
+ public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ SkylarkClassObjectConstructor.createNative(SKYLARK_NAME);
+
@VisibleForTesting public static final String DEFAULT_IOS_SDK_VERSION = "8.4";
@VisibleForTesting public static final String DEFAULT_WATCHOS_SDK_VERSION = "2.0";
@VisibleForTesting public static final String DEFAULT_MACOSX_SDK_VERSION = "10.10";
@@ -57,14 +68,16 @@ public class XcodeVersionProperties implements TransitiveInfoProvider {
}
/**
- * General constructor. Some (nullable) properties may be left unspecified. In these cases,
- * a semi-sensible default will be assigned to the property value.
+ * General constructor. Some (nullable) properties may be left unspecified. In these cases, a
+ * semi-sensible default will be assigned to the property value.
*/
- XcodeVersionProperties(DottedVersion xcodeVersion,
+ XcodeVersionProperties(
+ DottedVersion xcodeVersion,
@Nullable String defaultIosSdkVersion,
@Nullable String defaultWatchosSdkVersion,
@Nullable String defaultTvosSdkVersion,
@Nullable String defaultMacosxSdkVersion) {
+ super(SKYLARK_CONSTRUCTOR, getSkylarkFields(xcodeVersion));
this.xcodeVersion = Optional.fromNullable(xcodeVersion);
this.defaultIosSdkVersion = (Strings.isNullOrEmpty(defaultIosSdkVersion))
? DottedVersion.fromString(DEFAULT_IOS_SDK_VERSION)
@@ -114,4 +127,12 @@ public class XcodeVersionProperties implements TransitiveInfoProvider {
public DottedVersion getDefaultMacosxSdkVersion() {
return defaultMacosxSdkVersion;
}
+
+ private static Map<String, Object> getSkylarkFields(@Nullable DottedVersion xcodeVersion) {
+ ImmutableMap.Builder<String, Object> skylarkFields = new ImmutableMap.Builder<>();
+ if (xcodeVersion != null) {
+ skylarkFields.put("xcode_version", xcodeVersion.toString());
+ }
+ return skylarkFields.build();
+ }
}
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 45380b3cd8..1c048fb9d4 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
@@ -17,9 +17,11 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
+import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
import com.google.devtools.build.lib.rules.apple.Platform;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
+import com.google.devtools.build.lib.rules.apple.XcodeVersionProperties;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -107,6 +109,17 @@ public class AppleSkylarkCommon {
return platform;
}
+ @SkylarkCallable(
+ name = XcodeVersionProperties.SKYLARK_NAME,
+ doc =
+ "Returns the provider constructor for XcodeVersionProperties. If a target propagates "
+ + "the XcodeVersionProperties provider, use this as the key with which to retrieve it.",
+ structField = true
+ )
+ public SkylarkClassObjectConstructor getXcodeVersionPropertiesConstructor() {
+ return XcodeVersionProperties.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 1e3ad31586..a124577dfe 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
@@ -39,8 +39,12 @@ public final class IosDevice implements RuleConfiguredTargetFactory {
AppleConfiguration appleConfiguration = context.getFragment(AppleConfiguration.class);
String iosVersionAttribute =
context.attributes().get(IosDeviceRule.IOS_VERSION_ATTR_NAME, STRING);
- XcodeVersionProperties xcodeVersionProperties = context.getPrerequisite(
- IosDeviceRule.XCODE_ATTR_NAME, Mode.TARGET, XcodeVersionProperties.class);
+ XcodeVersionProperties xcodeVersionProperties =
+ (XcodeVersionProperties)
+ context.getPrerequisite(
+ IosDeviceRule.XCODE_ATTR_NAME,
+ Mode.TARGET,
+ XcodeVersionProperties.SKYLARK_CONSTRUCTOR.getKey());
DottedVersion xcodeVersion = null;
if (xcodeVersionProperties != null && xcodeVersionProperties.getXcodeVersion().isPresent()) {