From a74cfccc80db41d1bad2287f3adb3a68020ecd0f Mon Sep 17 00:00:00 2001 From: David Vacca Date: Thu, 11 Dec 2025 11:31:03 -0800 Subject: [PATCH] Refactor ComponentDescriptorConstructor to use a Function instead of a pointer to a method Summary: This diff refactors ComponentDescriptorConstructor to use a Function instead of a pointer to a method. changelog: [internal] internal Differential Revision: D88960360 --- .../componentregistry/ComponentDescriptorProvider.h | 5 +++-- .../componentregistry/ComponentDescriptorRegistry.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h index f1e6c7a4010..6c479dbeef4 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h @@ -18,7 +18,8 @@ namespace facebook::react { * constructor. The callable returns a unique pointer conveniently represents an * abstract type and ownership of the newly created object. */ -using ComponentDescriptorConstructor = ComponentDescriptor::Unique(const ComponentDescriptorParameters ¶meters); +using ComponentDescriptorConstructor = + std::function; /* * Represents a unified way to construct an instance of a particular stored @@ -35,7 +36,7 @@ class ComponentDescriptorProvider final { ComponentHandle handle; ComponentName name; ComponentDescriptor::Flavor flavor; - ComponentDescriptorConstructor *constructor; + ComponentDescriptorConstructor constructor; }; /* diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp index 4838b3b6013..a80a5194e2c 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp @@ -32,10 +32,11 @@ void ComponentDescriptorRegistry::add( const ComponentDescriptorProvider& componentDescriptorProvider) const { std::unique_lock lock(mutex_); - auto componentDescriptor = componentDescriptorProvider.constructor( - {.eventDispatcher = parameters_.eventDispatcher, - .contextContainer = parameters_.contextContainer, - .flavor = componentDescriptorProvider.flavor}); + auto args = ComponentDescriptorParameters{ + .eventDispatcher = parameters_.eventDispatcher, + .contextContainer = parameters_.contextContainer, + .flavor = componentDescriptorProvider.flavor}; + auto componentDescriptor = componentDescriptorProvider.constructor(args); react_native_assert( componentDescriptor->getComponentHandle() == componentDescriptorProvider.handle); @@ -45,6 +46,7 @@ void ComponentDescriptorRegistry::add( auto sharedComponentDescriptor = std::shared_ptr( std::move(componentDescriptor)); + _registryByHandle[componentDescriptorProvider.handle] = sharedComponentDescriptor; _registryByName[componentDescriptorProvider.name] = sharedComponentDescriptor;