aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java62
1 files changed, 34 insertions, 28 deletions
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 5f832ebc27..bf35252ec6 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
@@ -65,6 +65,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.BuildType;
@@ -375,6 +376,39 @@ public final class ObjcCommon {
return this;
}
+ Builder addDeps(List<? extends TransitiveInfoCollection> deps) {
+ ImmutableList.Builder<ObjcProvider> propagatedObjcDeps =
+ ImmutableList.<ObjcProvider>builder();
+ ImmutableList.Builder<CppCompilationContext> cppDeps =
+ ImmutableList.<CppCompilationContext>builder();
+ ImmutableList.Builder<CcLinkParamsProvider> cppDepLinkParams =
+ ImmutableList.<CcLinkParamsProvider>builder();
+
+ for (TransitiveInfoCollection dep : deps) {
+ addAnyProviders(propagatedObjcDeps, dep, ObjcProvider.class);
+ addAnyProviders(cppDeps, dep, CppCompilationContext.class);
+ // Hack to determine if dep is a cc target. Required so objc_library archives packed in
+ // CcLinkParamsProvider do not get consumed as cc targets.
+ if (dep.getProvider(CppRunfilesProvider.class) != null) {
+ cppDepLinkParams.add(dep.getProvider(CcLinkParamsProvider.class));
+ }
+ }
+ addDepObjcProviders(propagatedObjcDeps.build());
+ this.depCcHeaderProviders = Iterables.concat(this.depCcHeaderProviders, cppDeps.build());
+ this.depCcLinkProviders =
+ Iterables.concat(this.depCcLinkProviders, cppDepLinkParams.build());
+ return this;
+ }
+
+ private <T extends TransitiveInfoProvider> ImmutableList.Builder<T> addAnyProviders(
+ ImmutableList.Builder<T> listBuilder, TransitiveInfoCollection collection,
+ Class<T> providerClass) {
+ if (collection.getProvider(providerClass) != null) {
+ listBuilder.add(collection.getProvider(providerClass));
+ }
+ return listBuilder;
+ }
+
/**
* Add providers which will be exposed both to the declaring rule and to any dependers on the
* declaring rule.
@@ -469,34 +503,6 @@ public final class ObjcCommon {
return this;
}
- /**
- * Sets information from {@code cc_library} dependencies to be used during compilation.
- */
- public Builder addDepCcHeaderProviders(Iterable<CppCompilationContext> depCcHeaderProviders) {
- this.depCcHeaderProviders = Iterables.concat(this.depCcHeaderProviders, depCcHeaderProviders);
- return this;
- }
-
- /**
- * Sets information from {@code cc_library} dependencies to be used during linking from
- * the {@link TransitiveInfoCollection} objects which contain the relevant link providers
- * (for example, from the current rule's "deps" attribute).
- */
- public Builder addDepCcLinkProviders(List<? extends TransitiveInfoCollection> deps) {
- for (TransitiveInfoCollection dep : deps) {
- // Hack to determine if dep is a cc target. Required so objc_library archives packed in
- // CcLinkParamsProvider do not get consumed as cc targets.
- if (dep.getProvider(CppRunfilesProvider.class) != null) {
- CcLinkParamsProvider ccLinkParamsProvider = dep.getProvider(CcLinkParamsProvider.class);
- this.depCcLinkProviders =
- Iterables.concat(
- this.depCcLinkProviders,
- ImmutableList.<CcLinkParamsProvider>of(ccLinkParamsProvider));
- }
- }
- return this;
- }
-
ObjcCommon build() {
Iterable<BundleableFile> bundleImports = BundleableFile.bundleImportsFromRule(context);