aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar Peter Schmitt <schmitt@google.com>2015-05-14 20:35:47 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-05-15 09:45:16 +0000
commitc94655a903d8faddf01e57908230f94145221e49 (patch)
tree7437ba05a9803e43ff6335cccea0fd486bae1133 /src/main/java/com/google
parentdd02a92db580a62e45c98299daf6c5ad434a9cee (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosApplication.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptions.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/OptionsProvider.java50
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java9
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.
*/