diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java index 5d474f20b9..b1d26cc9fa 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java @@ -14,9 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import static com.google.devtools.build.lib.rules.objc.ObjcProvider.MERGE_ZIP; - -import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -27,39 +24,34 @@ import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.LinkedBinary; import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.SplitArchTransition.ConfigurationDistinguisher; +import javax.annotation.Nullable; + /** * Base class for rules that bundle releases. */ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTargetFactory { - /** - * Indicates whether a target factory should export an {@link ObjcProvider} containing itself as - * a nested bundle. - */ - protected enum ExposeAsNestedBundle { YES, NO } - private final String bundleDirFormat; private final XcodeProductType xcodeProductType; - private final ExposeAsNestedBundle exposeAsNestedBundle; private final ImmutableSet<Attribute> dependencyAttributes; private final ConfigurationDistinguisher configurationDistinguisher; /** * @param bundleDirFormat format string representing the bundle's directory with a single * placeholder for the target name (e.g. {@code "Payload/%s.app"}) - * @param exposeAsNestedBundle whether to export an {@link ObjcProvider} with this target as a * @param dependencyAttributes all attributes that contain dependencies of this rule. Any * dependency so listed must expose {@link XcodeProvider} and {@link ObjcProvider}. * @param configurationDistinguisher distinguisher used for cases where inputs from dependencies * of this bundle may need distinguishing because they come from configurations that are only * different by this value */ - public ReleaseBundlingTargetFactory(String bundleDirFormat, XcodeProductType xcodeProductType, - ExposeAsNestedBundle exposeAsNestedBundle, ImmutableSet<Attribute> dependencyAttributes, + public ReleaseBundlingTargetFactory( + String bundleDirFormat, + XcodeProductType xcodeProductType, + ImmutableSet<Attribute> dependencyAttributes, ConfigurationDistinguisher configurationDistinguisher) { this.bundleDirFormat = bundleDirFormat; this.xcodeProductType = xcodeProductType; - this.exposeAsNestedBundle = exposeAsNestedBundle; this.dependencyAttributes = dependencyAttributes; this.configurationDistinguisher = configurationDistinguisher; } @@ -73,7 +65,7 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg ReleaseBundlingSupport releaseBundlingSupport = new ReleaseBundlingSupport( ruleContext, common.getObjcProvider(), LinkedBinary.DEPENDENCIES_ONLY, bundleDirFormat, - bundleMinimumOsVersion(ruleContext)); + bundleName(ruleContext), bundleMinimumOsVersion(ruleContext)); releaseBundlingSupport .registerActions() .addXcodeSettings(xcodeProviderBuilder) @@ -94,22 +86,16 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg xcodeSupport.registerActions(xcodeProviderBuilder.build()); - Optional<ObjcProvider> exposedObjcProvider; - if (exposeAsNestedBundle == ExposeAsNestedBundle.YES) { - exposedObjcProvider = Optional.of(new ObjcProvider.Builder() - .add(MERGE_ZIP, ruleContext.getImplicitOutputArtifact(ReleaseBundlingSupport.IPA)) - .build()); - } else { - exposedObjcProvider = Optional.absent(); - } - RuleConfiguredTargetBuilder targetBuilder = ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) .addProvider(XcTestAppProvider.class, releaseBundlingSupport.xcTestAppProvider()) .addProvider(XcodeProvider.class, xcodeProviderBuilder.build()); - if (exposedObjcProvider.isPresent()) { - targetBuilder.addProvider(ObjcProvider.class, exposedObjcProvider.get()); + + ObjcProvider exposedObjcProvider = exposedObjcProvider(ruleContext); + if (exposedObjcProvider != null) { + targetBuilder.addProvider(ObjcProvider.class, exposedObjcProvider); } + configureTarget(targetBuilder, ruleContext, releaseBundlingSupport); return targetBuilder.build(); } @@ -130,6 +116,21 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg protected void configureTarget(RuleConfiguredTargetBuilder target, RuleContext ruleContext, ReleaseBundlingSupport releaseBundlingSupport) {} + /** + * Returns the name of this target's bundle. + */ + protected String bundleName(RuleContext ruleContext) { + return ruleContext.getLabel().getName(); + } + + /** + * Returns an exposed {@code ObjcProvider} object. + */ + @Nullable + protected ObjcProvider exposedObjcProvider(RuleContext ruleContext) { + return null; + } + private ObjcCommon common(RuleContext ruleContext) { ObjcCommon.Builder builder = new ObjcCommon.Builder(ruleContext) .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)); |