diff options
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.java | 32 |
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; } |