From 1a2937151b8d36e8741ef9d4fbe7d2ebf65cb775 Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Mon, 8 Jul 2019 12:25:59 -0700 Subject: [PATCH] Make writable arrays and maps only shallowly writable Summary: @public The `WritableArray` and `WritableMap` interfaces currently require that nested arrays and maps also be writable. Nothing in our code actually relies on this, so we can relax this restriction and get useful properties. For instance, it is now possible to construct a `JavaOnlyMap` (or array) that reuses `ReadableMap` and `ReadableArray` values by reference ( = structural sharing) instead of forcing a deep copy. Reviewed By: kathryngray Differential Revision: D16132580 fbshipit-source-id: 9f41189ebea2a82e775a7a4da8c357a5ce9c5b9d --- .../com/facebook/react/bridge/JavaOnlyArray.java | 12 ++++++------ .../java/com/facebook/react/bridge/JavaOnlyMap.java | 8 ++++---- .../com/facebook/react/bridge/WritableArray.java | 4 ++-- .../java/com/facebook/react/bridge/WritableMap.java | 4 ++-- .../facebook/react/bridge/WritableNativeArray.java | 4 ++-- .../com/facebook/react/bridge/WritableNativeMap.java | 4 ++-- 6 files changed, 18 insertions(+), 18 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 fcc022220e4..aa858cc2e29 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java @@ -101,8 +101,8 @@ public class JavaOnlyArray implements ReadableArray, WritableArray { } @Override - public JavaOnlyArray getArray(int index) { - return (JavaOnlyArray) mBackingList.get(index); + public ReadableArray getArray(int index) { + return (ReadableArray) mBackingList.get(index); } @Override @@ -111,8 +111,8 @@ public class JavaOnlyArray implements ReadableArray, WritableArray { } @Override - public JavaOnlyMap getMap(int index) { - return (JavaOnlyMap) mBackingList.get(index); + public ReadableMap getMap(int index) { + return (ReadableMap) mBackingList.get(index); } @Override @@ -161,12 +161,12 @@ public class JavaOnlyArray implements ReadableArray, WritableArray { } @Override - public void pushArray(@Nullable WritableArray array) { + public void pushArray(@Nullable ReadableArray array) { mBackingList.add(array); } @Override - public void pushMap(@Nullable WritableMap map) { + public void pushMap(@Nullable ReadableMap 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 6ce959b9a3b..c4e16b204c2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java @@ -116,8 +116,8 @@ public class JavaOnlyMap implements ReadableMap, WritableMap { } @Override - public JavaOnlyArray getArray(@Nonnull String name) { - return (JavaOnlyArray) mBackingMap.get(name); + public ReadableArray getArray(@Nonnull String name) { + return (ReadableArray) mBackingMap.get(name); } @Override @@ -196,7 +196,7 @@ public class JavaOnlyMap implements ReadableMap, WritableMap { } @Override - public void putMap(@Nonnull String key, @Nullable WritableMap value) { + public void putMap(@Nonnull String key, @Nullable ReadableMap value) { mBackingMap.put(key, value); } @@ -213,7 +213,7 @@ public class JavaOnlyMap implements ReadableMap, WritableMap { } @Override - public void putArray(@Nonnull String key, @Nullable WritableArray value) { + public void putArray(@Nonnull String key, @Nullable ReadableArray 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 dcbeb660aaa..23b9e4ea173 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableArray.java @@ -21,7 +21,7 @@ public interface WritableArray extends ReadableArray { void pushString(@Nullable String value); - void pushArray(@Nullable WritableArray array); + void pushArray(@Nullable ReadableArray array); - void pushMap(@Nullable WritableMap map); + void pushMap(@Nullable ReadableMap 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 b823a782e7b..ae52b9043c4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableMap.java @@ -22,9 +22,9 @@ public interface WritableMap extends ReadableMap { void putString(@Nonnull String key, @Nullable String value); - void putArray(@Nonnull String key, @Nullable WritableArray value); + void putArray(@Nonnull String key, @Nullable ReadableArray value); - void putMap(@Nonnull String key, @Nullable WritableMap value); + void putMap(@Nonnull String key, @Nullable ReadableMap 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 3e1adba95c8..3e0751ece41 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java @@ -42,7 +42,7 @@ public class WritableNativeArray extends ReadableNativeArray implements Writable // Note: this consumes the map so do not reuse it. @Override - public void pushArray(@Nullable WritableArray array) { + public void pushArray(@Nullable ReadableArray array) { Assertions.assertCondition( array == null || array instanceof WritableNativeArray, "Illegal type provided"); pushNativeArray((WritableNativeArray) array); @@ -50,7 +50,7 @@ public class WritableNativeArray extends ReadableNativeArray implements Writable // Note: this consumes the map so do not reuse it. @Override - public void pushMap(@Nullable WritableMap map) { + public void pushMap(@Nullable ReadableMap 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 ac3d95dc826..87d6916f88f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java @@ -40,7 +40,7 @@ public class WritableNativeMap extends ReadableNativeMap implements WritableMap // Note: this consumes the map so do not reuse it. @Override - public void putMap(@Nonnull String key, @Nullable WritableMap value) { + public void putMap(@Nonnull String key, @Nullable ReadableMap value) { Assertions.assertCondition( value == null || value instanceof WritableNativeMap, "Illegal type provided"); putNativeMap(key, (WritableNativeMap) value); @@ -48,7 +48,7 @@ public class WritableNativeMap extends ReadableNativeMap implements WritableMap // Note: this consumes the map so do not reuse it. @Override - public void putArray(@Nonnull String key, @Nullable WritableArray value) { + public void putArray(@Nonnull String key, @Nullable ReadableArray value) { Assertions.assertCondition( value == null || value instanceof WritableNativeArray, "Illegal type provided"); putNativeArray(key, (WritableNativeArray) value);