mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Extend default tmmdelegate to support many cxxreactpackages (#41680)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41680 Just like how React Native can have n ReactPackages, it will support n CxxReactPackages. This way, many applications can share common CxxReactPackages. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D51484844 fbshipit-source-id: b9b70cab719e80a7ff7e635057d710f1a86fb1c9
This commit is contained in:
committed by
Facebook GitHub Bot
parent
40c7736a1d
commit
9e4fa20b75
+9
-7
@@ -28,8 +28,8 @@ private constructor(
|
||||
context: ReactApplicationContext,
|
||||
packages: List<ReactPackage>,
|
||||
private val eagerlyInitializedModules: List<String>,
|
||||
cxxReactPackage: CxxReactPackage?,
|
||||
) : ReactPackageTurboModuleManagerDelegate(context, packages, initHybrid(cxxReactPackage)) {
|
||||
cxxReactPackages: List<CxxReactPackage>,
|
||||
) : ReactPackageTurboModuleManagerDelegate(context, packages, initHybrid(cxxReactPackages)) {
|
||||
|
||||
override fun initHybrid(): HybridData? {
|
||||
throw UnsupportedOperationException(
|
||||
@@ -47,20 +47,20 @@ private constructor(
|
||||
|
||||
class Builder : ReactPackageTurboModuleManagerDelegate.Builder() {
|
||||
private var eagerInitModuleNames: List<String> = emptyList()
|
||||
private var cxxReactPackage: CxxReactPackage? = null
|
||||
private var cxxReactPackages: MutableList<CxxReactPackage> = mutableListOf()
|
||||
|
||||
fun setEagerInitModuleNames(eagerInitModuleNames: List<String>): Builder {
|
||||
this.eagerInitModuleNames = eagerInitModuleNames
|
||||
return this
|
||||
}
|
||||
|
||||
fun setCxxReactPackage(cxxReactPackage: CxxReactPackage): Builder {
|
||||
this.cxxReactPackage = cxxReactPackage
|
||||
fun addCxxReactPackage(cxxReactPackage: CxxReactPackage): Builder {
|
||||
this.cxxReactPackages.add(cxxReactPackage)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun build(context: ReactApplicationContext, packages: List<ReactPackage>) =
|
||||
DefaultTurboModuleManagerDelegate(context, packages, eagerInitModuleNames, cxxReactPackage)
|
||||
DefaultTurboModuleManagerDelegate(context, packages, eagerInitModuleNames, cxxReactPackages)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -68,6 +68,8 @@ private constructor(
|
||||
DefaultSoLoader.maybeLoadSoLibrary()
|
||||
}
|
||||
|
||||
@DoNotStrip @JvmStatic external fun initHybrid(cxxReactPackage: CxxReactPackage?): HybridData?
|
||||
@DoNotStrip
|
||||
@JvmStatic
|
||||
external fun initHybrid(cxxReactPackages: List<CxxReactPackage>): HybridData?
|
||||
}
|
||||
}
|
||||
|
||||
+19
-6
@@ -7,13 +7,25 @@
|
||||
|
||||
#include "DefaultTurboModuleManagerDelegate.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <rncore.h>
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
DefaultTurboModuleManagerDelegate::DefaultTurboModuleManagerDelegate(
|
||||
jni::alias_ref<CxxReactPackage::javaobject> cxxReactPackage)
|
||||
: cxxReactPackage_(jni::make_global(cxxReactPackage)){};
|
||||
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>
|
||||
cxxReactPackages)
|
||||
: cxxReactPackages_() {
|
||||
cxxReactPackages_.reserve(cxxReactPackages->size());
|
||||
std::transform(
|
||||
cxxReactPackages->begin(),
|
||||
cxxReactPackages->end(),
|
||||
std::back_inserter(cxxReactPackages_),
|
||||
[](jni::alias_ref<CxxReactPackage::javaobject> elem) {
|
||||
return jni::make_global(elem);
|
||||
});
|
||||
};
|
||||
|
||||
std::function<std::shared_ptr<TurboModule>(
|
||||
const std::string&,
|
||||
@@ -28,8 +40,9 @@ std::function<std::shared_ptr<TurboModule>(
|
||||
jni::local_ref<DefaultTurboModuleManagerDelegate::jhybriddata>
|
||||
DefaultTurboModuleManagerDelegate::initHybrid(
|
||||
jni::alias_ref<jclass> jClass,
|
||||
jni::alias_ref<CxxReactPackage::javaobject> cxxReactPackage) {
|
||||
return makeCxxInstance(cxxReactPackage);
|
||||
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>
|
||||
cxxReactPackages) {
|
||||
return makeCxxInstance(cxxReactPackages);
|
||||
}
|
||||
|
||||
void DefaultTurboModuleManagerDelegate::registerNatives() {
|
||||
@@ -42,8 +55,8 @@ void DefaultTurboModuleManagerDelegate::registerNatives() {
|
||||
std::shared_ptr<TurboModule> DefaultTurboModuleManagerDelegate::getTurboModule(
|
||||
const std::string& name,
|
||||
const std::shared_ptr<CallInvoker>& jsInvoker) {
|
||||
if (cxxReactPackage_) {
|
||||
auto cppPart = cxxReactPackage_->cthis();
|
||||
for (const auto& cxxReactPackage : cxxReactPackages_) {
|
||||
auto cppPart = cxxReactPackage->cthis();
|
||||
if (cppPart) {
|
||||
auto module = cppPart->getModule(name, jsInvoker);
|
||||
if (module) {
|
||||
|
||||
+5
-3
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <ReactCommon/CxxReactPackage.h>
|
||||
#include <ReactCommon/JavaTurboModule.h>
|
||||
@@ -25,7 +26,7 @@ class DefaultTurboModuleManagerDelegate : public jni::HybridClass<
|
||||
|
||||
static jni::local_ref<jhybriddata> initHybrid(
|
||||
jni::alias_ref<jclass>,
|
||||
jni::alias_ref<CxxReactPackage::javaobject>);
|
||||
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
@@ -50,10 +51,11 @@ class DefaultTurboModuleManagerDelegate : public jni::HybridClass<
|
||||
friend HybridBase;
|
||||
using HybridBase::HybridBase;
|
||||
|
||||
jni::global_ref<CxxReactPackage::javaobject> cxxReactPackage_;
|
||||
std::vector<jni::global_ref<CxxReactPackage::javaobject>> cxxReactPackages_;
|
||||
|
||||
DefaultTurboModuleManagerDelegate(
|
||||
jni::alias_ref<CxxReactPackage::javaobject> cxxReactPackage);
|
||||
jni::alias_ref<jni::JList<CxxReactPackage::javaobject>::javaobject>
|
||||
cxxReactPackage);
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
|
||||
Reference in New Issue
Block a user