Skip to content

Commit 28c8eab

Browse files
committed
Introduce feature flag to greacefuly fail when an unregistered component is rendered in Android (#51175)
Summary: Pull Request resolved: #51175 Introduce feature flag to greacefuly fail when an unregistered component is rendered in Android changelog: [internal] internal Reviewed By: mlord93 Differential Revision: D74333595
1 parent a4c2007 commit 28c8eab

20 files changed

Lines changed: 170 additions & 53 deletions

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

1010
/**
@@ -144,6 +144,12 @@ public object ReactNativeFeatureFlags {
144144
@JvmStatic
145145
public fun enableIOSTextBaselineOffsetPerLine(): Boolean = accessor.enableIOSTextBaselineOffsetPerLine()
146146

147+
/**
148+
* Enables gracefuly failure when an unregistered component is rendered in Android.
149+
*/
150+
@JvmStatic
151+
public fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean = accessor.enableGracefulUnregisteredComponentFailureAndroid()
152+
147153
/**
148154
* iOS Views will clip to their padding box vs border box
149155
*/

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<<62a722030e9166b231e5368f193f6f0c>>
7+
* @generated SignedSource<<e0f3b9a2aa093139da1692e205ef796e>>
88
*/
99

1010
/**
@@ -39,6 +39,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
3939
private var enableFixForParentTagDuringReparentingCache: Boolean? = null
4040
private var enableFontScaleChangesUpdatingLayoutCache: Boolean? = null
4141
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
42+
private var enableGracefulUnregisteredComponentFailureAndroidCache: Boolean? = null
4243
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
4344
private var enableIntersectionObserverEventLoopIntegrationCache: Boolean? = null
4445
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
@@ -244,6 +245,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
244245
return cached
245246
}
246247

248+
override fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean {
249+
var cached = enableGracefulUnregisteredComponentFailureAndroidCache
250+
if (cached == null) {
251+
cached = ReactNativeFeatureFlagsCxxInterop.enableGracefulUnregisteredComponentFailureAndroid()
252+
enableGracefulUnregisteredComponentFailureAndroidCache = cached
253+
}
254+
return cached
255+
}
256+
247257
override fun enableIOSViewClipToPaddingBox(): Boolean {
248258
var cached = enableIOSViewClipToPaddingBoxCache
249259
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<<39d78493b17f7abfb4220d25e663ae55>>
7+
* @generated SignedSource<<ba28175a48616955b57a2d9608b75217>>
88
*/
99

1010
/**
@@ -66,6 +66,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
6666

6767
@DoNotStrip @JvmStatic public external fun enableIOSTextBaselineOffsetPerLine(): Boolean
6868

69+
@DoNotStrip @JvmStatic public external fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean
70+
6971
@DoNotStrip @JvmStatic public external fun enableIOSViewClipToPaddingBox(): Boolean
7072

7173
@DoNotStrip @JvmStatic public external fun enableIntersectionObserverEventLoopIntegration(): 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<<830cbb41b3886b715b57c2f0c29f4623>>
7+
* @generated SignedSource<<1b936df7f2b86affb273a0054d9938c4>>
88
*/
99

1010
/**
@@ -61,6 +61,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
6161

6262
override fun enableIOSTextBaselineOffsetPerLine(): Boolean = false
6363

64+
override fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean = false
65+
6466
override fun enableIOSViewClipToPaddingBox(): Boolean = false
6567

6668
override fun enableIntersectionObserverEventLoopIntegration(): Boolean = true

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<<b755121b5c8048c7733825ceff2a4773>>
7+
* @generated SignedSource<<646cf101688413ddb4677526742d6677>>
88
*/
99

1010
/**
@@ -43,6 +43,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
4343
private var enableFixForParentTagDuringReparentingCache: Boolean? = null
4444
private var enableFontScaleChangesUpdatingLayoutCache: Boolean? = null
4545
private var enableIOSTextBaselineOffsetPerLineCache: Boolean? = null
46+
private var enableGracefulUnregisteredComponentFailureAndroidCache: Boolean? = null
4647
private var enableIOSViewClipToPaddingBoxCache: Boolean? = null
4748
private var enableIntersectionObserverEventLoopIntegrationCache: Boolean? = null
4849
private var enableLayoutAnimationsOnAndroidCache: Boolean? = null
@@ -267,6 +268,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
267268
return cached
268269
}
269270

271+
override fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean {
272+
var cached = enableGracefulUnregisteredComponentFailureAndroidCache
273+
if (cached == null) {
274+
cached = currentProvider.enableGracefulUnregisteredComponentFailureAndroid()
275+
accessedFeatureFlags.add("enableGracefulUnregisteredComponentFailureAndroid")
276+
enableGracefulUnregisteredComponentFailureAndroidCache = cached
277+
}
278+
return cached
279+
}
280+
270281
override fun enableIOSViewClipToPaddingBox(): Boolean {
271282
var cached = enableIOSViewClipToPaddingBoxCache
272283
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<<25acda9d60691c0ca5ea4776bfae594a>>
7+
* @generated SignedSource<<7848d98b460497d1c322158f89cec7b4>>
88
*/
99

1010
/**
@@ -61,6 +61,8 @@ public interface ReactNativeFeatureFlagsProvider {
6161

6262
@DoNotStrip public fun enableIOSTextBaselineOffsetPerLine(): Boolean
6363

64+
@DoNotStrip public fun enableGracefulUnregisteredComponentFailureAndroid(): Boolean
65+
6466
@DoNotStrip public fun enableIOSViewClipToPaddingBox(): Boolean
6567

6668
@DoNotStrip public fun enableIntersectionObserverEventLoopIntegration(): 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<<ddb0b0066cae098c56aa827e5ac3072c>>
7+
* @generated SignedSource<<c1a0bd5e9088fd084a9a7f253b76de14>>
88
*/
99

1010
/**
@@ -153,6 +153,12 @@ class ReactNativeFeatureFlagsJavaProvider
153153
return method(javaProvider_);
154154
}
155155

156+
bool enableGracefulUnregisteredComponentFailureAndroid() override {
157+
static const auto method =
158+
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableGracefulUnregisteredComponentFailureAndroid");
159+
return method(javaProvider_);
160+
}
161+
156162
bool enableIOSViewClipToPaddingBox() override {
157163
static const auto method =
158164
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableIOSViewClipToPaddingBox");
@@ -450,6 +456,11 @@ bool JReactNativeFeatureFlagsCxxInterop::enableIOSTextBaselineOffsetPerLine(
450456
return ReactNativeFeatureFlags::enableIOSTextBaselineOffsetPerLine();
451457
}
452458

459+
bool JReactNativeFeatureFlagsCxxInterop::enableGracefulUnregisteredComponentFailureAndroid(
460+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
461+
return ReactNativeFeatureFlags::enableGracefulUnregisteredComponentFailureAndroid();
462+
}
463+
453464
bool JReactNativeFeatureFlagsCxxInterop::enableIOSViewClipToPaddingBox(
454465
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
455466
return ReactNativeFeatureFlags::enableIOSViewClipToPaddingBox();
@@ -703,6 +714,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
703714
makeNativeMethod(
704715
"enableIOSTextBaselineOffsetPerLine",
705716
JReactNativeFeatureFlagsCxxInterop::enableIOSTextBaselineOffsetPerLine),
717+
makeNativeMethod(
718+
"enableGracefulUnregisteredComponentFailureAndroid",
719+
JReactNativeFeatureFlagsCxxInterop::enableGracefulUnregisteredComponentFailureAndroid),
706720
makeNativeMethod(
707721
"enableIOSViewClipToPaddingBox",
708722
JReactNativeFeatureFlagsCxxInterop::enableIOSViewClipToPaddingBox),

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<<3a00be0b706f3513e1aca741c55a0747>>
7+
* @generated SignedSource<<edcb0dafbb7740bfdb417f3fd78250fb>>
88
*/
99

1010
/**
@@ -87,6 +87,9 @@ class JReactNativeFeatureFlagsCxxInterop
8787
static bool enableIOSTextBaselineOffsetPerLine(
8888
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
8989

90+
static bool enableGracefulUnregisteredComponentFailureAndroid(
91+
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
92+
9093
static bool enableIOSViewClipToPaddingBox(
9194
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
9295

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<<05405c3bb41e2511ac66792eb641db5e>>
7+
* @generated SignedSource<<5415b718e13b2b4e1daee3bb6faba776>>
88
*/
99

1010
/**
@@ -102,6 +102,10 @@ bool ReactNativeFeatureFlags::enableIOSTextBaselineOffsetPerLine() {
102102
return getAccessor().enableIOSTextBaselineOffsetPerLine();
103103
}
104104

105+
bool ReactNativeFeatureFlags::enableGracefulUnregisteredComponentFailureAndroid() {
106+
return getAccessor().enableGracefulUnregisteredComponentFailureAndroid();
107+
}
108+
105109
bool ReactNativeFeatureFlags::enableIOSViewClipToPaddingBox() {
106110
return getAccessor().enableIOSViewClipToPaddingBox();
107111
}

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

1010
/**
@@ -134,6 +134,11 @@ class ReactNativeFeatureFlags {
134134
*/
135135
RN_EXPORT static bool enableIOSTextBaselineOffsetPerLine();
136136

137+
/**
138+
* Enables gracefuly failure when an unregistered component is rendered in Android.
139+
*/
140+
RN_EXPORT static bool enableGracefulUnregisteredComponentFailureAndroid();
141+
137142
/**
138143
* iOS Views will clip to their padding box vs border box
139144
*/

0 commit comments

Comments
 (0)