Skip to content

Commit 050f292

Browse files
zhongwuzwfacebook-github-bot
authored andcommitted
Turbo module: Fixes dictionary stripped out when value is null (facebook#51103)
Summary: Fixes facebook#51083. Turbo stripped out the dictionary when the value is null. The old architecture transforms null to NSNull. The null seems useful in cases like facebook#51803 for removing the storage of the key. cipolleschi can you please help to review? ## Changelog: [IOS] [FIXED] - Turbo module: Fixes dictionary stripped out when value is null Pull Request resolved: facebook#51103 Test Plan: Repro please see facebook#51083. Differential Revision: D74208525 Pulled By: javache
1 parent 5250b59 commit 050f292

22 files changed

+187
-54
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<43590bc324e803ccf299e2a6ae6c5304>>
7+
* @generated SignedSource<<83dded582183ca2cffdf5253f25f2215>>
88
*/
99

1010
/**
@@ -168,6 +168,12 @@ public object ReactNativeFeatureFlags {
168168
@JvmStatic
169169
public fun enableMainQueueModulesOnIOS(): Boolean = accessor.enableMainQueueModulesOnIOS()
170170

171+
/**
172+
* Enable NSNull conversion when handling module arguments on iOS
173+
*/
174+
@JvmStatic
175+
public fun enableModuleArgumentNSNullConversionIOS(): Boolean = accessor.enableModuleArgumentNSNullConversionIOS()
176+
171177
/**
172178
* Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
173179
*/

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<5609be38b50c62ff5097b3571940f400>>
7+
* @generated SignedSource<<52ad3a108917b1e5f35506cd10e20502>>
88
*/
99

1010
/**
@@ -43,6 +43,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4343
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
4444
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
4545
private var enableMainQueueModulesOnIOSCache: Boolean? = null
46+
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
4647
private var enableNativeCSSParsingCache: Boolean? = null
4748
private var enableNetworkEventReportingCache: Boolean? = null
4849
private var enableNewBackgroundAndBorderDrawablesCache: Boolean? = null
@@ -277,6 +278,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
277278
return cached
278279
}
279280

281+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
282+
var cached = enableModuleArgumentNSNullConversionIOSCache
283+
if (cached == null) {
284+
cached = ReactNativeFeatureFlagsCxxInterop.enableModuleArgumentNSNullConversionIOS()
285+
enableModuleArgumentNSNullConversionIOSCache = cached
286+
}
287+
return cached
288+
}
289+
280290
override fun enableNativeCSSParsing(): Boolean {
281291
var cached = enableNativeCSSParsingCache
282292
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<15645e36bbca81dfcec07fc82f8f6264>>
7+
* @generated SignedSource<<cab7575e78254b3cee018f17df1301bc>>
88
*/
99

1010
/**
@@ -74,6 +74,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
7474

7575
@DoNotStrip @JvmStatic public external fun enableMainQueueModulesOnIOS(): Boolean
7676

77+
@DoNotStrip @JvmStatic public external fun enableModuleArgumentNSNullConversionIOS(): Boolean
78+
7779
@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean
7880

7981
@DoNotStrip @JvmStatic public external fun enableNetworkEventReporting(): Boolean

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<9c7d04c48c4c5feb0d2fb250966550c8>>
7+
* @generated SignedSource<<222fe5f67004ba1f5c4223f8d7f85c00>>
88
*/
99

1010
/**
@@ -69,6 +69,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
6969

7070
override fun enableMainQueueModulesOnIOS(): Boolean = false
7171

72+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean = true
73+
7274
override fun enableNativeCSSParsing(): Boolean = false
7375

7476
override fun enableNetworkEventReporting(): Boolean = false

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<efc16fdb113176b932c0005118e7b48c>>
7+
* @generated SignedSource<<67eb4890f603fa8d60ad7b7d868f6d92>>
88
*/
99

1010
/**
@@ -47,6 +47,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
4747
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
4848
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
4949
private var enableMainQueueModulesOnIOSCache: Boolean? = null
50+
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
5051
private var enableNativeCSSParsingCache: Boolean? = null
5152
private var enableNetworkEventReportingCache: Boolean? = null
5253
private var enableNewBackgroundAndBorderDrawablesCache: Boolean? = null
@@ -304,6 +305,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
304305
return cached
305306
}
306307

308+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
309+
var cached = enableModuleArgumentNSNullConversionIOSCache
310+
if (cached == null) {
311+
cached = currentProvider.enableModuleArgumentNSNullConversionIOS()
312+
accessedFeatureFlags.add("enableModuleArgumentNSNullConversionIOS")
313+
enableModuleArgumentNSNullConversionIOSCache = cached
314+
}
315+
return cached
316+
}
317+
307318
override fun enableNativeCSSParsing(): Boolean {
308319
var cached = enableNativeCSSParsingCache
309320
if (cached == null) {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<3a61d9b66a7ed6fc9c76548aa72e3ed3>>
7+
* @generated SignedSource<<ba73c68aadac58dce04198bf8515f326>>
88
*/
99

1010
/**
@@ -69,6 +69,8 @@ public interface ReactNativeFeatureFlagsProvider {
6969

7070
@DoNotStrip public fun enableMainQueueModulesOnIOS(): Boolean
7171

72+
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
73+
7274
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
7375

7476
@DoNotStrip public fun enableNetworkEventReporting(): Boolean

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<93037428475b39d3f2c208e1326b3e86>>
7+
* @generated SignedSource<<d85b84e52457ef985e7c1afbeb778fb0>>
88
*/
99

1010
/**
@@ -177,6 +177,12 @@ class ReactNativeFeatureFlagsJavaProvider
177177
return method(javaProvider_);
178178
}
179179

180+
bool enableModuleArgumentNSNullConversionIOS() override {
181+
static const auto method =
182+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableModuleArgumentNSNullConversionIOS");
183+
return method(javaProvider_);
184+
}
185+
180186
bool enableNativeCSSParsing() override {
181187
static const auto method =
182188
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableNativeCSSParsing");
@@ -452,6 +458,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS(
452458
return ReactNativeFeatureFlags::enableMainQueueModulesOnIOS();
453459
}
454460

461+
bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS(
462+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
463+
return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
464+
}
465+
455466
bool JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing(
456467
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
457468
return ReactNativeFeatureFlags::enableNativeCSSParsing();
@@ -682,6 +693,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
682693
makeNativeMethod(
683694
"enableMainQueueModulesOnIOS",
684695
JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS),
696+
makeNativeMethod(
697+
"enableModuleArgumentNSNullConversionIOS",
698+
JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
685699
makeNativeMethod(
686700
"enableNativeCSSParsing",
687701
JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing),

packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<f5365c0a71e4c7638cec79bebfab55c3>>
7+
* @generated SignedSource<<0b5bb66c33e9ab78686d59412ae180fe>>
88
*/
99

1010
/**
@@ -99,6 +99,9 @@ class JReactNativeFeatureFlagsCxxInterop
9999
static bool enableMainQueueModulesOnIOS(
100100
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
101101

102+
static bool enableModuleArgumentNSNullConversionIOS(
103+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
104+
102105
static bool enableNativeCSSParsing(
103106
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
104107

packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<e4946f3e524cd7571fc62c721d611d19>>
7+
* @generated SignedSource<<2e1e34437e6bd5ec998403467f1f7f3f>>
88
*/
99

1010
/**
@@ -118,6 +118,10 @@ bool ReactNativeFeatureFlags::enableMainQueueModulesOnIOS() {
118118
return getAccessor().enableMainQueueModulesOnIOS();
119119
}
120120

121+
bool ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS() {
122+
return getAccessor().enableModuleArgumentNSNullConversionIOS();
123+
}
124+
121125
bool ReactNativeFeatureFlags::enableNativeCSSParsing() {
122126
return getAccessor().enableNativeCSSParsing();
123127
}

packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @generated SignedSource<<83ef02f26eaf2d847efd7042ae6d1dfc>>
7+
* @generated SignedSource<<e50f8981168d6f1ff3f97ddeed5fcbd0>>
88
*/
99

1010
/**
@@ -154,6 +154,11 @@ class ReactNativeFeatureFlags {
154154
*/
155155
RN_EXPORT static bool enableMainQueueModulesOnIOS();
156156

157+
/**
158+
* Enable NSNull conversion when handling module arguments on iOS
159+
*/
160+
RN_EXPORT static bool enableModuleArgumentNSNullConversionIOS();
161+
157162
/**
158163
* Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
159164
*/

0 commit comments

Comments
 (0)