diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java index e23af613bd..f57e53a4b6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java @@ -14,7 +14,10 @@ package com.google.devtools.build.lib.rules.objc; +import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -23,6 +26,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.packages.Attribute.SplitTransition; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.Platform; +import com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag; import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.SplitArchTransition; import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.SplitArchTransition.ConfigurationDistinguisher; @@ -48,6 +52,29 @@ public class IosApplication extends ReleaseBundlingTargetFactory { super(ReleaseBundlingSupport.APP_BUNDLE_DIR_FORMAT, XcodeProductType.APPLICATION, DEPENDENCY_ATTRIBUTES, ConfigurationDistinguisher.IOS_APPLICATION); } + + /** + * Validates that there is exactly one watch extension for each OS version. + */ + @Override + protected void validateAttributes(RuleContext ruleContext) { + Iterable<ObjcProvider> extensionProviders = ruleContext.getPrerequisites( + "extensions", Mode.TARGET, ObjcProvider.class); + if (hasMoreThanOneWatchExtension(extensionProviders, Flag.HAS_WATCH1_EXTENSION)) { + ruleContext.attributeError("extensions", "An iOS application can contain exactly one " + + "watch extension for each watch OS version"); + } + } + + private boolean hasMoreThanOneWatchExtension(Iterable<ObjcProvider> objcProviders, + final Flag watchExtensionVersionFlag) { + return Lists.newArrayList(Iterables.filter(objcProviders, new Predicate<ObjcProvider>() { + @Override + public boolean apply(ObjcProvider objcProvider) { + return objcProvider.is(watchExtensionVersionFlag); + } + })).size() > 1; + } @Override protected void configureTarget(RuleConfiguredTargetBuilder target, RuleContext ruleContext, |