From 8d9bdf96f87c8a461ed6a0ae55df5e1f7a093a37 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sun, 28 Jul 2024 15:12:45 -0700 Subject: [PATCH] Migrate ReactFeatureFlags.unstable_useTurboModuleInterop to ReactNativeFeatureFlags (#45697) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45697 Migrate ReactFeatureFlags.unstable_useTurboModuleInterop to ReactNativeFeatureFlags changelog: [internal] internal Reviewed By: cortinico Differential Revision: D60274330 fbshipit-source-id: 64ec9f631b4efcdb5d46859d8d949c3309c54945 --- .../ReactAndroid/api/ReactAndroid.api | 1 - ...eactPackageTurboModuleManagerDelegate.java | 3 ++- .../react/config/ReactFeatureFlags.java | 3 --- .../DefaultNewArchitectureEntryPoint.kt | 3 ++- .../featureflags/ReactNativeFeatureFlags.kt | 8 +++++++- .../ReactNativeFeatureFlagsCxxAccessor.kt | 12 ++++++++++- .../ReactNativeFeatureFlagsCxxInterop.kt | 4 +++- .../ReactNativeFeatureFlagsDefaults.kt | 4 +++- .../ReactNativeFeatureFlagsLocalAccessor.kt | 13 +++++++++++- .../ReactNativeFeatureFlagsProvider.kt | 4 +++- .../JReactNativeFeatureFlagsCxxInterop.cpp | 16 ++++++++++++++- .../JReactNativeFeatureFlagsCxxInterop.h | 5 ++++- .../featureflags/ReactNativeFeatureFlags.cpp | 6 +++++- .../featureflags/ReactNativeFeatureFlags.h | 7 ++++++- .../ReactNativeFeatureFlagsAccessor.cpp | 20 ++++++++++++++++++- .../ReactNativeFeatureFlagsAccessor.h | 6 ++++-- .../ReactNativeFeatureFlagsDefaults.h | 6 +++++- .../ReactNativeFeatureFlagsProvider.h | 3 ++- .../NativeReactNativeFeatureFlags.cpp | 7 ++++++- .../NativeReactNativeFeatureFlags.h | 4 +++- .../ReactNativeFeatureFlags.config.js | 5 +++++ .../featureflags/ReactNativeFeatureFlags.js | 7 ++++++- .../specs/NativeReactNativeFeatureFlags.js | 3 ++- 23 files changed, 125 insertions(+), 25 deletions(-) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index be9ef55de38..407578d74d3 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -1983,7 +1983,6 @@ public class com/facebook/react/config/ReactFeatureFlags { public static field enableCppPropsIteratorSetter Z public static field enableFabricRenderer Z public static field enableViewRecycling Z - public static field unstable_useTurboModuleInterop Z public static field useTurboModules Z public fun ()V } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java index 6bfd33396c0..fa72014403d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java @@ -15,6 +15,7 @@ import com.facebook.react.bridge.ModuleSpec; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.config.ReactFeatureFlags; +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags; import com.facebook.react.internal.turbomodule.core.TurboModuleManagerDelegate; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.module.model.ReactModuleInfo; @@ -37,7 +38,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate extends TurboModule private final boolean mShouldEnableLegacyModuleInterop = ReactFeatureFlags.enableBridgelessArchitecture - && ReactFeatureFlags.unstable_useTurboModuleInterop; + && ReactNativeFeatureFlags.useTurboModuleInterop(); // Lazy Props private List mPackages; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index d77dba6d9e0..0fe096096d4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -28,9 +28,6 @@ public class ReactFeatureFlags { */ public static volatile boolean useTurboModules = false; - /** In Bridgeless mode, should legacy NativeModules use the TurboModule system? */ - public static volatile boolean unstable_useTurboModuleInterop = false; - /** * Should this application use the new (Fabric) Renderer? If yes, all rendering in this app will * use Fabric instead of the legacy renderer. diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt index 136895521a8..c78bfe03148 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt @@ -43,7 +43,6 @@ public object DefaultNewArchitectureEntryPoint { ReactFeatureFlags.useTurboModules = turboModulesEnabled ReactFeatureFlags.enableFabricRenderer = fabricEnabled ReactFeatureFlags.enableBridgelessArchitecture = bridgelessEnabled - ReactFeatureFlags.unstable_useTurboModuleInterop = bridgelessEnabled val fuseboxEnabledDebug = fuseboxEnabled if (bridgelessEnabled) { @@ -62,6 +61,8 @@ public object DefaultNewArchitectureEntryPoint { override fun fuseboxEnabledDebug(): Boolean = fuseboxEnabledDebug override fun useFabricInterop(): Boolean = fabricEnabled + + override fun useTurboModuleInterop(): Boolean = bridgelessEnabled }) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt index a952b5df26b..01d636fc042 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8d7ac9ceca277ecef106c8720263555c>> + * @generated SignedSource<> */ /** @@ -274,6 +274,12 @@ public object ReactNativeFeatureFlags { @JvmStatic public fun useStateAlignmentMechanism(): Boolean = accessor.useStateAlignmentMechanism() + /** + * In Bridgeless mode, should legacy NativeModules use the TurboModule system? + */ + @JvmStatic + public fun useTurboModuleInterop(): Boolean = accessor.useTurboModuleInterop() + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt index 5faccb89536..3f4458bc1b3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<9ba8cfb856550654e6352d3dc6bcad42>> + * @generated SignedSource<<3f751d1d0f6e07cc778b3716cc9fcc3c>> */ /** @@ -61,6 +61,7 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso private var useRuntimeShadowNodeReferenceUpdateCache: Boolean? = null private var useRuntimeShadowNodeReferenceUpdateOnLayoutCache: Boolean? = null private var useStateAlignmentMechanismCache: Boolean? = null + private var useTurboModuleInteropCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -431,6 +432,15 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso return cached } + override fun useTurboModuleInterop(): Boolean { + var cached = useTurboModuleInteropCache + if (cached == null) { + cached = ReactNativeFeatureFlagsCxxInterop.useTurboModuleInterop() + useTurboModuleInteropCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider): Unit = ReactNativeFeatureFlagsCxxInterop.override(provider as Any) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt index 4124790b295..e48c7d25b1e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<9ab73bca1d6379fe096c26b89495488c>> */ /** @@ -110,6 +110,8 @@ public object ReactNativeFeatureFlagsCxxInterop { @DoNotStrip @JvmStatic public external fun useStateAlignmentMechanism(): Boolean + @DoNotStrip @JvmStatic public external fun useTurboModuleInterop(): Boolean + @DoNotStrip @JvmStatic public external fun override(provider: Any) @DoNotStrip @JvmStatic public external fun dangerouslyReset() diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt index f36d5fda591..e72f5fcaba5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -104,4 +104,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi override fun useRuntimeShadowNodeReferenceUpdateOnLayout(): Boolean = false override fun useStateAlignmentMechanism(): Boolean = false + + override fun useTurboModuleInterop(): Boolean = false } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt index 108dbdd0081..2a6dfaae1a2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8ea93da64ada6e10f5254f99554933e0>> + * @generated SignedSource<<81072627d7bfbf2b7918921a0e9fe106>> */ /** @@ -65,6 +65,7 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces private var useRuntimeShadowNodeReferenceUpdateCache: Boolean? = null private var useRuntimeShadowNodeReferenceUpdateOnLayoutCache: Boolean? = null private var useStateAlignmentMechanismCache: Boolean? = null + private var useTurboModuleInteropCache: Boolean? = null override fun commonTestFlag(): Boolean { var cached = commonTestFlagCache @@ -476,6 +477,16 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces return cached } + override fun useTurboModuleInterop(): Boolean { + var cached = useTurboModuleInteropCache + if (cached == null) { + cached = currentProvider.useTurboModuleInterop() + accessedFeatureFlags.add("useTurboModuleInterop") + useTurboModuleInteropCache = cached + } + return cached + } + override fun override(provider: ReactNativeFeatureFlagsProvider) { if (accessedFeatureFlags.isNotEmpty()) { val accessedFeatureFlagsStr = accessedFeatureFlags.joinToString(separator = ", ") { it } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt index 1a1ffcce1f0..cf1e1c8d364 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<0224471b80d7ee0c06587f2a563420a5>> */ /** @@ -104,4 +104,6 @@ public interface ReactNativeFeatureFlagsProvider { @DoNotStrip public fun useRuntimeShadowNodeReferenceUpdateOnLayout(): Boolean @DoNotStrip public fun useStateAlignmentMechanism(): Boolean + + @DoNotStrip public fun useTurboModuleInterop(): Boolean } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp index 4c9f63439a7..e3dc0e5aff7 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<0a159023455a26eb42e1173e533f3f3b>> + * @generated SignedSource<<02df28265377b446bcb6ddd2643b0046>> */ /** @@ -285,6 +285,12 @@ class ReactNativeFeatureFlagsProviderHolder return method(javaProvider_); } + bool useTurboModuleInterop() override { + static const auto method = + getReactNativeFeatureFlagsProviderJavaClass()->getMethod("useTurboModuleInterop"); + return method(javaProvider_); + } + private: jni::global_ref javaProvider_; }; @@ -494,6 +500,11 @@ bool JReactNativeFeatureFlagsCxxInterop::useStateAlignmentMechanism( return ReactNativeFeatureFlags::useStateAlignmentMechanism(); } +bool JReactNativeFeatureFlagsCxxInterop::useTurboModuleInterop( + facebook::jni::alias_ref /*unused*/) { + return ReactNativeFeatureFlags::useTurboModuleInterop(); +} + void JReactNativeFeatureFlagsCxxInterop::override( facebook::jni::alias_ref /*unused*/, jni::alias_ref provider) { @@ -634,6 +645,9 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() { makeNativeMethod( "useStateAlignmentMechanism", JReactNativeFeatureFlagsCxxInterop::useStateAlignmentMechanism), + makeNativeMethod( + "useTurboModuleInterop", + JReactNativeFeatureFlagsCxxInterop::useTurboModuleInterop), }); } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h index 7dc8de84cf5..ec330a77c86 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> */ /** @@ -153,6 +153,9 @@ class JReactNativeFeatureFlagsCxxInterop static bool useStateAlignmentMechanism( facebook::jni::alias_ref); + static bool useTurboModuleInterop( + facebook::jni::alias_ref); + static void override( facebook::jni::alias_ref, jni::alias_ref provider); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp index 6473f38b1ce..0df33164ad4 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<68c3ef116de269b9f7c0e6eabe738cbd>> + * @generated SignedSource<> */ /** @@ -185,6 +185,10 @@ bool ReactNativeFeatureFlags::useStateAlignmentMechanism() { return getAccessor().useStateAlignmentMechanism(); } +bool ReactNativeFeatureFlags::useTurboModuleInterop() { + return getAccessor().useTurboModuleInterop(); +} + void ReactNativeFeatureFlags::override( std::unique_ptr provider) { getAccessor().override(std::move(provider)); diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h index 399fa2229a1..f0c5eb3013a 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<3776d4da056a1745d14b7f66962380d4>> */ /** @@ -242,6 +242,11 @@ class ReactNativeFeatureFlags { */ RN_EXPORT static bool useStateAlignmentMechanism(); + /** + * In Bridgeless mode, should legacy NativeModules use the TurboModule system? + */ + RN_EXPORT static bool useTurboModuleInterop(); + /** * Overrides the feature flags with the ones provided by the given provider * (generally one that extends `ReactNativeFeatureFlagsDefaults`). diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp index b7bd0709c84..6d2bfbc8225 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<0700f7b4c74e1b761c6f4a17d49d00ef>> + * @generated SignedSource<<1af5fb4f769fc2a79968dcdddb748559>> */ /** @@ -767,6 +767,24 @@ bool ReactNativeFeatureFlagsAccessor::useStateAlignmentMechanism() { return flagValue.value(); } +bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() { + auto flagValue = useTurboModuleInterop_.load(); + + if (!flagValue.has_value()) { + // This block is not exclusive but it is not necessary. + // If multiple threads try to initialize the feature flag, we would only + // be accessing the provider multiple times but the end state of this + // instance and the returned flag value would be the same. + + markFlagAsAccessed(41, "useTurboModuleInterop"); + + flagValue = currentProvider_->useTurboModuleInterop(); + useTurboModuleInterop_ = flagValue; + } + + return flagValue.value(); +} + void ReactNativeFeatureFlagsAccessor::override( std::unique_ptr provider) { if (wasOverridden_) { diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h index 69754c4497a..ace475c7c05 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<292c8d1f77702728dd6916350038b34b>> + * @generated SignedSource<<416abde5c71ed1f507a466f87a353240>> */ /** @@ -72,6 +72,7 @@ class ReactNativeFeatureFlagsAccessor { bool useRuntimeShadowNodeReferenceUpdate(); bool useRuntimeShadowNodeReferenceUpdateOnLayout(); bool useStateAlignmentMechanism(); + bool useTurboModuleInterop(); void override(std::unique_ptr provider); @@ -82,7 +83,7 @@ class ReactNativeFeatureFlagsAccessor { std::unique_ptr currentProvider_; bool wasOverridden_; - std::array, 41> accessedFeatureFlags_; + std::array, 42> accessedFeatureFlags_; std::atomic> commonTestFlag_; std::atomic> allowCollapsableChildren_; @@ -125,6 +126,7 @@ class ReactNativeFeatureFlagsAccessor { std::atomic> useRuntimeShadowNodeReferenceUpdate_; std::atomic> useRuntimeShadowNodeReferenceUpdateOnLayout_; std::atomic> useStateAlignmentMechanism_; + std::atomic> useTurboModuleInterop_; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h index 97049c13ce9..8486309240b 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<7f424c2da628f8b4e39053272056de77>> + * @generated SignedSource<<313e79efe731e50f9460af5f1640bec7>> */ /** @@ -190,6 +190,10 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider { bool useStateAlignmentMechanism() override { return false; } + + bool useTurboModuleInterop() override { + return false; + } }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h index ff6adaa58e5..76e403c1dba 100644 --- a/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<352277af59c1c5b1f8fb69ea6c56c3d1>> + * @generated SignedSource<<28afd58334a064cf48b8a93eb9a22a33>> */ /** @@ -66,6 +66,7 @@ class ReactNativeFeatureFlagsProvider { virtual bool useRuntimeShadowNodeReferenceUpdate() = 0; virtual bool useRuntimeShadowNodeReferenceUpdateOnLayout() = 0; virtual bool useStateAlignmentMechanism() = 0; + virtual bool useTurboModuleInterop() = 0; }; } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index a8a858f0f0d..ff20ede19a1 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<26a043285b837084016fd577370f1368>> + * @generated SignedSource<> */ /** @@ -242,4 +242,9 @@ bool NativeReactNativeFeatureFlags::useStateAlignmentMechanism( return ReactNativeFeatureFlags::useStateAlignmentMechanism(); } +bool NativeReactNativeFeatureFlags::useTurboModuleInterop( + jsi::Runtime& /*runtime*/) { + return ReactNativeFeatureFlags::useTurboModuleInterop(); +} + } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index 4841b62bd4c..03b0e9f72f6 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<8d65290176c9cb340a3974d07a73fc52>> + * @generated SignedSource<<885110e15bc95d518c8afde7e67d78cb>> */ /** @@ -116,6 +116,8 @@ class NativeReactNativeFeatureFlags bool useRuntimeShadowNodeReferenceUpdateOnLayout(jsi::Runtime& runtime); bool useStateAlignmentMechanism(jsi::Runtime& runtime); + + bool useTurboModuleInterop(jsi::Runtime& runtime); }; } // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 1146d3c7cf5..b239d147971 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -236,6 +236,11 @@ const definitions: FeatureFlagDefinitions = { description: 'When enabled, it uses optimised state reconciliation algorithm.', }, + useTurboModuleInterop: { + defaultValue: false, + description: + 'In Bridgeless mode, should legacy NativeModules use the TurboModule system?', + }, }, jsOnly: { diff --git a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js index 0a747a034d7..18f2045ea71 100644 --- a/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/ReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<2a851d5f14ec61936d9ecb37d7f58831>> * @flow strict-local */ @@ -85,6 +85,7 @@ export type ReactNativeFeatureFlags = { useRuntimeShadowNodeReferenceUpdate: Getter, useRuntimeShadowNodeReferenceUpdateOnLayout: Getter, useStateAlignmentMechanism: Getter, + useTurboModuleInterop: Getter, } /** @@ -311,6 +312,10 @@ export const useRuntimeShadowNodeReferenceUpdateOnLayout: Getter = crea * When enabled, it uses optimised state reconciliation algorithm. */ export const useStateAlignmentMechanism: Getter = createNativeFlagGetter('useStateAlignmentMechanism', false); +/** + * In Bridgeless mode, should legacy NativeModules use the TurboModule system? + */ +export const useTurboModuleInterop: Getter = createNativeFlagGetter('useTurboModuleInterop', false); /** * Overrides the feature flags with the provided methods. diff --git a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js index d20c75ab561..a27316cfe59 100644 --- a/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +++ b/packages/react-native/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<> * @flow strict-local */ @@ -64,6 +64,7 @@ export interface Spec extends TurboModule { +useRuntimeShadowNodeReferenceUpdate?: () => boolean; +useRuntimeShadowNodeReferenceUpdateOnLayout?: () => boolean; +useStateAlignmentMechanism?: () => boolean; + +useTurboModuleInterop?: () => boolean; } const NativeReactNativeFeatureFlags: ?Spec = TurboModuleRegistry.get(