diff options
10 files changed, 74 insertions, 145 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java index e822a0f3fc..6bc5b5f18e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java @@ -138,19 +138,20 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory XcodeProvider xcodeProvider = xcodeProviderBuilder.build(); xcodeSupport.registerActions(xcodeProvider); - // TODO(bazel-team): Stop exporting an XcTestAppProvider once objc_binary no longer creates an - // application bundle. - RuleConfiguredTargetBuilder target = common.configuredTargetBuilder( - filesToBuild.build(), - Optional.of(xcodeProvider), - Optional.of(objcProvider), - xcTestAppProvider, - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); - for (RunfilesSupport runfilesSupport : maybeRunfilesSupport.asSet()) { - target.setRunfilesSupport(runfilesSupport, runfilesSupport.getExecutable()); + RuleConfiguredTargetBuilder targetBuilder = + ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) + .addProvider(XcodeProvider.class, xcodeProvider) + .addProvider(ObjcProvider.class, objcProvider); + if (xcTestAppProvider.isPresent()) { + // TODO(bazel-team): Stop exporting an XcTestAppProvider once objc_binary no longer creates an + // application bundle. + targetBuilder.addProvider(XcTestAppProvider.class, xcTestAppProvider.get()); } - return target.build(); + if (maybeRunfilesSupport.isPresent()) { + RunfilesSupport runfilesSupport = maybeRunfilesSupport.get(); + targetBuilder.setRunfilesSupport(runfilesSupport, runfilesSupport.getExecutable()); + } + return targetBuilder.build(); } private OptionsProvider optionsProvider(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java index 7eb806c1a5..4a4d34d994 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundle.java @@ -16,12 +16,12 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.collect.nestedset.Order.STABLE_ORDER; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; @@ -41,12 +41,9 @@ public class ObjcBundle implements RuleConfiguredTargetFactory { ruleContext.attributeError("bundle_imports", error); } - return common.configuredTarget( - /*filesToBuild=*/NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER), - Optional.<XcodeProvider>absent(), - Optional.of(common.getObjcProvider()), - Optional.<XcTestAppProvider>absent(), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); + NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(STABLE_ORDER); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild) + .addProvider(ObjcProvider.class, common.getObjcProvider()) + .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java index e04c11f1a1..f32f320c20 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java @@ -17,7 +17,6 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.NESTED_BUNDLE; import static com.google.devtools.build.lib.rules.objc.XcodeProductType.BUNDLE; -import com.google.common.base.Optional; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; @@ -61,13 +60,10 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { .add(NESTED_BUNDLE, bundling) .build(); - return common.configuredTarget( - filesToBuild.build(), - Optional.of(xcodeProviderBuilder.build()), - Optional.of(nestedBundleProvider), - Optional.<XcTestAppProvider>absent(), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) + .addProvider(XcodeProvider.class, xcodeProviderBuilder.build()) + .addProvider(ObjcProvider.class, nestedBundleProvider) + .build(); } private OptionsProvider optionsProvider(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index 20806aff82..36f6ad56da 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -52,15 +52,9 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; -import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; -import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.Runfiles; -import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; -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.Type; import com.google.devtools.build.lib.rules.cpp.CcCommon; import com.google.devtools.build.lib.util.FileType; @@ -432,7 +426,7 @@ public final class ObjcCommon { objcProvider.addAll(LINKED_BINARY, linkedBinary.asSet()) .addAll(BREAKPAD_FILE, breakpadFile.asSet()); - return new ObjcCommon(context, objcProvider.build(), compilationArtifacts); + return new ObjcCommon(objcProvider.build(), compilationArtifacts); } } @@ -442,16 +436,13 @@ public final class ObjcCommon { static final FileType ASSET_CATALOG_CONTAINER_TYPE = FileType.of(".xcassets"); static final FileType FRAMEWORK_CONTAINER_TYPE = FileType.of(".framework"); - private final RuleContext context; private final ObjcProvider objcProvider; private final Optional<CompilationArtifacts> compilationArtifacts; private ObjcCommon( - RuleContext context, ObjcProvider objcProvider, Optional<CompilationArtifacts> compilationArtifacts) { - this.context = Preconditions.checkNotNull(context); this.objcProvider = Preconditions.checkNotNull(objcProvider); this.compilationArtifacts = Preconditions.checkNotNull(compilationArtifacts); } @@ -574,72 +565,4 @@ public final class ObjcCommon { } return errors; } - - /** - * Returns a {@link RuleConfiguredTargetBuilder}. - * - * @param filesToBuild files to build for this target. These also become the data runfiles. Note - * that this method may add more files to create the complete list of files to build for this - * target. - * @param maybeTargetProvider the provider for this target. - * @param maybeExportedProvider the {@link ObjcProvider} for this target. This should generally be - * present whenever {@code objc_} rules may depend on this target. - * @param maybeJ2ObjcSrcsProvider the {@link J2ObjcSrcsProvider} for this target. - */ - public RuleConfiguredTargetBuilder configuredTargetBuilder(NestedSet<Artifact> filesToBuild, - Optional<XcodeProvider> maybeTargetProvider, Optional<ObjcProvider> maybeExportedProvider, - Optional<XcTestAppProvider> maybeXcTestAppProvider, - Optional<J2ObjcSrcsProvider> maybeJ2ObjcSrcsProvider, - Optional<J2ObjcMappingFileProvider> maybeJ2ObjcMappingFileProvider) { - NestedSet<Artifact> allFilesToBuild = NestedSetBuilder.<Artifact>stableOrder() - .addTransitive(filesToBuild) - .build(); - - RunfilesProvider runfilesProvider = RunfilesProvider.withData( - new Runfiles.Builder() - .addRunfiles(context, RunfilesProvider.DEFAULT_RUNFILES) - .build(), - new Runfiles.Builder().addTransitiveArtifacts(allFilesToBuild).build()); - - RuleConfiguredTargetBuilder target = new RuleConfiguredTargetBuilder(context) - .setFilesToBuild(allFilesToBuild) - .add(RunfilesProvider.class, runfilesProvider); - for (ObjcProvider exportedProvider : maybeExportedProvider.asSet()) { - target.addProvider(ObjcProvider.class, exportedProvider); - } - for (XcTestAppProvider xcTestAppProvider : maybeXcTestAppProvider.asSet()) { - target.addProvider(XcTestAppProvider.class, xcTestAppProvider); - } - for (XcodeProvider targetProvider : maybeTargetProvider.asSet()) { - target.addProvider(XcodeProvider.class, targetProvider); - } - for (J2ObjcSrcsProvider j2ObjcSrcsProvider : maybeJ2ObjcSrcsProvider.asSet()) { - target.addProvider(J2ObjcSrcsProvider.class, j2ObjcSrcsProvider); - } - for (J2ObjcMappingFileProvider j2ObjcMappingFileProvider - : maybeJ2ObjcMappingFileProvider.asSet()) { - target.addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider); - } - return target; - } - - /** - * Creates a {@link ConfiguredTarget}. - * - * @param filesToBuild files to build for this target. These also become the data runfiles. Note - * that this method may add more files to create the complete list of files to build for this - * target. - * @param maybeTargetProvider the provider for this target. - * @param maybeExportedProvider the {@link ObjcProvider} for this target. This should generally be - * present whenever {@code objc_} rules may depend on this target. - * @param maybeJ2ObjcSrcsProvider the {@link J2ObjcSrcsProvider} for this target. - */ - public ConfiguredTarget configuredTarget(NestedSet<Artifact> filesToBuild, - Optional<XcodeProvider> maybeTargetProvider, Optional<ObjcProvider> maybeExportedProvider, - Optional<XcTestAppProvider> maybeXcTestAppProvider, - Optional<J2ObjcSrcsProvider> maybeJ2ObjcSrcsProvider, - Optional<J2ObjcMappingFileProvider> maybeJ2ObjcMappingFileProvider) { - return configuredTargetBuilder(filesToBuild, maybeTargetProvider, maybeExportedProvider, - maybeXcTestAppProvider, maybeJ2ObjcSrcsProvider, maybeJ2ObjcMappingFileProvider).build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java index 5e670f6dd5..13c2d5476b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFramework.java @@ -16,12 +16,12 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.collect.nestedset.Order.STABLE_ORDER; -import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.objc.ObjcSdkFrameworks.Attributes; @@ -50,12 +50,9 @@ public class ObjcFramework implements RuleConfiguredTargetFactory { ruleContext.attributeError("framework_imports", error); } - return common.configuredTarget( - NestedSetBuilder.<Artifact>emptySet(STABLE_ORDER) /* filesToBuild */, - Optional.<XcodeProvider>absent(), - Optional.of(common.getObjcProvider()), - Optional.<XcTestAppProvider>absent(), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); + NestedSet<Artifact> filesToBuild = NestedSetBuilder.emptySet(STABLE_ORDER); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild) + .addProvider(ObjcProvider.class, common.getObjcProvider()) + .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java index dc80de46d5..7c21400fe4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.objc; import static com.google.devtools.build.lib.rules.objc.XcodeProductType.LIBRARY_STATIC; -import com.google.common.base.Optional; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; @@ -61,12 +60,9 @@ public class ObjcImport implements RuleConfiguredTargetFactory { .registerActions(xcodeProviderBuilder.build()) .addFilesToBuild(filesToBuild); - return common.configuredTarget( - filesToBuild.build(), - Optional.of(xcodeProviderBuilder.build()), - Optional.of(common.getObjcProvider()), - Optional.<XcTestAppProvider>absent(), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) + .addProvider(XcodeProvider.class, xcodeProviderBuilder.build()) + .addProvider(ObjcProvider.class, common.getObjcProvider()) + .build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 28c9314d55..61e2ba4c98 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -106,13 +106,13 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { xcodeProviderBuilder, new Attribute("non_propagated_deps", Mode.TARGET)) .registerActions(xcodeProviderBuilder.build()); - return common.configuredTarget( - filesToBuild.build(), - Optional.of(xcodeProviderBuilder.build()), - Optional.of(common.getObjcProvider()), - Optional.<XcTestAppProvider>absent(), - Optional.of(ObjcRuleClasses.j2ObjcSrcsProvider(ruleContext)), - Optional.of(ObjcRuleClasses.j2ObjcMappingFileProvider(ruleContext))); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) + .addProvider(XcodeProvider.class, xcodeProviderBuilder.build()) + .addProvider(ObjcProvider.class, common.getObjcProvider()) + .addProvider(J2ObjcSrcsProvider.class, ObjcRuleClasses.j2ObjcSrcsProvider(ruleContext)) + .addProvider( + J2ObjcMappingFileProvider.class, ObjcRuleClasses.j2ObjcMappingFileProvider(ruleContext)) + .build(); } private OptionsProvider optionsProvider(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java index ab58fd0d34..b6c9113dda 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java @@ -200,13 +200,10 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory { xcodeProviderBuilder, new Attribute(ObjcProtoLibraryRule.LIBPROTOBUF_ATTR, Mode.TARGET)) .registerActions(xcodeProviderBuilder.build()); - return common.configuredTarget( - filesToBuild.build(), - Optional.of(xcodeProviderBuilder.build()), - Optional.of(common.getObjcProvider()), - Optional.<XcTestAppProvider>absent(), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); + return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) + .addProvider(XcodeProvider.class, xcodeProviderBuilder.build()) + .addProvider(ObjcProvider.class, common.getObjcProvider()) + .build(); } private NestedSet<Artifact> maybeGetProtoSources(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index df14de212e..4844892d1e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -30,11 +30,15 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; 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; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; +import com.google.devtools.build.lib.analysis.Runfiles; +import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +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.Attribute; import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel; @@ -237,6 +241,24 @@ public class ObjcRuleClasses { } /** + * Creates a new configured target builder with the given {@code filesToBuild}, which are also + * used as runfiles. + * + * @param ruleContext the current rule context + * @param filesToBuild files to build for this target. These also become the data runfiles + */ + static RuleConfiguredTargetBuilder ruleConfiguredTarget(RuleContext ruleContext, + NestedSet<Artifact> filesToBuild) { + RunfilesProvider runfilesProvider = RunfilesProvider.withData( + new Runfiles.Builder().addRunfiles(ruleContext, RunfilesProvider.DEFAULT_RUNFILES).build(), + new Runfiles.Builder().addTransitiveArtifacts(filesToBuild).build()); + + return new RuleConfiguredTargetBuilder(ruleContext) + .setFilesToBuild(filesToBuild) + .add(RunfilesProvider.class, runfilesProvider); + } + + /** * Attributes for {@code objc_*} rules that have compiler options. */ public static class CoptsRule implements RuleDefinition { 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 b3e27c1363..72469a91d2 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 @@ -103,15 +103,15 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg exposedObjcProvider = Optional.absent(); } - RuleConfiguredTargetBuilder target = common.configuredTargetBuilder( - filesToBuild.build(), - Optional.of(xcodeProviderBuilder.build()), - exposedObjcProvider, - Optional.of(releaseBundlingSupport.xcTestAppProvider()), - Optional.<J2ObjcSrcsProvider>absent(), - Optional.<J2ObjcMappingFileProvider>absent()); - configureTarget(target, ruleContext, releaseBundlingSupport); - return target.build(); + 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()); + } + configureTarget(targetBuilder, ruleContext, releaseBundlingSupport); + return targetBuilder.build(); } /** |