From 325e1e3f8c124a6b64d40d8ae3546992cce35792 Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Tue, 27 Aug 2024 11:25:05 +0200 Subject: [PATCH 1/3] perf: skip getting package class name inside expo module --- .../src/config/findPackageClassName.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/cli-platform-android/src/config/findPackageClassName.ts b/packages/cli-platform-android/src/config/findPackageClassName.ts index 39cdd7ff0..e025f6e62 100644 --- a/packages/cli-platform-android/src/config/findPackageClassName.ts +++ b/packages/cli-platform-android/src/config/findPackageClassName.ts @@ -32,6 +32,35 @@ export default function getPackageClassName(folder: string) { let files = getMainActivityFiles(folder); let packages = getClassNameMatches(files, folder); + /* + When module contains `expo-module.config.json` we return null + because expo modules follow other practices and don't implement + ReactPackage/TurboReactPackage directly, so it doesn't make sense + to scan and read hundreds of files to get package class name. + + Exception is `expo` package itself which contains `expo-module.config.json` + and implements `ReactPackage/TurboReactPackage` inside `ExpoModulesPackage.kt`. + + Following logic is done due to performance optimization. + */ + + if ( + fs.existsSync(path.join(folder, '..', 'expo-module.config.json')) && + !fs.existsSync( + path.join( + folder, + 'src', + 'main', + 'java', + 'expo', + 'modules', + 'ExpoModulesPackage.kt', + ), + ) + ) { + return null; + } + if (!packages.length) { files = getMainActivityFiles(folder, false); packages = getClassNameMatches(files, folder); From 1b27d05d5fc6d9569a267ff5f759535ffe54f69e Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Tue, 27 Aug 2024 12:05:33 +0200 Subject: [PATCH 2/3] fix: move early return --- .../cli-platform-android/src/config/findPackageClassName.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli-platform-android/src/config/findPackageClassName.ts b/packages/cli-platform-android/src/config/findPackageClassName.ts index e025f6e62..30365dc5c 100644 --- a/packages/cli-platform-android/src/config/findPackageClassName.ts +++ b/packages/cli-platform-android/src/config/findPackageClassName.ts @@ -29,9 +29,6 @@ export function getMainActivityFiles( } export default function getPackageClassName(folder: string) { - let files = getMainActivityFiles(folder); - let packages = getClassNameMatches(files, folder); - /* When module contains `expo-module.config.json` we return null because expo modules follow other practices and don't implement @@ -61,6 +58,9 @@ export default function getPackageClassName(folder: string) { return null; } + let files = getMainActivityFiles(folder); + let packages = getClassNameMatches(files, folder); + if (!packages.length) { files = getMainActivityFiles(folder, false); packages = getClassNameMatches(files, folder); From 21af361dd675a20b59305d6aa58779be26bfa342 Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Tue, 27 Aug 2024 17:13:32 +0200 Subject: [PATCH 3/3] fix: replace condition validating expo package with `*Package.kt/java` check --- .../src/config/findPackageClassName.ts | 33 +++++++------------ 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/packages/cli-platform-android/src/config/findPackageClassName.ts b/packages/cli-platform-android/src/config/findPackageClassName.ts index 30365dc5c..5903efa62 100644 --- a/packages/cli-platform-android/src/config/findPackageClassName.ts +++ b/packages/cli-platform-android/src/config/findPackageClassName.ts @@ -29,6 +29,13 @@ export function getMainActivityFiles( } export default function getPackageClassName(folder: string) { + let files = getMainActivityFiles(folder); + let packages = getClassNameMatches(files, folder); + + if (packages && packages.length > 0 && Array.isArray(packages[0])) { + return packages[0][1]; + } + /* When module contains `expo-module.config.json` we return null because expo modules follow other practices and don't implement @@ -36,35 +43,17 @@ export default function getPackageClassName(folder: string) { to scan and read hundreds of files to get package class name. Exception is `expo` package itself which contains `expo-module.config.json` - and implements `ReactPackage/TurboReactPackage` inside `ExpoModulesPackage.kt`. + and implements `ReactPackage/TurboReactPackage`. Following logic is done due to performance optimization. */ - if ( - fs.existsSync(path.join(folder, '..', 'expo-module.config.json')) && - !fs.existsSync( - path.join( - folder, - 'src', - 'main', - 'java', - 'expo', - 'modules', - 'ExpoModulesPackage.kt', - ), - ) - ) { + if (fs.existsSync(path.join(folder, '..', 'expo-module.config.json'))) { return null; } - let files = getMainActivityFiles(folder); - let packages = getClassNameMatches(files, folder); - - if (!packages.length) { - files = getMainActivityFiles(folder, false); - packages = getClassNameMatches(files, folder); - } + files = getMainActivityFiles(folder, false); + packages = getClassNameMatches(files, folder); // @ts-ignore return packages.length ? packages[0][1] : null;