mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Integrate default tmm delegate with CxxReactPackage (#41464)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41464 Now, DefaultTurboModuleManagerDelegate can be created with a CxxReactPackage. If it exists, DefaultTurobModuleManager will use the CxxReactPackage to create C++-only turbo modules. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D51166524 fbshipit-source-id: 2fdc404e79213d685c4f41b2a152b68226bb71b2
This commit is contained in:
committed by
Facebook GitHub Bot
parent
a2558d15ab
commit
9fd1c6872f
+14
-2
@@ -12,6 +12,8 @@ import com.facebook.proguard.annotations.DoNotStrip
|
||||
import com.facebook.react.ReactPackage
|
||||
import com.facebook.react.ReactPackageTurboModuleManagerDelegate
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
||||
import com.facebook.react.runtime.cxxreactpackage.CxxReactPackage
|
||||
|
||||
/**
|
||||
* A utility class that allows you to simplify the setup of a
|
||||
@@ -20,14 +22,18 @@ import com.facebook.react.bridge.ReactApplicationContext
|
||||
* This class works together with the [DefaultNewArchitectureEntryPoint] and it's C++ implementation
|
||||
* is hosted inside the React Native framework
|
||||
*/
|
||||
@OptIn(UnstableReactNativeAPI::class)
|
||||
class DefaultTurboModuleManagerDelegate
|
||||
private constructor(
|
||||
context: ReactApplicationContext,
|
||||
packages: List<ReactPackage>,
|
||||
private val eagerlyInitializedModules: List<String>,
|
||||
private val cxxReactPackage: CxxReactPackage?,
|
||||
) : ReactPackageTurboModuleManagerDelegate(context, packages) {
|
||||
|
||||
@DoNotStrip external override fun initHybrid(): HybridData?
|
||||
@DoNotStrip override fun initHybrid() = initHybrid(cxxReactPackage)
|
||||
|
||||
external fun initHybrid(cxxReactPackage: CxxReactPackage?): HybridData?
|
||||
|
||||
override fun getEagerInitModuleNames(): List<String> {
|
||||
if (unstable_isLazyTurboModuleDelegate()) {
|
||||
@@ -40,14 +46,20 @@ private constructor(
|
||||
|
||||
class Builder : ReactPackageTurboModuleManagerDelegate.Builder() {
|
||||
private var eagerInitModuleNames: List<String> = emptyList()
|
||||
private var cxxReactPackage: CxxReactPackage? = null
|
||||
|
||||
fun setEagerInitModuleNames(eagerInitModuleNames: List<String>): Builder {
|
||||
this.eagerInitModuleNames = eagerInitModuleNames
|
||||
return this
|
||||
}
|
||||
|
||||
fun setCxxReactPackage(cxxReactPackage: CxxReactPackage): Builder {
|
||||
this.cxxReactPackage = cxxReactPackage
|
||||
return this
|
||||
}
|
||||
|
||||
override fun build(context: ReactApplicationContext, packages: List<ReactPackage>) =
|
||||
DefaultTurboModuleManagerDelegate(context, packages, eagerInitModuleNames)
|
||||
DefaultTurboModuleManagerDelegate(context, packages, eagerInitModuleNames, cxxReactPackage)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
||||
@@ -19,4 +19,5 @@ target_link_libraries(react_newarchdefaults
|
||||
fabricjni
|
||||
react_nativemodule_core
|
||||
react_codegen_rncore
|
||||
react_cxxreactpackage
|
||||
jsi)
|
||||
|
||||
+15
-2
@@ -11,6 +11,10 @@
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
DefaultTurboModuleManagerDelegate::DefaultTurboModuleManagerDelegate(
|
||||
jni::alias_ref<CxxReactPackage::javaobject> cxxReactPackage)
|
||||
: cxxReactPackage_(jni::make_global(cxxReactPackage)){};
|
||||
|
||||
std::function<std::shared_ptr<TurboModule>(
|
||||
const std::string&,
|
||||
const std::shared_ptr<CallInvoker>&)>
|
||||
@@ -22,8 +26,10 @@ std::function<std::shared_ptr<TurboModule>(
|
||||
DefaultTurboModuleManagerDelegate::javaModuleProvider{nullptr};
|
||||
|
||||
jni::local_ref<DefaultTurboModuleManagerDelegate::jhybriddata>
|
||||
DefaultTurboModuleManagerDelegate::initHybrid(jni::alias_ref<jhybridobject>) {
|
||||
return makeCxxInstance();
|
||||
DefaultTurboModuleManagerDelegate::initHybrid(
|
||||
jni::alias_ref<jhybridobject>,
|
||||
jni::alias_ref<CxxReactPackage::javaobject> cxxReactPackage) {
|
||||
return makeCxxInstance(cxxReactPackage);
|
||||
}
|
||||
|
||||
void DefaultTurboModuleManagerDelegate::registerNatives() {
|
||||
@@ -36,6 +42,13 @@ void DefaultTurboModuleManagerDelegate::registerNatives() {
|
||||
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
|
||||
const std::string& name,
|
||||
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
||||
if (cxxReactPackage_) {
|
||||
auto module = cxxReactPackage_->cthis()->getModule(name, jsInvoker);
|
||||
if (module) {
|
||||
return module;
|
||||
}
|
||||
}
|
||||
|
||||
auto moduleProvider = DefaultTurboModuleManagerDelegate::cxxModuleProvider;
|
||||
if (moduleProvider) {
|
||||
return moduleProvider(name, jsInvoker);
|
||||
|
||||
+9
-1
@@ -8,6 +8,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <ReactCommon/CxxReactPackage.h>
|
||||
#include <ReactCommon/JavaTurboModule.h>
|
||||
#include <ReactCommon/TurboModule.h>
|
||||
#include <ReactCommon/TurboModuleManagerDelegate.h>
|
||||
@@ -22,7 +23,9 @@ class DefaultTurboModuleManagerDelegate : public jni::HybridClass<
|
||||
static constexpr auto kJavaDescriptor =
|
||||
"Lcom/facebook/react/defaults/DefaultTurboModuleManagerDelegate;";
|
||||
|
||||
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject>);
|
||||
static jni::local_ref<jhybriddata> initHybrid(
|
||||
jni::alias_ref<jhybridobject>,
|
||||
jni::alias_ref<CxxReactPackage::javaobject>);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
@@ -46,6 +49,11 @@ class DefaultTurboModuleManagerDelegate : public jni::HybridClass<
|
||||
private:
|
||||
friend HybridBase;
|
||||
using HybridBase::HybridBase;
|
||||
|
||||
jni::global_ref<CxxReactPackage::javaobject> cxxReactPackage_;
|
||||
|
||||
DefaultTurboModuleManagerDelegate(
|
||||
jni::alias_ref<CxxReactPackage::javaobject>);
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
Reference in New Issue
Block a user