Skip to content

Commit cc3859f

Browse files
javachemeta-codesync[bot]
authored andcommitted
Remove leaked module provider maps (#54095)
Summary: Pull Request resolved: #54095 No need for fragile leaked data structures when most of the time we're comparing less than 5 elements and can just do a few inline string comparisons. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D84198064 fbshipit-source-id: 5f8638f78e7be0a9894e0176ec6825d390123a2f
1 parent b9be67e commit cc3859f

File tree

11 files changed

+219
-149
lines changed

11 files changed

+219
-149
lines changed

packages/react-native/Libraries/Blob/RCTBlobPlugins.mm

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@
1313

1414
#import "RCTBlobPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTBlobClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"BlobModule", RCTBlobManagerCls},
23-
{"FileReaderModule", RCTFileReaderModuleCls},
24-
};
25-
26-
auto p = sCoreModuleClassMap->find(name);
27-
if (p != sCoreModuleClassMap->end()) {
28-
auto classFunc = p->second;
29-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTBlobClassProvider(const char *name)
21+
{
22+
23+
if (name == "BlobModule"sv) {
24+
return RCTBlobManagerCls();
3025
}
26+
27+
if (name == "FileReaderModule"sv) {
28+
return RCTFileReaderModuleCls();
29+
}
30+
3131
return nil;
3232
}
3333

packages/react-native/Libraries/Image/RCTImagePlugins.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ extern "C" {
2929
Class RCTImageClassProvider(const char *name);
3030

3131
// Lookup functions
32+
Class RCTBundleAssetImageLoaderCls(void) __attribute__((used));
3233
Class RCTGIFImageDecoderCls(void) __attribute__((used));
3334
Class RCTImageEditingManagerCls(void) __attribute__((used));
3435
Class RCTImageLoaderCls(void) __attribute__((used));

packages/react-native/Libraries/Image/RCTImagePlugins.mm

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,37 @@
1313

1414
#import "RCTImagePlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTImageClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"GIFImageDecoder", RCTGIFImageDecoderCls},
23-
{"ImageEditingManager", RCTImageEditingManagerCls},
24-
{"ImageLoader", RCTImageLoaderCls},
25-
{"ImageStoreManager", RCTImageStoreManagerCls},
26-
{"LocalAssetImageLoader", RCTLocalAssetImageLoaderCls},
27-
};
28-
29-
auto p = sCoreModuleClassMap->find(name);
30-
if (p != sCoreModuleClassMap->end()) {
31-
auto classFunc = p->second;
32-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTImageClassProvider(const char *name)
21+
{
22+
23+
if (name == "BundleAssetImageLoader"sv) {
24+
return RCTBundleAssetImageLoaderCls();
25+
}
26+
27+
if (name == "GIFImageDecoder"sv) {
28+
return RCTGIFImageDecoderCls();
29+
}
30+
31+
if (name == "ImageEditingManager"sv) {
32+
return RCTImageEditingManagerCls();
3333
}
34+
35+
if (name == "ImageLoader"sv) {
36+
return RCTImageLoaderCls();
37+
}
38+
39+
if (name == "ImageStoreManager"sv) {
40+
return RCTImageStoreManagerCls();
41+
}
42+
43+
if (name == "LocalAssetImageLoader"sv) {
44+
return RCTLocalAssetImageLoaderCls();
45+
}
46+
3447
return nil;
3548
}
3649

packages/react-native/Libraries/LinkingIOS/RCTLinkingPlugins.mm

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,17 @@
1313

1414
#import "RCTLinkingPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTLinkingClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"LinkingManager", RCTLinkingManagerCls},
23-
};
24-
25-
auto p = sCoreModuleClassMap->find(name);
26-
if (p != sCoreModuleClassMap->end()) {
27-
auto classFunc = p->second;
28-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTLinkingClassProvider(const char *name)
21+
{
22+
23+
if (name == "LinkingManager"sv) {
24+
return RCTLinkingManagerCls();
2925
}
26+
3027
return nil;
3128
}
3229

packages/react-native/Libraries/NativeAnimation/RCTAnimationPlugins.mm

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@
1313

1414
#import "RCTAnimationPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTAnimationClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"NativeAnimatedModule", RCTNativeAnimatedModuleCls},
23-
{"NativeAnimatedTurboModule", RCTNativeAnimatedTurboModuleCls},
24-
};
25-
26-
auto p = sCoreModuleClassMap->find(name);
27-
if (p != sCoreModuleClassMap->end()) {
28-
auto classFunc = p->second;
29-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTAnimationClassProvider(const char *name)
21+
{
22+
23+
if (name == "NativeAnimatedModule"sv) {
24+
return RCTNativeAnimatedModuleCls();
3025
}
26+
27+
if (name == "NativeAnimatedTurboModule"sv) {
28+
return RCTNativeAnimatedTurboModuleCls();
29+
}
30+
3131
return nil;
3232
}
3333

packages/react-native/Libraries/Network/RCTNetworkPlugins.mm

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,29 @@
1313

1414
#import "RCTNetworkPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTNetworkClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"DataRequestHandler", RCTDataRequestHandlerCls},
23-
{"FileRequestHandler", RCTFileRequestHandlerCls},
24-
{"HTTPRequestHandler", RCTHTTPRequestHandlerCls},
25-
{"Networking", RCTNetworkingCls},
26-
};
27-
28-
auto p = sCoreModuleClassMap->find(name);
29-
if (p != sCoreModuleClassMap->end()) {
30-
auto classFunc = p->second;
31-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTNetworkClassProvider(const char *name)
21+
{
22+
23+
if (name == "DataRequestHandler"sv) {
24+
return RCTDataRequestHandlerCls();
25+
}
26+
27+
if (name == "FileRequestHandler"sv) {
28+
return RCTFileRequestHandlerCls();
3229
}
30+
31+
if (name == "HTTPRequestHandler"sv) {
32+
return RCTHTTPRequestHandlerCls();
33+
}
34+
35+
if (name == "Networking"sv) {
36+
return RCTNetworkingCls();
37+
}
38+
3339
return nil;
3440
}
3541

packages/react-native/Libraries/PushNotificationIOS/RCTPushNotificationPlugins.mm

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,17 @@
1313

1414
#import "RCTPushNotificationPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTPushNotificationClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"PushNotificationManager", RCTPushNotificationManagerCls},
23-
};
24-
25-
auto p = sCoreModuleClassMap->find(name);
26-
if (p != sCoreModuleClassMap->end()) {
27-
auto classFunc = p->second;
28-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTPushNotificationClassProvider(const char *name)
21+
{
22+
23+
if (name == "PushNotificationManager"sv) {
24+
return RCTPushNotificationManagerCls();
2925
}
26+
3027
return nil;
3128
}
3229

packages/react-native/Libraries/Settings/RCTSettingsPlugins.mm

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,17 @@
1313

1414
#import "RCTSettingsPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTSettingsClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"SettingsManager", RCTSettingsManagerCls},
23-
};
24-
25-
auto p = sCoreModuleClassMap->find(name);
26-
if (p != sCoreModuleClassMap->end()) {
27-
auto classFunc = p->second;
28-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTSettingsClassProvider(const char *name)
21+
{
22+
23+
if (name == "SettingsManager"sv) {
24+
return RCTSettingsManagerCls();
2925
}
26+
3027
return nil;
3128
}
3229

packages/react-native/Libraries/Vibration/RCTVibrationPlugins.mm

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,17 @@
1313

1414
#import "RCTVibrationPlugins.h"
1515

16-
#import <string>
17-
#import <unordered_map>
18-
19-
Class RCTVibrationClassProvider(const char *name) {
20-
// Intentionally leak to avoid crashing after static destructors are run.
21-
static const auto sCoreModuleClassMap = new const std::unordered_map<std::string, Class (*)(void)>{
22-
{"Vibration", RCTVibrationCls},
23-
};
24-
25-
auto p = sCoreModuleClassMap->find(name);
26-
if (p != sCoreModuleClassMap->end()) {
27-
auto classFunc = p->second;
28-
return classFunc();
16+
#import <string_view>
17+
18+
using namespace std::literals;
19+
20+
Class RCTVibrationClassProvider(const char *name)
21+
{
22+
23+
if (name == "Vibration"sv) {
24+
return RCTVibrationCls();
2925
}
26+
3027
return nil;
3128
}
3229

0 commit comments

Comments
 (0)