diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt index 805d065743b08f..f3f838fdd3525f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.kt @@ -8,7 +8,6 @@ package com.facebook.react import com.facebook.jni.HybridData -import com.facebook.react.bridge.CxxModuleWrapper import com.facebook.react.bridge.ModuleSpec import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext @@ -103,7 +102,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage moduleClass.name, reactModule.canOverrideExistingModule, true, - reactModule.isCxxModule, + false, ReactModuleInfo.classIsTurboModule(moduleClass), ) else @@ -112,7 +111,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage moduleClass.name, module.canOverrideExistingModule(), true, - CxxModuleWrapper::class.java.isAssignableFrom(moduleClass), + false, ReactModuleInfo.classIsTurboModule(moduleClass), ) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index 6a15edf6770983..f3e799d1417854 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -157,7 +157,6 @@ private CatalystInstanceImpl( mReactQueueConfiguration.getJSQueueThread(), mNativeModulesQueueThread, mNativeModuleRegistry.getJavaModules(this), - mNativeModuleRegistry.getCxxModules(), mInspectorTarget); FLog.d(ReactConstants.TAG, "Initializing React Xplat Bridge after initializeBridge"); Systrace.endSection(TRACE_TAG_REACT); @@ -212,13 +211,11 @@ public void extendNativeModules(NativeModuleRegistry modules) { // Extend the Java-visible registry of modules mNativeModuleRegistry.registerModules(modules); Collection javaModules = modules.getJavaModules(this); - Collection cxxModules = modules.getCxxModules(); // Extend the Cxx-visible registry of modules wrapped in appropriate interfaces - jniExtendNativeModules(javaModules, cxxModules); + jniExtendNativeModules(javaModules); } - private native void jniExtendNativeModules( - Collection javaModules, Collection cxxModules); + private native void jniExtendNativeModules(Collection javaModules); private native void initializeBridge( InstanceCallback callback, @@ -226,7 +223,6 @@ private native void initializeBridge( MessageQueueThread jsQueue, MessageQueueThread moduleQueue, Collection javaModules, - Collection cxxModules, @Nullable ReactInstanceManagerInspectorTarget inspectorTarget); @Override diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt deleted file mode 100644 index e3e65a7bf105c1..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.bridge - -import com.facebook.jni.HybridData -import com.facebook.proguard.annotations.DoNotStrip -import com.facebook.react.common.annotations.internal.InteropLegacyArchitecture -import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger - -/** This does nothing interesting, except avoid breaking existing code. */ -@DoNotStrip -@InteropLegacyArchitecture -public open class CxxModuleWrapper protected constructor(hybridData: HybridData) : - CxxModuleWrapperBase(hybridData) { - private companion object { - init { - LegacyArchitectureLogger.assertLegacyArchitecture("CxxModuleWrapper") - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt deleted file mode 100644 index 6e9ec59472f9b3..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.bridge - -import com.facebook.jni.HybridData -import com.facebook.proguard.annotations.DoNotStrip -import com.facebook.react.common.annotations.internal.InteropLegacyArchitecture -import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel -import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger - -/** - * A Java Object which represents a cross-platform C++ module - * - * This module implements the [NativeModule] interface but will never be invoked from Java, instead - * the underlying Cxx module will be extracted by the bridge and called directly. - */ -@DoNotStrip -@InteropLegacyArchitecture -public open class CxxModuleWrapperBase -protected constructor( - // For creating a wrapper from C++, or from a derived class. - @Suppress("NoHungarianNotation") @DoNotStrip private var mHybridData: HybridData -) : NativeModule { - external override fun getName(): String - - override fun initialize() { - // do nothing - } - - @Deprecated( - "The method canOverrideExistingModule is not used in the New Architecture and will be removed in a future release." - ) - override fun canOverrideExistingModule(): Boolean = false - - override fun invalidate() { - mHybridData.resetNative() - } - - // Replace the current native module held by this wrapper by a new instance - protected fun resetModule(hd: HybridData) { - if (hd !== mHybridData) { - mHybridData.resetNative() - mHybridData = hd - } - } - - private companion object { - init { - ReactNativeJNISoLoader.staticInit() - LegacyArchitectureLogger.assertLegacyArchitecture( - "CxxModuleWrapperBase", - LegacyArchitectureLogLevel.WARNING, - ) - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt index d4315652ebebf4..5d5dcc9a303a23 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.kt @@ -60,7 +60,7 @@ public class ModuleHolder { nativeModule.javaClass.simpleName, nativeModule.canOverrideExistingModule(), true, - CxxModuleWrapper::class.java.isAssignableFrom(nativeModule.javaClass), + false, ReactModuleInfo.classIsTurboModule(nativeModule.javaClass), ) @@ -108,7 +108,7 @@ public class ModuleHolder { get() = reactModuleInfo.isTurboModule public val isCxxModule: Boolean - get() = reactModuleInfo.isCxxModule + get() = false public val className: String get() = reactModuleInfo.className diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt index 9cc64c1119afb8..402379f8f96e14 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt @@ -36,25 +36,10 @@ public class NativeModuleRegistry( @JvmName("getJavaModules") // This is needed because this method is accessed by JNI internal fun getJavaModules(jsInstance: JSInstance): List = buildList { for ((_, value) in modules) { - if (!value.isCxxModule) { - add(JavaModuleWrapper(jsInstance, value)) - } + add(JavaModuleWrapper(jsInstance, value)) } } - @get:JvmName( - "getCxxModules" - ) // This is needed till there are Java Consumer of this API inside React - // Native - internal val cxxModules: List - get() = buildList { - for ((_, value) in modules) { - if (value.isCxxModule) { - add(value) - } - } - } - /** Adds any new modules to the current module registry */ @JvmName( "registerModules" diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt index dc018457ba7351..9581196b9f4b4d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt @@ -11,7 +11,6 @@ import androidx.annotation.GuardedBy import com.facebook.common.logging.FLog import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.facebook.react.bridge.CxxModuleWrapper import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.RuntimeExecutor import com.facebook.react.common.annotations.FrameworkAPI @@ -110,39 +109,7 @@ public class TurboModuleManager( } val module = getModule(moduleName) - return if (module !is CxxModuleWrapper && module !is TurboModule) module else null - } - - // used from TurboModuleManager.cpp - @Suppress("unused") - @DoNotStrip - private fun getLegacyCxxModule(moduleName: String): CxxModuleWrapper? { - /* - * This API is invoked from global.nativeModuleProxy. - * Only call getModule if the native module is a legacy module. - */ - if (!isLegacyModule(moduleName)) { - return null - } - - val module = getModule(moduleName) - return if (module is CxxModuleWrapper && module !is TurboModule) module else null - } - - // used from TurboModuleManager.cpp - @Suppress("unused") - @DoNotStrip - private fun getTurboLegacyCxxModule(moduleName: String): CxxModuleWrapper? { - /* - * This API is invoked from global.__turboModuleProxy. - * Only call getModule if the native module is a turbo module. - */ - if (!isTurboModule(moduleName)) { - return null - } - - val module = getModule(moduleName) - return if (module is CxxModuleWrapper && module is TurboModule) module else null + return if (module !is TurboModule) module else null } // used from TurboModuleManager.cpp @@ -158,7 +125,7 @@ public class TurboModuleManager( } val module = getModule(moduleName) - return if (module !is CxxModuleWrapper && module is TurboModule) module else null + return if (module is TurboModule) module else null } /** diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp index a9515165a13d24..870c105d384236 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp @@ -164,8 +164,6 @@ void CatalystInstanceImpl::initializeBridge( jni::alias_ref nativeModulesQueue, jni::alias_ref::javaobject> javaModules, - jni::alias_ref::javaobject> - cxxModules, jni::alias_ref inspectorTarget) { set_react_native_logfunc(&log); @@ -194,10 +192,7 @@ void CatalystInstanceImpl::initializeBridge( // stack. moduleRegistry_ = std::make_shared(buildNativeModuleList( - std::weak_ptr(instance_), - javaModules, - cxxModules, - moduleMessageQueue_)); + std::weak_ptr(instance_), javaModules, moduleMessageQueue_)); instance_->initializeBridge( std::make_unique(callback), @@ -211,14 +206,9 @@ void CatalystInstanceImpl::initializeBridge( void CatalystInstanceImpl::extendNativeModules( jni::alias_ref::javaobject> - javaModules, - jni::alias_ref::javaobject> - cxxModules) { + javaModules) { moduleRegistry_->registerModules(buildNativeModuleList( - std::weak_ptr(instance_), - javaModules, - cxxModules, - moduleMessageQueue_)); + std::weak_ptr(instance_), javaModules, moduleMessageQueue_)); } void CatalystInstanceImpl::jniSetSourceURL(const std::string& sourceURL) { diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h index 327c5e4583e1df..7656fa85c0fd2f 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h @@ -66,16 +66,13 @@ class [[deprecated( jni::alias_ref< jni::JCollection::javaobject> javaModules, - jni::alias_ref::javaobject> - cxxModules, jni::alias_ref inspectorTarget); void extendNativeModules( - jni::alias_ref::javaobject> javaModules, - jni::alias_ref::javaobject> - cxxModules); + jni::alias_ref< + jni::JCollection::javaobject> + javaModules); /** * Sets the source URL of the underlying bridge without loading any JS code. diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapper.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapper.h deleted file mode 100644 index 80747e18f8d5d8..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapper.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -#pragma once - -#include "CxxModuleWrapperBase.h" - -namespace facebook::react { - -class CxxModuleWrapper - : public jni::HybridClass { - public: - constexpr static const char* const kJavaDescriptor = - "Lcom/facebook/react/bridge/CxxModuleWrapper;"; - - std::string getName() override { - return module_->getName(); - } - - // This steals ownership of the underlying module for use by the C++ bridge - std::unique_ptr getModule() override { - return std::move(module_); - } - - protected: - friend HybridBase; - - explicit CxxModuleWrapper(std::unique_ptr module) - : module_(std::move(module)) {} - - std::unique_ptr module_; -}; - -} // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapperBase.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapperBase.h index dc1954f1ba3502..cc425837c9f5db 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapperBase.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/CxxModuleWrapperBase.h @@ -7,10 +7,6 @@ #pragma once -#include -#include - -#include #include namespace facebook::react { @@ -20,26 +16,4 @@ struct JNativeModule : jni::JavaClass { "Lcom/facebook/react/bridge/NativeModule;"; }; -/** - * The C++ part of a CxxModuleWrapper is not a unique class, but it - * must extend this base class. - */ -class CxxModuleWrapperBase - : public jni::HybridClass { - public: - constexpr static const char* const kJavaDescriptor = - "Lcom/facebook/react/bridge/CxxModuleWrapperBase;"; - - static void registerNatives() { - registerHybrid( - {makeNativeMethod("getName", CxxModuleWrapperBase::getName)}); - } - - // JNI method - virtual std::string getName() = 0; - - // Called by ModuleRegistryBuilder - virtual std::unique_ptr getModule() = 0; -}; - } // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp index 9aa335bc64c35d..43a791fb1081dc 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp @@ -9,7 +9,6 @@ #include -#include #include #include #include diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.cpp index c6e5bb385f4d76..341bbe55254463 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.cpp @@ -24,30 +24,13 @@ std::string ModuleHolder::getName() const { xplat::module::CxxModule::Provider ModuleHolder::getProvider( const std::string& moduleName) const { - return [self = jni::make_global(self()), moduleName] { - static auto getModule = - ModuleHolder::javaClassStatic()->getMethod( - "getModule"); - // This is the call which uses the lazy Java Provider to instantiate the - // Java CxxModuleWrapper which contains the CxxModule. - auto module = getModule(self); - - CHECK(module->isInstanceOf(CxxModuleWrapperBase::javaClassStatic())) - << "NativeModule '" << moduleName << "' isn't a C++ module"; - - auto cxxModule = - jni::static_ref_cast(module); - // Then, we grab the CxxModule from the wrapper, which is no longer needed. - return cxxModule->cthis()->getModule(); - }; + return [self = jni::make_global(self()), moduleName] { return nullptr; }; } std::vector> buildNativeModuleList( std::weak_ptr winstance, jni::alias_ref::javaobject> javaModules, - jni::alias_ref::javaobject> - cxxModules, std::shared_ptr moduleMessageQueue) { std::vector> modules; if (javaModules) { @@ -56,16 +39,6 @@ std::vector> buildNativeModuleList( winstance, jm, moduleMessageQueue)); } } - if (cxxModules) { - for (const auto& cm : *cxxModules) { - std::string moduleName = cm->getName(); - modules.emplace_back(std::make_unique( - winstance, - moduleName, - cm->getProvider(moduleName), - moduleMessageQueue)); - } - } return modules; } diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.h b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.h index 6b46cc00151264..5934f827a62829 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/ModuleRegistryBuilder.h @@ -11,7 +11,6 @@ #include #include -#include "CxxModuleWrapper.h" #include "JavaModuleWrapper.h" #ifndef RCT_REMOVE_LEGACY_ARCH @@ -37,8 +36,6 @@ std::vector> buildNativeModuleList( std::weak_ptr winstance, jni::alias_ref::javaobject> javaModules, - jni::alias_ref::javaobject> - cxxModules, std::shared_ptr moduleMessageQueue); } // namespace facebook::react diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp index b874c5b533a7e9..b1a66674505ea5 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp @@ -11,7 +11,6 @@ #include #include "CatalystInstanceImpl.h" -#include "CxxModuleWrapperBase.h" #include "InspectorNetworkRequestListener.h" #include "JavaScriptExecutorHolder.h" #include "ReactInstanceManagerInspectorTarget.h" @@ -42,7 +41,6 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) { CatalystInstanceImpl::registerNatives(); #pragma clang diagnostic pop #endif - CxxModuleWrapperBase::registerNatives(); ReactInstanceManagerInspectorTarget::registerNatives(); InspectorNetworkRequestListener::registerNatives(); }); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp index d1a8e5e447f882..8d22f4956780bc 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp @@ -17,10 +17,9 @@ #include #include #include -#include #include #include -#include +#include namespace facebook::react { @@ -163,12 +162,6 @@ std::shared_ptr TurboModuleManager::getTurboModule( auto cxxDelegate = delegate_->cthis(); - auto cxxModule = cxxDelegate->getTurboModule(name, jsCallInvoker_); - if (cxxModule) { - turboModuleCache_.insert({name, cxxModule}); - return cxxModule; - } - auto& cxxTurboModuleMapProvider = globalExportedCxxTurboModuleMap(); auto it = cxxTurboModuleMapProvider.find(name); if (it != cxxTurboModuleMapProvider.end()) { @@ -208,22 +201,6 @@ std::shared_ptr TurboModuleManager::getTurboModule( return turboModule; } - static auto getTurboLegacyCxxModule = - javaPart->getClass() - ->getMethod( - const std::string&)>("getTurboLegacyCxxModule"); - auto legacyCxxModule = getTurboLegacyCxxModule(javaPart.get(), name); - if (legacyCxxModule) { - TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName); - - auto turboModule = std::make_shared( - legacyCxxModule->cthis()->getModule(), jsCallInvoker_); - turboModuleCache_.insert({name, turboModule}); - - TurboModulePerfLogger::moduleJSRequireEndingEnd(moduleName); - return turboModule; - } - return nullptr; } @@ -260,23 +237,6 @@ std::shared_ptr TurboModuleManager::getLegacyModule( TurboModulePerfLogger::moduleJSRequireBeginningEnd(moduleName); - static auto getLegacyCxxModule = - javaPart->getClass() - ->getMethod( - const std::string&)>("getLegacyCxxModule"); - auto legacyCxxModule = getLegacyCxxModule(javaPart.get(), name); - - if (legacyCxxModule) { - TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName); - - auto turboModule = std::make_shared( - legacyCxxModule->cthis()->getModule(), jsCallInvoker_); - legacyModuleCache_.insert({name, turboModule}); - - TurboModulePerfLogger::moduleJSRequireEndingEnd(moduleName); - return turboModule; - } - static auto getLegacyJavaModule = javaPart->getClass() ->getMethod(const std::string&)>(