From 269fefb0653f54d98126d7da7b5be7a503fff8fb Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 20 May 2021 19:18:31 -0700 Subject: [PATCH] Call RCTInitializing initialize on NativeModules Summary: After D28435078, NativeModules can conform to the RCTInitializing protocol, and implement the `-(void)initialize` method. This diff makes the NativeModule system execute the module's initialize method after the infra is done setting it up. Changelog: [Internal] Reviewed By: fkgozali Differential Revision: D28435430 fbshipit-source-id: 1ce00c3fb3c63b024d7e24895ff96c541a6fa654 --- React/Base/RCTModuleData.mm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/React/Base/RCTModuleData.mm b/React/Base/RCTModuleData.mm index 47d51eda242..1a3d8839c79 100644 --- a/React/Base/RCTModuleData.mm +++ b/React/Base/RCTModuleData.mm @@ -15,6 +15,7 @@ #import "RCTBridge+Private.h" #import "RCTBridge.h" +#import "RCTInitializing.h" #import "RCTLog.h" #import "RCTModuleMethod.h" #import "RCTProfile.h" @@ -52,6 +53,7 @@ BOOL RCTIsMainQueueExecutionOfConstantsToExportDisabled() RCTViewRegistry *_viewRegistry_DEPRECATED; RCTBundleManager *_bundleManager; RCTCallableJSModules *_callableJSModules; + BOOL _isInitialized; } @synthesize methods = _methods; @@ -222,6 +224,10 @@ RCT_NOT_IMPLEMENTED(-(instancetype)init); } [self setUpMethodQueue]; + + if (shouldSetup) { + [self _initializeModule]; + } } RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @""); @@ -335,6 +341,14 @@ RCT_NOT_IMPLEMENTED(-(instancetype)init); } } +- (void)_initializeModule +{ + if (!_isInitialized && [_instance respondsToSelector:@selector(initialize)]) { + _isInitialized = YES; + [(id)_instance initialize]; + } +} + - (void)finishSetupForInstance { if (!_setupComplete && _instance) {