From 7b33d6b0b96578a548e9a7f973eb59ac9236697b Mon Sep 17 00:00:00 2001 From: Dulmandakh Date: Tue, 12 Feb 2019 06:21:31 -0800 Subject: [PATCH] fix WritableArray, WritableMap nullable annotations (#23397) Summary: Recently, I added nullable annotations to ReadableArray, ReadableMap, WritableArray, WritableMap and subclasses to improve Kotlin developer experience. But found that I made mistake with pushArray, pushMap, pushString method of WritableArray, and putArray, putMap, putString methods of WritableMap. This PR fixes previous mistake. Excerpt from WritableNativeArray.cpp. ```cpp void WritableNativeArray::pushString(jstring value) { if (value == NULL) { pushNull(); return; } throwIfConsumed(); array_.push_back(wrap_alias(value)->toStdString()); } void WritableNativeArray::pushNativeArray(WritableNativeArray* otherArray) { if (otherArray == NULL) { pushNull(); return; } throwIfConsumed(); array_.push_back(otherArray->consume()); } void WritableNativeArray::pushNativeMap(WritableNativeMap* map) { if (map == NULL) { pushNull(); return; } throwIfConsumed(); array_.push_back(map->consume()); } ``` Excerpt from WritableNativeMap.cpp ```cpp void WritableNativeMap::putString(std::string key, alias_ref val) { if (!val) { putNull(std::move(key)); return; } throwIfConsumed(); map_.insert(std::move(key), val->toString()); } void WritableNativeMap::putNativeArray(std::string key, WritableNativeArray* otherArray) { if (!otherArray) { putNull(std::move(key)); return; } throwIfConsumed(); map_.insert(key, otherArray->consume()); } void WritableNativeMap::putNativeMap(std::string key, WritableNativeMap *otherMap) { if (!otherMap) { putNull(std::move(key)); return; } throwIfConsumed(); map_.insert(std::move(key), otherMap->consume()); } ``` [Android] [Changed] - fix nullable annotations in WritableArray, WritableMap Pull Request resolved: https://github.com/facebook/react-native/pull/23397 Differential Revision: D14044014 Pulled By: cpojer fbshipit-source-id: c44ea2e097e7b1156223b516aa640a181f0d4a9b --- .../main/java/com/facebook/react/bridge/JavaOnlyArray.java | 4 ++-- .../main/java/com/facebook/react/bridge/JavaOnlyMap.java | 7 ++++--- .../main/java/com/facebook/react/bridge/WritableArray.java | 7 ++++--- .../main/java/com/facebook/react/bridge/WritableMap.java | 7 ++++--- .../com/facebook/react/bridge/WritableNativeArray.java | 4 ++-- .../java/com/facebook/react/bridge/WritableNativeMap.java | 7 ++++--- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java index 9f215e3d26eaff..0c98a91d74a529 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java @@ -160,7 +160,7 @@ public void pushInt(int value) { } @Override - public void pushString(@Nonnull String value) { + public void pushString(@Nullable String value) { mBackingList.add(value); } @@ -170,7 +170,7 @@ public void pushArray(@Nullable WritableArray array) { } @Override - public void pushMap(@Nonnull WritableMap map) { + public void pushMap(@Nullable WritableMap map) { mBackingList.add(map); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java index 77d64f65636a55..f0fd43edd01d5f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java @@ -12,6 +12,7 @@ import java.util.Map; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Java {@link HashMap} backed implementation of {@link ReadableMap} and {@link WritableMap} @@ -179,7 +180,7 @@ public void putInt(@Nonnull String key, int value) { } @Override - public void putString(@Nonnull String key, @Nonnull String value) { + public void putString(@Nonnull String key, @Nullable String value) { mBackingMap.put(key, value); } @@ -189,7 +190,7 @@ public void putNull(@Nonnull String key) { } @Override - public void putMap(@Nonnull String key, @Nonnull WritableMap value) { + public void putMap(@Nonnull String key, @Nullable WritableMap value) { mBackingMap.put(key, value); } @@ -199,7 +200,7 @@ public void merge(@Nonnull ReadableMap source) { } @Override - public void putArray(@Nonnull String key, @Nonnull WritableArray value) { + public void putArray(@Nonnull String key, @Nullable WritableArray value) { mBackingMap.put(key, value); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java index a5a7b69a70705b..62d52d15805713 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java @@ -8,6 +8,7 @@ package com.facebook.react.bridge; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Interface for a mutable array. Used to pass arguments from Java to JS. @@ -18,7 +19,7 @@ public interface WritableArray extends ReadableArray { void pushBoolean(boolean value); void pushDouble(double value); void pushInt(int value); - void pushString(@Nonnull String value); - void pushArray(@Nonnull WritableArray array); - void pushMap(@Nonnull WritableMap map); + void pushString(@Nullable String value); + void pushArray(@Nullable WritableArray array); + void pushMap(@Nullable WritableMap map); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java index 8c30a4e7803617..1aa2d7a108f683 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java @@ -8,6 +8,7 @@ package com.facebook.react.bridge; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Interface for a mutable map. Used to pass arguments from Java to JS. @@ -18,9 +19,9 @@ public interface WritableMap extends ReadableMap { void putBoolean(@Nonnull String key, boolean value); void putDouble(@Nonnull String key, double value); void putInt(@Nonnull String key, int value); - void putString(@Nonnull String key, @Nonnull String value); - void putArray(@Nonnull String key, @Nonnull WritableArray value); - void putMap(@Nonnull String key, @Nonnull WritableMap value); + void putString(@Nonnull String key, @Nullable String value); + void putArray(@Nonnull String key, @Nullable WritableArray value); + void putMap(@Nonnull String key, @Nullable WritableMap value); void merge(@Nonnull ReadableMap source); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java index 5875f14a5c6fe4..004477eb22ffa7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java @@ -38,7 +38,7 @@ public WritableNativeArray() { @Override public native void pushInt(int value); @Override - public native void pushString(@Nonnull String value); + public native void pushString(@Nullable String value); // Note: this consumes the map so do not reuse it. @Override @@ -50,7 +50,7 @@ public void pushArray(@Nullable WritableArray array) { // Note: this consumes the map so do not reuse it. @Override - public void pushMap(@Nonnull WritableMap map) { + public void pushMap(@Nullable WritableMap map) { Assertions.assertCondition( map == null || map instanceof WritableNativeMap, "Illegal type provided"); pushNativeMap((WritableNativeMap) map); diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java index ad70213e6e18d1..cba28dea6022b9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java @@ -14,6 +14,7 @@ import com.facebook.proguard.annotations.DoNotStrip; import javax.annotation.Nonnull; +import javax.annotation.Nullable; /** * Implementation of a write-only map stored in native memory. Use @@ -33,13 +34,13 @@ public class WritableNativeMap extends ReadableNativeMap implements WritableMap @Override public native void putInt(@Nonnull String key, int value); @Override - public native void putString(@Nonnull String key, @Nonnull String value); + public native void putString(@Nonnull String key, @Nullable String value); @Override public native void putNull(@NonNull String key); // Note: this consumes the map so do not reuse it. @Override - public void putMap(@Nonnull String key, @Nonnull WritableMap value) { + public void putMap(@Nonnull String key, @Nullable WritableMap value) { Assertions.assertCondition( value == null || value instanceof WritableNativeMap, "Illegal type provided"); putNativeMap(key, (WritableNativeMap) value); @@ -47,7 +48,7 @@ public void putMap(@Nonnull String key, @Nonnull WritableMap value) { // Note: this consumes the map so do not reuse it. @Override - public void putArray(@Nonnull String key, @Nonnull WritableArray value) { + public void putArray(@Nonnull String key, @Nullable WritableArray value) { Assertions.assertCondition( value == null || value instanceof WritableNativeArray, "Illegal type provided"); putNativeArray(key, (WritableNativeArray) value);