From 5a7799eead0eb26f1f42d097d89af757eb6539d1 Mon Sep 17 00:00:00 2001 From: Phillip Pan Date: Thu, 20 Apr 2023 16:26:38 -0700 Subject: [PATCH] make getModuleInstanceFromClass: required Summary: Changelog: [iOS][Breaking] continuing getting rid of optional methods, but this does have a behavioral change. if the delegate does not provide the module instance, then we lazily create it. before we were returning nil, idk why. this will be a breaking change if you have any classes that conform to `RCTTurboModuleManagerDelegate` #saynotoruntimechecks Reviewed By: cipolleschi Differential Revision: D45022139 fbshipit-source-id: 9635332caf3db7bb9306f99ee5c0d577091d38ea --- .../ios/ReactCommon/RCTTurboModuleManager.h | 6 ++--- .../ios/ReactCommon/RCTTurboModuleManager.mm | 26 +++++-------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h index ae20518aacd..23c8d93365a 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h @@ -24,13 +24,13 @@ RCT_EXTERN void RCTTurboModuleSetBindingMode(facebook::react::TurboModuleBinding */ - (Class)getModuleClassFromName:(const char *)name; -@optional - /** - * Given a module class, provide an instance for it. If not provided, default initializer is used. + * Given a module class, provide an instance for it. If nil is returned, default initializer is used. */ - (id)getModuleInstanceFromClass:(Class)moduleClass; +@optional + /** * Create an instance of a TurboModule without relying on any ObjC++ module instance. */ diff --git a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm index 9b7e0148ef2..3295a3462b4 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +++ b/packages/react-native/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm @@ -478,27 +478,13 @@ static Class getFallbackClassFromName(const char *name) */ TurboModulePerfLogger::moduleCreateConstructStart(moduleName, moduleId); - if ([_delegate respondsToSelector:@selector(getModuleInstanceFromClass:)]) { - if (RCTTurboModuleManagerDelegateLockingDisabled()) { - module = [_delegate getModuleInstanceFromClass:moduleClass]; - } else { - std::lock_guard delegateGuard(_turboModuleManagerDelegateMutex); - module = [_delegate getModuleInstanceFromClass:moduleClass]; - } - - /** - * If the application is unable to create the TurboModule object from its class: - * abort TurboModule creation, and early return nil. - */ - if (!module) { - RCTLogError( - @"TurboModuleManager delegate %@ returned nil TurboModule object for module with name=\"%s\" and class=%@", - NSStringFromClass([_delegate class]), - moduleName, - NSStringFromClass(moduleClass)); - return nil; - } + if (RCTTurboModuleManagerDelegateLockingDisabled()) { + module = [_delegate getModuleInstanceFromClass:moduleClass]; } else { + std::lock_guard delegateGuard(_turboModuleManagerDelegateMutex); + module = [_delegate getModuleInstanceFromClass:moduleClass]; + } + if (!module) { module = [moduleClass new]; } TurboModulePerfLogger::moduleCreateConstructEnd(moduleName, moduleId);