From f441fe6d45f48993f8e38e03b65bc9e44af94439 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Fri, 7 Aug 2020 19:45:52 -0700 Subject: [PATCH] Refactor ComponentFactoryDelegate class Summary: This diff refactors the ComponentFactoryDelegate class. It also introduces a new class called ComponentRegistry that will be used to register components into fabric changelog: [internal] internal Reviewed By: JoshuaGross Differential Revision: D22985313 fbshipit-source-id: e33a3d4fcb3a1c509b80c6ff1f43889480b1c2c3 --- .../com/facebook/react/fabric/Binding.java | 6 ++--- ...oryDelegate.java => ComponentFactory.java} | 4 +-- .../react/fabric/ComponentRegistry.java | 27 +++++++++++++++++++ .../react/fabric/FabricJSIModuleProvider.java | 10 +++---- .../com/facebook/react/fabric/jni/Binding.cpp | 2 +- .../com/facebook/react/fabric/jni/Binding.h | 4 +-- ...ctoryDelegate.cpp => ComponentFactory.cpp} | 10 +++---- ...ntFactoryDelegate.h => ComponentFactory.h} | 5 ++-- .../com/facebook/react/fabric/jni/OnLoad.cpp | 3 ++- 9 files changed, 49 insertions(+), 22 deletions(-) rename ReactAndroid/src/main/java/com/facebook/react/fabric/{ComponentFactoryDelegate.java => ComponentFactory.java} (88%) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentRegistry.java rename ReactAndroid/src/main/java/com/facebook/react/fabric/jni/{ComponentFactoryDelegate.cpp => ComponentFactory.cpp} (64%) rename ReactAndroid/src/main/java/com/facebook/react/fabric/jni/{ComponentFactoryDelegate.h => ComponentFactory.h} (84%) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java index 827c59d2438..cbe49ce51d2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java @@ -38,7 +38,7 @@ public class Binding { Object uiManager, EventBeatManager eventBeatManager, MessageQueueThread jsMessageQueueThread, - ComponentFactoryDelegate componentsRegistry, + ComponentFactory componentsRegistry, Object reactNativeConfig); public native void startSurface( @@ -78,7 +78,7 @@ public class Binding { @NonNull FabricUIManager fabricUIManager, @NonNull EventBeatManager eventBeatManager, @NonNull MessageQueueThread jsMessageQueueThread, - @NonNull ComponentFactoryDelegate componentFactoryDelegate, + @NonNull ComponentFactory componentFactory, @NonNull ReactNativeConfig reactNativeConfig) { fabricUIManager.setBinding(this); installFabricUIManager( @@ -86,7 +86,7 @@ public class Binding { fabricUIManager, eventBeatManager, jsMessageQueueThread, - componentFactoryDelegate, + componentFactory, reactNativeConfig); setPixelDensity(PixelUtil.getDisplayMetricDensity()); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactoryDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactory.java similarity index 88% rename from ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactoryDelegate.java rename to ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactory.java index 28ca0f5adf5..3af759d0f35 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactoryDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentFactory.java @@ -12,7 +12,7 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; @DoNotStrip -public class ComponentFactoryDelegate { +public class ComponentFactory { static { FabricSoLoader.staticInit(); @@ -23,7 +23,7 @@ public class ComponentFactoryDelegate { @DoNotStrip private static native HybridData initHybrid(); - public ComponentFactoryDelegate() { + public ComponentFactory() { mHybridData = initHybrid(); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentRegistry.java new file mode 100644 index 00000000000..07357bc3084 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/ComponentRegistry.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.fabric; + +import com.facebook.jni.HybridData; +import com.facebook.proguard.annotations.DoNotStrip; + +/** + * This class is responsible for registrering a set of RN Android view managers into a {@link + * ComponentFactory}. + */ +public class ComponentRegistry { + + @DoNotStrip private final HybridData mHybridData; + + @DoNotStrip + private native HybridData initHybrid(ComponentFactory componentFactory); + + public ComponentRegistry(ComponentFactory componentFactory) { + mHybridData = initHybrid(componentFactory); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java index 8f3516f262b..c079b482317 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java @@ -42,15 +42,15 @@ import com.facebook.systrace.Systrace; public class FabricJSIModuleProvider implements JSIModuleProvider { @NonNull private final ReactApplicationContext mReactApplicationContext; - @NonNull private final ComponentFactoryDelegate mComponentFactoryDelegate; + @NonNull private final ComponentFactory mComponentFactory; @NonNull private final ReactNativeConfig mConfig; public FabricJSIModuleProvider( @NonNull ReactApplicationContext reactApplicationContext, - @NonNull ComponentFactoryDelegate componentFactoryDelegate, + @NonNull ComponentFactory componentFactory, @NonNull ReactNativeConfig config) { mReactApplicationContext = reactApplicationContext; - mComponentFactoryDelegate = componentFactoryDelegate; + mComponentFactory = componentFactory; mConfig = config; } @@ -74,7 +74,7 @@ public class FabricJSIModuleProvider implements JSIModuleProvider { uiManager, eventBeatManager, jsMessageQueueThread, - mComponentFactoryDelegate, + mComponentFactory, mConfig); Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); return uiManager; @@ -121,7 +121,7 @@ public class FabricJSIModuleProvider implements JSIModuleProvider { LayoutMetricsConversions.class.getClass(); MountingManager.class.getClass(); Binding.class.getClass(); - ComponentFactoryDelegate.class.getClass(); + ComponentFactory.class.getClass(); FabricComponents.class.getClass(); FabricSoLoader.class.getClass(); FabricUIManager.class.getClass(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp index d691b6f64f8..1926c956062 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp @@ -210,7 +210,7 @@ void Binding::installFabricUIManager( jni::alias_ref javaUIManager, EventBeatManager *eventBeatManager, jni::alias_ref jsMessageQueueThread, - ComponentFactoryDelegate *componentsRegistry, + ComponentFactory *componentsRegistry, jni::alias_ref reactNativeConfig) { SystraceSection s("FabricUIManagerBinding::installFabricUIManager"); diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h index f4131a9d1de..fe279817098 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h @@ -17,7 +17,7 @@ #include #include #include -#include "ComponentFactoryDelegate.h" +#include "ComponentFactory.h" #include "EventBeatManager.h" #include "JBackgroundExecutor.h" @@ -58,7 +58,7 @@ class Binding : public jni::HybridClass, jni::alias_ref javaUIManager, EventBeatManager *eventBeatManager, jni::alias_ref jsMessageQueueThread, - ComponentFactoryDelegate *componentsRegistry, + ComponentFactory *componentsRegistry, jni::alias_ref reactNativeConfig); void startSurface( diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.cpp similarity index 64% rename from ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.cpp rename to ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.cpp index a1ac6e34db6..d6f1b236e34 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.cpp @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -#include "ComponentFactoryDelegate.h" +#include "ComponentFactory.h" #include #include #include @@ -16,14 +16,14 @@ using namespace facebook::jsi; namespace facebook { namespace react { -jni::local_ref -ComponentFactoryDelegate::initHybrid(jni::alias_ref) { +jni::local_ref ComponentFactory::initHybrid( + jni::alias_ref) { return makeCxxInstance(); } -void ComponentFactoryDelegate::registerNatives() { +void ComponentFactory::registerNatives() { registerHybrid({ - makeNativeMethod("initHybrid", ComponentFactoryDelegate::initHybrid), + makeNativeMethod("initHybrid", ComponentFactory::initHybrid), }); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.h b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.h similarity index 84% rename from ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.h rename to ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.h index 33218569ce9..f3f14b0f996 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactoryDelegate.h +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/ComponentFactory.h @@ -22,11 +22,10 @@ namespace react { class Instance; -class ComponentFactoryDelegate - : public jni::HybridClass { +class ComponentFactory : public jni::HybridClass { public: constexpr static const char *const kJavaDescriptor = - "Lcom/facebook/react/fabric/ComponentFactoryDelegate;"; + "Lcom/facebook/react/fabric/ComponentFactory;"; static void registerNatives(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/OnLoad.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/OnLoad.cpp index 343e2cd6348..7d6008ccd04 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/OnLoad.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/OnLoad.cpp @@ -8,6 +8,7 @@ #include #include "Binding.h" +#include "ComponentFactory.h" #include "EventBeatManager.h" #include "EventEmitterWrapper.h" #include "StateWrapperImpl.h" @@ -18,6 +19,6 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { facebook::react::EventBeatManager::registerNatives(); facebook::react::EventEmitterWrapper::registerNatives(); facebook::react::StateWrapperImpl::registerNatives(); - facebook::react::ComponentFactoryDelegate::registerNatives(); + facebook::react::ComponentFactory::registerNatives(); }); }