diff options
author | Dmitry Lomov <dslomov@google.com> | 2017-03-02 14:39:52 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2017-03-03 10:35:22 +0000 |
commit | 654717f6f2e9e626b60debc657d3a8723f057b97 (patch) | |
tree | 007f6f91cf0c67098be1900cc97550c5c7d912f0 /src/main/java/com/google/devtools/build/lib/rules/objc | |
parent | 83514648f2e4e63dcd039e976f3b5d47552e0383 (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')
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); |