aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java
diff options
context:
space:
mode:
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.java27
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,