aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
index 84d4bbc3d0..848058efc4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkProvider.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.vfs.PathFragment;
+import javax.annotation.Nullable;
/**
* Provider containing information about an Apple dynamic framework. This provider contains:
@@ -57,24 +58,37 @@ public final class AppleDynamicFrameworkProvider extends SkylarkClassObject
private final NestedSet<PathFragment> dynamicFrameworkDirs;
private final NestedSet<Artifact> dynamicFrameworkFiles;
- private final Artifact dylibBinary;
+ private final @Nullable Artifact dylibBinary;
private final ObjcProvider depsObjcProvider;
- public AppleDynamicFrameworkProvider(Artifact dylibBinary,
+ public AppleDynamicFrameworkProvider(@Nullable Artifact dylibBinary,
ObjcProvider depsObjcProvider,
NestedSet<PathFragment> dynamicFrameworkDirs,
NestedSet<Artifact> dynamicFrameworkFiles) {
- super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of(
- DYLIB_BINARY_FIELD_NAME, dylibBinary,
- FRAMEWORK_DIRS_FIELD_NAME, dynamicFrameworkDirs,
- FRAMEWORK_FILES_FIELD_NAME, dynamicFrameworkFiles,
- OBJC_PROVIDER_FIELD_NAME, depsObjcProvider));
+ super(SKYLARK_CONSTRUCTOR,
+ skylarkValueMap(dylibBinary, depsObjcProvider, dynamicFrameworkDirs,
+ dynamicFrameworkFiles));
this.dylibBinary = dylibBinary;
this.depsObjcProvider = depsObjcProvider;
this.dynamicFrameworkDirs = dynamicFrameworkDirs;
this.dynamicFrameworkFiles = dynamicFrameworkFiles;
}
+ private static ImmutableMap<String, Object> skylarkValueMap(
+ @Nullable Artifact dylibBinary,
+ ObjcProvider depsObjcProvider,
+ NestedSet<PathFragment> dynamicFrameworkDirs,
+ NestedSet<Artifact> dynamicFrameworkFiles) {
+ ImmutableMap.Builder<String, Object> mapBuilder = ImmutableMap.<String, Object>builder()
+ .put(FRAMEWORK_DIRS_FIELD_NAME, dynamicFrameworkDirs)
+ .put(FRAMEWORK_FILES_FIELD_NAME, dynamicFrameworkFiles)
+ .put(OBJC_PROVIDER_FIELD_NAME, depsObjcProvider);
+ if (dylibBinary != null) {
+ mapBuilder.put(DYLIB_BINARY_FIELD_NAME, dylibBinary);
+ }
+ return mapBuilder.build();
+ }
+
/**
* Returns the framework path names used as link inputs in order to link against the dynamic
* framework.
@@ -92,8 +106,10 @@ public final class AppleDynamicFrameworkProvider extends SkylarkClassObject
}
/**
- * Returns the multi-architecture dylib binary of the dynamic framework.
+ * Returns the multi-architecture dylib binary of the dynamic framework. May return null if
+ * the rule providing the framework only specified framework imports.
*/
+ @Nullable
public Artifact getAppleDylibBinary() {
return dylibBinary;
}