diff options
author | Peter Schmitt <schmitt@google.com> | 2015-05-14 20:35:47 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2015-05-15 09:45:16 +0000 |
commit | c94655a903d8faddf01e57908230f94145221e49 (patch) | |
tree | 7437ba05a9803e43ff6335cccea0fd486bae1133 /src/main/java/com/google | |
parent | dd02a92db580a62e45c98299daf6c5ad434a9cee (diff) |
Simplify OptionsProvider logic.
Eventually objc_options will go away but for now this reduces unnecessary
logic and reduces rule/support interdependencies.
--
MOS_MIGRATED_REVID=93653491
Diffstat (limited to 'src/main/java/com/google')
15 files changed, 84 insertions, 168 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 6bc5b5f18e..9d165b561d 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 @@ -64,7 +64,6 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory @Override public final ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException { ObjcCommon common = common(ruleContext); - OptionsProvider optionsProvider = optionsProvider(ruleContext); ObjcProvider objcProvider = common.getObjcProvider(); if (!hasLibraryOrSources(objcProvider)) { @@ -80,9 +79,9 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory .add(intermediateArtifacts.singleArchitectureBinary()); new CompilationSupport(ruleContext) - .registerJ2ObjcCompileAndArchiveActions(optionsProvider, objcProvider) - .registerCompileAndArchiveActions(common, optionsProvider) - .addXcodeSettings(xcodeProviderBuilder, common, optionsProvider) + .registerJ2ObjcCompileAndArchiveActions(objcProvider) + .registerCompileAndArchiveActions(common) + .addXcodeSettings(xcodeProviderBuilder, common) .registerLinkActions(objcProvider, extraLinkArgs, ImmutableList.<Artifact>of()) .validateAttributes(); @@ -93,9 +92,8 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); // TODO(bazel-team): Remove once all bundle users are migrated to ios_application. ReleaseBundlingSupport releaseBundlingSupport = new ReleaseBundlingSupport( - ruleContext, objcProvider, optionsProvider, - LinkedBinary.LOCAL_AND_DEPENDENCIES, ReleaseBundlingSupport.APP_BUNDLE_DIR_FORMAT, - objcConfiguration.getMinimumOs()); + ruleContext, objcProvider, LinkedBinary.LOCAL_AND_DEPENDENCIES, + ReleaseBundlingSupport.APP_BUNDLE_DIR_FORMAT, objcConfiguration.getMinimumOs()); releaseBundlingSupport .registerActions() .addXcodeSettings(xcodeProviderBuilder) @@ -154,18 +152,6 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory return targetBuilder.build(); } - private OptionsProvider optionsProvider(RuleContext ruleContext) { - OptionsProvider.Builder provider = new OptionsProvider.Builder() - .addCopts(ruleContext.getTokenizedStringListAttr("copts")) - .addTransitive(Optional.fromNullable( - ruleContext.getPrerequisite("options", Mode.TARGET, OptionsProvider.class))); - if (hasReleaseBundlingSupport == HasReleaseBundlingSupport.YES) { - provider - .addInfoplists(ruleContext.getPrerequisiteArtifacts("infoplist", Mode.TARGET).list()); - } - return provider.build(); - } - private boolean hasLibraryOrSources(ObjcProvider objcProvider) { return !Iterables.isEmpty(objcProvider.get(LIBRARY)) // Includes sources from this target. || !Iterables.isEmpty(objcProvider.get(IMPORTED_LIBRARY)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java index f1f1803df0..28962d8c51 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java @@ -84,8 +84,6 @@ final class BundleSupport { * @param ruleContext context this bundle is constructed in * @param objcProvider provider containing all dependencies' information as well as some of this * rule's - * @param optionsProvider provider containing options and plist settings for this rule and its - * dependencies * @param primaryBundleId used to set the bundle identifier or override the existing one from * plist file, can be null * @param fallbackBundleId used to set the bundle identifier if it is not set by plist file or @@ -95,17 +93,29 @@ final class BundleSupport { static InfoplistMerging infoPlistMerging( RuleContext ruleContext, ObjcProvider objcProvider, - OptionsProvider optionsProvider, String primaryBundleId, String fallbackBundleId, ExtraMergePlists extraMergePlists) { IntermediateArtifacts intermediateArtifacts = ObjcRuleClasses.intermediateArtifacts(ruleContext); + NestedSetBuilder<Artifact> infoPlists = NestedSetBuilder.stableOrder(); + if (ruleContext.attributes().has("options", Type.LABEL)) { + OptionsProvider optionsProvider = ruleContext + .getPrerequisite("options", Mode.TARGET, OptionsProvider.class); + if (optionsProvider != null) { + infoPlists.addAll(optionsProvider.getInfoplists()); + } + } + Artifact infoplist = ruleContext.getPrerequisiteArtifact("infoplist", Mode.TARGET); + if (infoplist != null) { + infoPlists.add(infoplist); + } + return new InfoplistMerging.Builder(ruleContext) .setIntermediateArtifacts(intermediateArtifacts) .setInputPlists(NestedSetBuilder.<Artifact>stableOrder() - .addTransitive(optionsProvider.getInfoplists()) + .addTransitive(infoPlists.build()) .addAll(actoolPartialInfoplist(ruleContext, objcProvider).asSet()) .addAll(extraMergePlists) .build()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index a176fec52f..2c8220b203 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -119,17 +119,14 @@ final class CompilationSupport { * Registers all actions necessary to compile this rule's sources and archive them. * * @param common common information about this rule and its dependencies - * @param optionsProvider option and plist information about this rule and its dependencies - * * @return this compilation support */ - CompilationSupport registerCompileAndArchiveActions( - ObjcCommon common, OptionsProvider optionsProvider) { + CompilationSupport registerCompileAndArchiveActions(ObjcCommon common) { if (common.getCompilationArtifacts().isPresent()) { registerCompileAndArchiveActions( common.getCompilationArtifacts().get(), ObjcRuleClasses.intermediateArtifacts(ruleContext), - common.getObjcProvider(), optionsProvider, + common.getObjcProvider(), ruleContext.getConfiguration().isCodeCoverageEnabled()); } return this; @@ -140,21 +137,21 @@ final class CompilationSupport { * files into a single archive library. */ private void registerCompileAndArchiveActions(CompilationArtifacts compilationArtifacts, - IntermediateArtifacts intermediateArtifacts, - ObjcProvider objcProvider, OptionsProvider optionsProvider, boolean isCodeCoverageEnabled) { + IntermediateArtifacts intermediateArtifacts, ObjcProvider objcProvider, + boolean isCodeCoverageEnabled) { ImmutableList.Builder<Artifact> objFiles = new ImmutableList.Builder<>(); for (Artifact sourceFile : compilationArtifacts.getSrcs()) { Artifact objFile = intermediateArtifacts.objFile(sourceFile); objFiles.add(objFile); registerCompileAction(sourceFile, objFile, compilationArtifacts.getPchFile(), - objcProvider, intermediateArtifacts, ImmutableList.of("-fobjc-arc"), optionsProvider, + objcProvider, intermediateArtifacts, ImmutableList.of("-fobjc-arc"), isCodeCoverageEnabled); } for (Artifact nonArcSourceFile : compilationArtifacts.getNonArcSrcs()) { Artifact objFile = intermediateArtifacts.objFile(nonArcSourceFile); objFiles.add(objFile); registerCompileAction(nonArcSourceFile, objFile, compilationArtifacts.getPchFile(), - objcProvider, intermediateArtifacts, ImmutableList.of("-fno-objc-arc"), optionsProvider, + objcProvider, intermediateArtifacts, ImmutableList.of("-fno-objc-arc"), isCodeCoverageEnabled); } for (Artifact archive : compilationArtifacts.getArchive().asSet()) { @@ -169,7 +166,6 @@ final class CompilationSupport { ObjcProvider objcProvider, IntermediateArtifacts intermediateArtifacts, Iterable<String> otherFlags, - OptionsProvider optionsProvider, boolean isCodeCoverageEnabled) { ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); ImmutableList.Builder<String> coverageFlags = new ImmutableList.Builder<>(); @@ -195,7 +191,8 @@ final class CompilationSupport { .addFormatEach("-D%s", objcProvider.get(DEFINE)) .add(coverageFlags.build()) .add(objcConfiguration.getCopts()) - .add(optionsProvider.getCopts()) + .add(attributes.copts()) + .add(attributes.optionsCopts()) .addExecPath("-c", sourceFile) .addExecPath("-o", objFile); @@ -404,13 +401,11 @@ final class CompilationSupport { /** * Registers actions that compile and archive j2Objc dependencies of this rule. * - * @param optionsProvider option and plist information about this rule and its dependencies * @param objcProvider common information about this rule's attributes and its dependencies * * @return this compilation support */ - CompilationSupport registerJ2ObjcCompileAndArchiveActions( - OptionsProvider optionsProvider, ObjcProvider objcProvider) { + CompilationSupport registerJ2ObjcCompileAndArchiveActions(ObjcProvider objcProvider) { J2ObjcSrcsProvider provider = ObjcRuleClasses.j2ObjcSrcsProvider(ruleContext); Iterable<J2ObjcSource> j2ObjcSources = provider.getSrcs(); J2ObjcConfiguration j2objcConfiguration = ruleContext.getFragment(J2ObjcConfiguration.class); @@ -437,7 +432,7 @@ final class CompilationSupport { .setPchFile(Optional.<Artifact>absent()) .build(); registerCompileAndArchiveActions(compilationArtifact, intermediateArtifacts, objcProvider, - optionsProvider, ruleContext.getConfiguration().isCodeCoverageEnabled()); + ruleContext.getConfiguration().isCodeCoverageEnabled()); } return this; @@ -481,11 +476,9 @@ final class CompilationSupport { * Sets compilation-related Xcode project information on the given provider builder. * * @param common common information about this rule's attributes and its dependencies - * @param optionsProvider option and plist information about this rule and its dependencies * @return this compilation support */ - CompilationSupport addXcodeSettings(Builder xcodeProviderBuilder, - ObjcCommon common, OptionsProvider optionsProvider) { + CompilationSupport addXcodeSettings(Builder xcodeProviderBuilder, ObjcCommon common) { ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); for (CompilationArtifacts artifacts : common.getCompilationArtifacts().asSet()) { xcodeProviderBuilder.setCompilationArtifacts(artifacts); @@ -497,7 +490,8 @@ final class CompilationSupport { .addHeaderSearchPaths("$(SDKROOT)/usr/include", attributes.sdkIncludes()) .addCompilationModeCopts(objcConfiguration.getCoptsForCompilationMode()) .addCopts(objcConfiguration.getCopts()) - .addCopts(optionsProvider.getCopts()); + .addCopts(attributes.copts()) + .addCopts(attributes.optionsCopts()); return this; } 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 fd232071a1..7b18b97b47 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,6 @@ package com.google.devtools.build.lib.rules.objc; -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.RuleConfiguredTarget.Mode; @@ -49,16 +48,6 @@ public class IosApplication extends ReleaseBundlingTargetFactory { } @Override - protected OptionsProvider optionsProvider(RuleContext ruleContext) { - return new OptionsProvider.Builder() - .addInfoplists(ruleContext.getPrerequisiteArtifacts("infoplist", Mode.TARGET).list()) - .addTransitive( - Optional.fromNullable( - ruleContext.getPrerequisite("options", Mode.TARGET, OptionsProvider.class))) - .build(); - } - - @Override protected void configureTarget(RuleConfiguredTargetBuilder target, RuleContext ruleContext, ReleaseBundlingSupport releaseBundlingSupport) { // If this is an application built for the simulator, make it runnable. diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java index cf756d225b..f16327d3c2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java @@ -52,12 +52,6 @@ public class IosExtension extends ReleaseBundlingTargetFactory { ConfigurationDistinguisher.EXTENSION); } - protected OptionsProvider optionsProvider(RuleContext ruleContext) { - return new OptionsProvider.Builder() - .addInfoplists(ruleContext.getPrerequisiteArtifacts("infoplist", Mode.TARGET).list()) - .build(); - } - @Override protected String bundleMinimumOsVersion(RuleContext ruleContext) { return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs()); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index a76af46b61..d23b21fd02 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.STORYBOARD; import static com.google.devtools.build.lib.rules.objc.ObjcProvider.XCDATAMODEL; import com.google.common.annotations.VisibleForTesting; -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; @@ -69,7 +68,6 @@ public abstract class IosTest implements RuleConfiguredTargetFactory { @Override public final ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException { ObjcCommon common = common(ruleContext); - OptionsProvider optionsProvider = optionsProvider(ruleContext); if (!common.getCompilationArtifacts().get().getArchive().isPresent()) { ruleContext.ruleError(REQUIRES_SOURCE_ERROR); @@ -117,14 +115,14 @@ public abstract class IosTest implements RuleConfiguredTargetFactory { new CompilationSupport(ruleContext) .registerLinkActions(common.getObjcProvider(), extraLinkArgs, extraLinkInputs) - .registerJ2ObjcCompileAndArchiveActions(optionsProvider, common.getObjcProvider()) - .registerCompileAndArchiveActions(common, optionsProvider) - .addXcodeSettings(xcodeProviderBuilder, common, optionsProvider) + .registerJ2ObjcCompileAndArchiveActions(common.getObjcProvider()) + .registerCompileAndArchiveActions(common) + .addXcodeSettings(xcodeProviderBuilder, common) .validateAttributes(); ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); ReleaseBundlingSupport releaseBundlingSupport = new ReleaseBundlingSupport( - ruleContext, common.getObjcProvider(), optionsProvider, LinkedBinary.LOCAL_AND_DEPENDENCIES, + ruleContext, common.getObjcProvider(), LinkedBinary.LOCAL_AND_DEPENDENCIES, ReleaseBundlingSupport.APP_BUNDLE_DIR_FORMAT, objcConfiguration.getMinimumOs()); releaseBundlingSupport .registerActions() @@ -167,15 +165,6 @@ public abstract class IosTest implements RuleConfiguredTargetFactory { return ruleContext.attributes().get(IS_XCTEST, Type.BOOLEAN); } - private OptionsProvider optionsProvider(RuleContext ruleContext) { - return new OptionsProvider.Builder() - .addCopts(ruleContext.getTokenizedStringListAttr("copts")) - .addInfoplists(ruleContext.getPrerequisiteArtifacts("infoplist", Mode.TARGET).list()) - .addTransitive(Optional.fromNullable( - ruleContext.getPrerequisite("options", Mode.TARGET, OptionsProvider.class))) - .build(); - } - /** Returns the {@link XcTestAppProvider} of the {@code xctest_app} attribute. */ private static XcTestAppProvider xcTestAppProvider(RuleContext ruleContext) { return ruleContext.getPrerequisite(XCTEST_APP, Mode.TARGET, XcTestAppProvider.class); 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 f32f320c20..c13086401a 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 @@ -34,9 +34,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException { ObjcCommon common = common(ruleContext); - OptionsProvider optionsProvider = optionsProvider(ruleContext); - - Bundling bundling = bundling(ruleContext, common, optionsProvider); + Bundling bundling = bundling(ruleContext, common); XcodeProvider.Builder xcodeProviderBuilder = new XcodeProvider.Builder(); NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder(); @@ -66,14 +64,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { .build(); } - private OptionsProvider optionsProvider(RuleContext ruleContext) { - return new OptionsProvider.Builder() - .addInfoplists(ruleContext.getPrerequisiteArtifacts("infoplist", Mode.TARGET).list()) - .build(); - } - - private Bundling bundling( - RuleContext ruleContext, ObjcCommon common, OptionsProvider optionsProvider) { + private Bundling bundling(RuleContext ruleContext, ObjcCommon common) { IntermediateArtifacts intermediateArtifacts = ObjcRuleClasses.intermediateArtifacts(ruleContext); ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); @@ -83,7 +74,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { .setBundleDirFormat("%s.bundle") .setObjcProvider(common.getObjcProvider()) .setInfoplistMerging( - BundleSupport.infoPlistMerging(ruleContext, common.getObjcProvider(), optionsProvider, + BundleSupport.infoPlistMerging(ruleContext, common.getObjcProvider(), /*primaryBundleId=*/null, /*fallbackBundleId=*/null, new BundleSupport.ExtraMergePlists())) .setIntermediateArtifacts(intermediateArtifacts) 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 36f6ad56da..e3ed076467 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 @@ -146,6 +146,33 @@ public final class ObjcCommon { } return paths.build(); } + + /** + * Returns any values specified in this rule's {@code copts} attribute or an empty list if the + * attribute does not exist or no values are specified. + */ + public Iterable<String> copts() { + if (!ruleContext.attributes().has("copts", Type.STRING_LIST)) { + return ImmutableList.of(); + } + return ruleContext.getTokenizedStringListAttr("copts"); + } + + /** + * Returns any {@code copts} defined on an {@code objc_options} rule that is a dependency of + * this rule. + */ + public Iterable<String> optionsCopts() { + if (!ruleContext.attributes().has("options", Type.LABEL)) { + return ImmutableList.of(); + } + OptionsProvider optionsProvider = + ruleContext.getPrerequisite("options", Mode.TARGET, OptionsProvider.class); + if (optionsProvider == null) { + return ImmutableList.of(); + } + return optionsProvider.getCopts(); + } } /** 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 7c21400fe4..c3b35c22cc 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 @@ -47,7 +47,7 @@ public class ObjcImport implements RuleConfiguredTargetFactory { NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder(); new CompilationSupport(ruleContext) - .addXcodeSettings(xcodeProviderBuilder, common, OptionsProvider.DEFAULT) + .addXcodeSettings(xcodeProviderBuilder, common) .validateAttributes(); new ResourceSupport(ruleContext) 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 61e2ba4c98..38c07190d1 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 @@ -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.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -82,15 +81,14 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { ruleContext, ImmutableList.<SdkFramework>of(), ruleContext.attributes().get("alwayslink", Type.BOOLEAN), new ExtraImportLibraries(), ImmutableList.<ObjcProvider>of()); - OptionsProvider optionsProvider = optionsProvider(ruleContext); XcodeProvider.Builder xcodeProviderBuilder = new XcodeProvider.Builder(); NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.<Artifact>stableOrder() .addAll(common.getCompiledArchive().asSet()); new CompilationSupport(ruleContext) - .registerCompileAndArchiveActions(common, optionsProvider) - .addXcodeSettings(xcodeProviderBuilder, common, optionsProvider) + .registerCompileAndArchiveActions(common) + .addXcodeSettings(xcodeProviderBuilder, common) .validateAttributes(); new ResourceSupport(ruleContext) @@ -114,12 +112,4 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { J2ObjcMappingFileProvider.class, ObjcRuleClasses.j2ObjcMappingFileProvider(ruleContext)) .build(); } - - private OptionsProvider optionsProvider(RuleContext ruleContext) { - return new OptionsProvider.Builder() - .addCopts(ruleContext.getTokenizedStringListAttr("copts")) - .addTransitive(Optional.fromNullable( - ruleContext.getPrerequisite("options", Mode.TARGET, OptionsProvider.class))) - .build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptions.java index a7e2b8f60f..005ea488b2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptions.java @@ -30,11 +30,8 @@ public class ObjcOptions implements RuleConfiguredTargetFactory { return new RuleConfiguredTargetBuilder(ruleContext) .add(RunfilesProvider.class, RunfilesProvider.EMPTY) .add(OptionsProvider.class, - new OptionsProvider.Builder() - .addCopts(ruleContext.getTokenizedStringListAttr("copts")) - .addInfoplists( - ruleContext.getPrerequisiteArtifacts("infoplists", Mode.TARGET).list()) - .build()) + new OptionsProvider(ruleContext.getTokenizedStringListAttr("copts"), + ruleContext.getPrerequisiteArtifacts("infoplists", Mode.TARGET).list())) .build(); } } 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 b6c9113dda..7e1504721e 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 @@ -191,7 +191,7 @@ public class ObjcProtoLibrary implements RuleConfiguredTargetFactory { .setCompilationArtifacts(common.getCompilationArtifacts().get()); new CompilationSupport(ruleContext) - .registerCompileAndArchiveActions(common, OptionsProvider.DEFAULT); + .registerCompileAndArchiveActions(common); new XcodeSupport(ruleContext) .addFilesToBuild(filesToBuild) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/OptionsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/OptionsProvider.java index 84a2ee547a..5fd3561796 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/OptionsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/OptionsProvider.java @@ -14,14 +14,9 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; /** @@ -31,56 +26,21 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; final class OptionsProvider extends Value<OptionsProvider> implements TransitiveInfoProvider { - static final class Builder { - private Iterable<String> copts = ImmutableList.of(); - private final NestedSetBuilder<Artifact> infoplists = NestedSetBuilder.stableOrder(); - /** - * Adds copts to the end of the copts sequence. - */ - public Builder addCopts(Iterable<String> copts) { - this.copts = Iterables.concat(this.copts, copts); - return this; - } + private final Iterable<String> copts; + private final Iterable<Artifact> infoplists; - public Builder addInfoplists(Iterable<Artifact> infoplists) { - this.infoplists.addAll(infoplists); - return this; - } - - /** - * Adds infoplists and copts from the given provider, if present. copts are added to the end of - * the sequence. - */ - public Builder addTransitive(Optional<OptionsProvider> maybeProvider) { - for (OptionsProvider provider : maybeProvider.asSet()) { - this.copts = Iterables.concat(this.copts, provider.copts); - this.infoplists.addTransitive(provider.infoplists); - } - return this; - } - - public OptionsProvider build() { - return new OptionsProvider(ImmutableList.copyOf(copts), infoplists.build()); - } - } - - public static final OptionsProvider DEFAULT = new Builder().build(); - - private final ImmutableList<String> copts; - private final NestedSet<Artifact> infoplists; - - private OptionsProvider(ImmutableList<String> copts, NestedSet<Artifact> infoplists) { + public OptionsProvider(Iterable<String> copts, Iterable<Artifact> infoplists) { super(copts, infoplists); this.copts = Preconditions.checkNotNull(copts); this.infoplists = Preconditions.checkNotNull(infoplists); } - public ImmutableList<String> getCopts() { + public Iterable<String> getCopts() { return copts; } - public NestedSet<Artifact> getInfoplists() { + public Iterable<Artifact> getInfoplists() { return infoplists; } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java index 6cf939a129..1b70682707 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java @@ -118,8 +118,6 @@ public final class ReleaseBundlingSupport { * @param ruleContext context for the application-generating rule * @param objcProvider provider containing all dependencies' information as well as some of this * rule's - * @param optionsProvider provider containing options and plist settings for this rule and its - * dependencies * @param linkedBinary whether to look for a linked binary from this rule and dependencies or just * the latter * @param bundleDirFormat format string representing the bundle's directory with a single @@ -128,16 +126,14 @@ public final class ReleaseBundlingSupport { * for (<b>not</b> the minimum OS version its binary is compiled with, that needs to be set * through the configuration) */ - ReleaseBundlingSupport( - RuleContext ruleContext, ObjcProvider objcProvider, OptionsProvider optionsProvider, + ReleaseBundlingSupport(RuleContext ruleContext, ObjcProvider objcProvider, LinkedBinary linkedBinary, String bundleDirFormat, String bundleMinimumOsVersion) { this.linkedBinary = linkedBinary; this.attributes = new Attributes(ruleContext); this.ruleContext = ruleContext; this.objcProvider = objcProvider; this.intermediateArtifacts = ObjcRuleClasses.intermediateArtifacts(ruleContext); - bundling = bundling( - ruleContext, objcProvider, optionsProvider, bundleDirFormat, bundleMinimumOsVersion); + bundling = bundling(ruleContext, objcProvider, bundleDirFormat, bundleMinimumOsVersion); bundleSupport = new BundleSupport(ruleContext, bundling, extraActoolArgs()); } @@ -391,8 +387,7 @@ public final class ReleaseBundlingSupport { return new ExtraActoolArgs(extraArgs.build()); } - private Bundling bundling( - RuleContext ruleContext, ObjcProvider objcProvider, OptionsProvider optionsProvider, + private Bundling bundling(RuleContext ruleContext, ObjcProvider objcProvider, String bundleDirFormat, String minimumOsVersion) { ImmutableList<BundleableFile> extraBundleFiles; ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext); @@ -421,9 +416,8 @@ public final class ReleaseBundlingSupport { .addExtraBundleFiles(extraBundleFiles) .setObjcProvider(objcProvider) .setInfoplistMerging( - BundleSupport.infoPlistMerging(ruleContext, objcProvider, optionsProvider, - primaryBundleId, fallbackBundleId, - new BundleSupport.ExtraMergePlists(getGeneratedVersionPlist()))) + BundleSupport.infoPlistMerging(ruleContext, objcProvider, primaryBundleId, + fallbackBundleId, new BundleSupport.ExtraMergePlists(getGeneratedVersionPlist()))) .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)) .setPrimaryBundleId(primaryBundleId) .setFallbackBundleId(fallbackBundleId) 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 72469a91d2..5d474f20b9 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 @@ -72,8 +72,8 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder(); ReleaseBundlingSupport releaseBundlingSupport = new ReleaseBundlingSupport( - ruleContext, common.getObjcProvider(), optionsProvider(ruleContext), - LinkedBinary.DEPENDENCIES_ONLY, bundleDirFormat, bundleMinimumOsVersion(ruleContext)); + ruleContext, common.getObjcProvider(), LinkedBinary.DEPENDENCIES_ONLY, bundleDirFormat, + bundleMinimumOsVersion(ruleContext)); releaseBundlingSupport .registerActions() .addXcodeSettings(xcodeProviderBuilder) @@ -124,11 +124,6 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg } /** - * Returns a provider based on this rule's options and those of its option-providing dependencies. - */ - protected abstract OptionsProvider optionsProvider(RuleContext ruleContext); - - /** * Performs additional configuration of the target. The default implementation does nothing, but * subclasses may override it to add logic. */ |