aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2017-03-02 14:39:52 +0000
committerGravatar Yue Gan <yueg@google.com>2017-03-03 10:35:22 +0000
commit654717f6f2e9e626b60debc657d3a8723f057b97 (patch)
tree007f6f91cf0c67098be1900cc97550c5c7d912f0 /src/main/java/com/google/devtools/build/lib/rules/objc
parent83514648f2e4e63dcd039e976f3b5d47552e0383 (diff)
Refactor implementation of native and Skylark declared providers.
1) Instead of having a single class for both, split them into {Skylark,Native}ClassObjectConstructors 2) Allow NativeClassObjectConstructors to customize their instantiation logic. 3) Prepare ClassObjectConstructor.Key to be serializable. -- PiperOrigin-RevId: 148997553 MOS_MIGRATED_REVID=148997553
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java7
-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/IosDeviceProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java15
9 files changed, 48 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
index d80c3238c4..b25c61630b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsProvider.java
@@ -18,8 +18,9 @@ import com.google.common.collect.Maps;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import java.util.HashMap;
import java.util.Map.Entry;
@@ -55,8 +56,8 @@ public final class AppleDebugOutputsProvider extends SkylarkClassObject
}
}
- public static final SkylarkClassObjectConstructor SKYLARK_PROVIDER =
- SkylarkClassObjectConstructor.createNative("AppleDebugOutputs");
+ public static final ClassObjectConstructor SKYLARK_PROVIDER =
+ new NativeClassObjectConstructor("AppleDebugOutputs") { };
/**
* Creates a new provider instance.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
index b0f494df17..76e04d684f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryProvider.java
@@ -17,8 +17,9 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
/**
* Provider containing the executable binary output that was built using an apple_binary target with
@@ -37,8 +38,8 @@ public final class AppleDylibBinaryProvider extends SkylarkClassObject
public static final String SKYLARK_NAME = "AppleDylibBinary";
/** Skylark constructor and identifier for AppleDylibBinaryProvider. */
- public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR =
- SkylarkClassObjectConstructor.createNative(SKYLARK_NAME);
+ public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor(SKYLARK_NAME) { };
private final Artifact dylibBinary;
private final ObjcProvider depsObjcProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
index 501074f8cd..24002a4736 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryProvider.java
@@ -17,8 +17,9 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
/**
* Provider containing the executable binary output that was built using an apple_binary target with
@@ -37,8 +38,8 @@ public final class AppleExecutableBinaryProvider extends SkylarkClassObject
public static final String SKYLARK_NAME = "AppleExecutableBinary";
/** Skylark constructor and identifier for AppleExecutableBinaryProvider. */
- public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR =
- SkylarkClassObjectConstructor.createNative(SKYLARK_NAME);
+ public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor(SKYLARK_NAME) { };
private final Artifact appleExecutableBinary;
private final ObjcProvider depsObjcProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
index ce7d2d454c..f271b73617 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryProvider.java
@@ -17,8 +17,9 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
/**
* Provider containing the executable binary output that was built using an apple_binary target with
@@ -34,8 +35,8 @@ public final class AppleLoadableBundleBinaryProvider extends SkylarkClassObject
public static final String SKYLARK_NAME = "AppleLoadableBundleBinary";
/** Skylark constructor and identifier for AppleLoadableBundleBinary. */
- public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR =
- SkylarkClassObjectConstructor.createNative(SKYLARK_NAME);
+ public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor(SKYLARK_NAME) { };
private final Artifact appleLoadableBundleBinary;
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 03317d1ef7..fd9b10bbf0 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
@@ -16,8 +16,8 @@ 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.ClassObjectConstructor;
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;
@@ -116,7 +116,7 @@ public class AppleSkylarkCommon {
+ "the XcodeVersionProperties provider, use this as the key with which to retrieve it.",
structField = true
)
- public SkylarkClassObjectConstructor getXcodeVersionPropertiesConstructor() {
+ public ClassObjectConstructor getXcodeVersionPropertiesConstructor() {
return XcodeVersionProperties.SKYLARK_CONSTRUCTOR;
}
@@ -127,7 +127,7 @@ public class AppleSkylarkCommon {
+ "the AppleDylibBinary provider, use this as the key with which to retrieve it.",
structField = true
)
- public SkylarkClassObjectConstructor getAppleDylibBinaryConstructor() {
+ public ClassObjectConstructor getAppleDylibBinaryConstructor() {
return AppleDylibBinaryProvider.SKYLARK_CONSTRUCTOR;
}
@@ -138,7 +138,7 @@ public class AppleSkylarkCommon {
+ "the AppleExecutableBinary provider, use this as the key with which to retrieve it.",
structField = true
)
- public SkylarkClassObjectConstructor getAppleExecutableBinaryConstructor() {
+ public ClassObjectConstructor getAppleExecutableBinaryConstructor() {
return AppleExecutableBinaryProvider.SKYLARK_CONSTRUCTOR;
}
@@ -150,7 +150,7 @@ public class AppleSkylarkCommon {
+ "with which to retrieve it.",
structField = true
)
- public SkylarkClassObjectConstructor getAppleLoadableBundleBinaryConstructor() {
+ public ClassObjectConstructor getAppleLoadableBundleBinaryConstructor() {
return AppleLoadableBundleBinaryProvider.SKYLARK_CONSTRUCTOR;
}
@@ -161,7 +161,7 @@ public class AppleSkylarkCommon {
+ "attributes exposed by ios_device.",
structField = true
)
- public SkylarkClassObjectConstructor getIosDeviceProviderConstructor() {
+ public ClassObjectConstructor getIosDeviceProviderConstructor() {
return IosDeviceProvider.SKYLARK_CONSTRUCTOR;
}
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 810f071804..79e62b8064 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
@@ -19,8 +19,9 @@ 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.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
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;
@@ -77,8 +78,8 @@ public final class IosDeviceProvider extends SkylarkClassObject implements Trans
public static final String SKYLARK_NAME = "IosDevice";
/** Skylark constructor and identifier for the IosDeviceProvider. */
- public static final SkylarkClassObjectConstructor SKYLARK_CONSTRUCTOR =
- SkylarkClassObjectConstructor.createNative(SKYLARK_NAME);
+ public static final ClassObjectConstructor SKYLARK_CONSTRUCTOR =
+ new NativeClassObjectConstructor(SKYLARK_NAME) { };
private final String type;
private final DottedVersion iosVersion;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index c16a1052e6..a028b0936d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -30,8 +30,9 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
import com.google.devtools.build.lib.rules.cpp.LinkerInputs;
@@ -505,15 +506,20 @@ public final class ObjcProvider extends SkylarkClassObject implements Transitive
// Items which should be passed to strictly direct dependers, but not transitive dependers.
private final ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems;
- private static final SkylarkClassObjectConstructor OBJC_PROVIDER =
- SkylarkClassObjectConstructor.createNative("objc_provider");
+ private static final ClassObjectConstructor OBJC_PROVIDER =
+ new NativeClassObjectConstructor("objc_provider") {
+ @Override
+ public String getErrorMessageFormatForInstances() {
+ return "ObjcProvider field %s could not be instantiated";
+ }
+ };
private ObjcProvider(
ImmutableMap<Key<?>, NestedSet<?>> items,
ImmutableMap<Key<?>, NestedSet<?>> nonPropagatedItems,
ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems,
ImmutableMap<String, Object> skylarkFields) {
- super(OBJC_PROVIDER, skylarkFields, "ObjcProvider field %s could not be instantiated");
+ super(OBJC_PROVIDER, skylarkFields);
this.items = Preconditions.checkNotNull(items);
this.nonPropagatedItems = Preconditions.checkNotNull(nonPropagatedItems);
this.strictDependencyItems = Preconditions.checkNotNull(strictDependencyItems);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
index ee8a37c35f..46665908ee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProviderSkylarkConverters.java
@@ -24,8 +24,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.EvalUtils;
@@ -162,7 +162,7 @@ public class ObjcProviderSkylarkConverters {
public Object valueForSkylark(Key<?> javaKey, NestedSet<?> javaValue) {
NestedSetBuilder<SkylarkClassObject> result = NestedSetBuilder.stableOrder();
for (BundleableFile bundleableFile : (Iterable<BundleableFile>) javaValue) {
- result.add(SkylarkClassObjectConstructor.STRUCT.create(
+ result.add(NativeClassObjectConstructor.STRUCT.create(
ImmutableMap.<String, Object>of(
BUNDLED_FIELD, bundleableFile.getBundled(),
BUNDLE_PATH_FIELD, bundleableFile.getBundlePath()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
index 3a9656d244..38219406c1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcTestAppProvider.java
@@ -18,8 +18,9 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.ClassObjectConstructor;
+import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
-import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.util.Preconditions;
@@ -37,8 +38,13 @@ public final class XcTestAppProvider extends SkylarkClassObject implements Trans
*/
public static final String XCTEST_APP_SKYLARK_PROVIDER_NAME = "xctest_app";
- private static final SkylarkClassObjectConstructor XCTEST_APP_PROVIDER =
- SkylarkClassObjectConstructor.createNative("xctest_app_provider");
+ private static final ClassObjectConstructor XCTEST_APP_PROVIDER =
+ new NativeClassObjectConstructor("xctest_app_provider") {
+ @Override
+ public String getErrorMessageFormatForInstances() {
+ return "XcTestAppProvider field %s could not be instantiated";
+ }
+ };
private final Artifact bundleLoader;
private final Artifact ipa;
@@ -47,8 +53,7 @@ public final class XcTestAppProvider extends SkylarkClassObject implements Trans
XcTestAppProvider(Artifact bundleLoader, Artifact ipa, ObjcProvider objcProvider) {
super(
XCTEST_APP_PROVIDER,
- getSkylarkFields(bundleLoader, ipa, objcProvider),
- "XcTestAppProvider field %s could not be instantiated");
+ getSkylarkFields(bundleLoader, ipa, objcProvider));
this.bundleLoader = Preconditions.checkNotNull(bundleLoader);
this.ipa = Preconditions.checkNotNull(ipa);
this.objcProvider = Preconditions.checkNotNull(objcProvider);