Skip to content

Commit 4a4fd1c

Browse files
zhongwuzwfacebook-github-bot
authored andcommitted
Turbo module: Fixes dictionary stripped out when value is null (#51103)
Summary: Fixes #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 #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: #51103 Test Plan: Repro please see #51083. Reviewed By: rshest Differential Revision: D74208525 Pulled By: javache fbshipit-source-id: 53d630c265fba15d25309a3e1deb19dca24f298c
1 parent 6ff500d commit 4a4fd1c

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<<62715a19c87a010716eb7d2e904258fa>>
7+
* @generated SignedSource<<a5552614b746c732adb88a6640a7951a>>
88
*/
99

1010
/**
@@ -174,6 +174,12 @@ public object ReactNativeFeatureFlags {
174174
@JvmStatic
175175
public fun enableMainQueueModulesOnIOS(): Boolean = accessor.enableMainQueueModulesOnIOS()
176176

177+
/**
178+
* Enable NSNull conversion when handling module arguments on iOS
179+
*/
180+
@JvmStatic
181+
public fun enableModuleArgumentNSNullConversionIOS(): Boolean = accessor.enableModuleArgumentNSNullConversionIOS()
182+
177183
/**
178184
* Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
179185
*/

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<<53e2f9241b9b3396b1ddf5893c7f3c4e>>
7+
* @generated SignedSource<<4665e190f626b377f37e14c1c19f809d>>
88
*/
99

1010
/**
@@ -44,6 +44,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
4444
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
4545
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
4646
private var enableMainQueueModulesOnIOSCache: Boolean? = null
47+
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
4748
private var enableNativeCSSParsingCache: Boolean? = null
4849
private var enableNetworkEventReportingCache: Boolean? = null
4950
private var enableNewBackgroundAndBorderDrawablesCache: Boolean? = null
@@ -287,6 +288,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
287288
return cached
288289
}
289290

291+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
292+
var cached = enableModuleArgumentNSNullConversionIOSCache
293+
if (cached == null) {
294+
cached = ReactNativeFeatureFlagsCxxInterop.enableModuleArgumentNSNullConversionIOS()
295+
enableModuleArgumentNSNullConversionIOSCache = cached
296+
}
297+
return cached
298+
}
299+
290300
override fun enableNativeCSSParsing(): Boolean {
291301
var cached = enableNativeCSSParsingCache
292302
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<<918dcdb416bb3e2e3f83cded78e06363>>
7+
* @generated SignedSource<<b68166d039f6214ff09dc30a742ebbf9>>
88
*/
99

1010
/**
@@ -76,6 +76,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
7676

7777
@DoNotStrip @JvmStatic public external fun enableMainQueueModulesOnIOS(): Boolean
7878

79+
@DoNotStrip @JvmStatic public external fun enableModuleArgumentNSNullConversionIOS(): Boolean
80+
7981
@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean
8082

8183
@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<<7151e167c4e45a732a341a2cfcf67b58>>
7+
* @generated SignedSource<<fcee66a9800d5b3b1105df73d33feea9>>
88
*/
99

1010
/**
@@ -71,6 +71,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
7171

7272
override fun enableMainQueueModulesOnIOS(): Boolean = false
7373

74+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean = true
75+
7476
override fun enableNativeCSSParsing(): Boolean = false
7577

7678
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<<d2f4ae1cd4e33cb59903c3b2c3ef0fc2>>
7+
* @generated SignedSource<<ebf6d5811f40eedd906c015283f5757f>>
88
*/
99

1010
/**
@@ -48,6 +48,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
4848
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
4949
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
5050
private var enableMainQueueModulesOnIOSCache: Boolean? = null
51+
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
5152
private var enableNativeCSSParsingCache: Boolean? = null
5253
private var enableNetworkEventReportingCache: Boolean? = null
5354
private var enableNewBackgroundAndBorderDrawablesCache: Boolean? = null
@@ -315,6 +316,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
315316
return cached
316317
}
317318

319+
override fun enableModuleArgumentNSNullConversionIOS(): Boolean {
320+
var cached = enableModuleArgumentNSNullConversionIOSCache
321+
if (cached == null) {
322+
cached = currentProvider.enableModuleArgumentNSNullConversionIOS()
323+
accessedFeatureFlags.add("enableModuleArgumentNSNullConversionIOS")
324+
enableModuleArgumentNSNullConversionIOSCache = cached
325+
}
326+
return cached
327+
}
328+
318329
override fun enableNativeCSSParsing(): Boolean {
319330
var cached = enableNativeCSSParsingCache
320331
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<<722ed5b36a043d4eadb095f092c95707>>
7+
* @generated SignedSource<<1e5562ce20c0735c926c1cb029b93e18>>
88
*/
99

1010
/**
@@ -71,6 +71,8 @@ public interface ReactNativeFeatureFlagsProvider {
7171

7272
@DoNotStrip public fun enableMainQueueModulesOnIOS(): Boolean
7373

74+
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
75+
7476
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
7577

7678
@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<<422a5922cfe14a1c5f7c0728410dbe8a>>
7+
* @generated SignedSource<<078954ede626079b7d36ab63cdbab761>>
88
*/
99

1010
/**
@@ -183,6 +183,12 @@ class ReactNativeFeatureFlagsJavaProvider
183183
return method(javaProvider_);
184184
}
185185

186+
bool enableModuleArgumentNSNullConversionIOS() override {
187+
static const auto method =
188+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableModuleArgumentNSNullConversionIOS");
189+
return method(javaProvider_);
190+
}
191+
186192
bool enableNativeCSSParsing() override {
187193
static const auto method =
188194
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableNativeCSSParsing");
@@ -463,6 +469,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS(
463469
return ReactNativeFeatureFlags::enableMainQueueModulesOnIOS();
464470
}
465471

472+
bool JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS(
473+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
474+
return ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS();
475+
}
476+
466477
bool JReactNativeFeatureFlagsCxxInterop::enableNativeCSSParsing(
467478
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
468479
return ReactNativeFeatureFlags::enableNativeCSSParsing();
@@ -696,6 +707,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
696707
makeNativeMethod(
697708
"enableMainQueueModulesOnIOS",
698709
JReactNativeFeatureFlagsCxxInterop::enableMainQueueModulesOnIOS),
710+
makeNativeMethod(
711+
"enableModuleArgumentNSNullConversionIOS",
712+
JReactNativeFeatureFlagsCxxInterop::enableModuleArgumentNSNullConversionIOS),
699713
makeNativeMethod(
700714
"enableNativeCSSParsing",
701715
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<<18d7c9c2577450a0bb7e6da91b8597ed>>
7+
* @generated SignedSource<<083e45ab99622254be46213ba07c586b>>
88
*/
99

1010
/**
@@ -102,6 +102,9 @@ class JReactNativeFeatureFlagsCxxInterop
102102
static bool enableMainQueueModulesOnIOS(
103103
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
104104

105+
static bool enableModuleArgumentNSNullConversionIOS(
106+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107+
105108
static bool enableNativeCSSParsing(
106109
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
107110

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<<9f34463a7cddcfd1a76631041297c4b7>>
7+
* @generated SignedSource<<c099ce4bba5f6d14a83ad69a0fb3cbbf>>
88
*/
99

1010
/**
@@ -122,6 +122,10 @@ bool ReactNativeFeatureFlags::enableMainQueueModulesOnIOS() {
122122
return getAccessor().enableMainQueueModulesOnIOS();
123123
}
124124

125+
bool ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS() {
126+
return getAccessor().enableModuleArgumentNSNullConversionIOS();
127+
}
128+
125129
bool ReactNativeFeatureFlags::enableNativeCSSParsing() {
126130
return getAccessor().enableNativeCSSParsing();
127131
}

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<<cb84333e310cfc1a6a77f1b376723e93>>
7+
* @generated SignedSource<<ac9a0bc61f58cce6fe9d229c551dc3f7>>
88
*/
99

1010
/**
@@ -159,6 +159,11 @@ class ReactNativeFeatureFlags {
159159
*/
160160
RN_EXPORT static bool enableMainQueueModulesOnIOS();
161161

162+
/**
163+
* Enable NSNull conversion when handling module arguments on iOS
164+
*/
165+
RN_EXPORT static bool enableModuleArgumentNSNullConversionIOS();
166+
162167
/**
163168
* Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing
164169
*/

0 commit comments

Comments
 (0)