From c45d450502aa73497d545838b7bc0458b3fa7d41 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 8 Jul 2024 09:38:29 -0700 Subject: [PATCH] Upstream CLI autolinking changes to RNGP (#45314) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45314 Fixes https://github.com/facebook/react-native/issues/45302 I'm ustreaming two changes that happened inside the CLI/Autolinking logic that are missing inside core autolinking. Changelog: [Internal] [Changed] - Upstream CLI autolinking changes to RNGP Reviewed By: blakef Differential Revision: D59460504 fbshipit-source-id: a6e7ab6a46fec26620dc965e77b13fdeba84fae3 --- .../react/tasks/GeneratePackageListTask.kt | 2 ++ .../tasks/GeneratePackageListTaskTest.kt | 27 +++++++++++++++++++ .../facebook/react/ReactSettingsExtension.kt | 2 ++ .../react/ReactSettingsExtensionTest.kt | 3 ++- ...olinkingDependenciesPlatformAndroidJson.kt | 3 ++- .../com/facebook/react/utils/JsonUtilsTest.kt | 8 +++++- 6 files changed, 42 insertions(+), 3 deletions(-) diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt index 6d3d7a0e1ec..0d47c5131b1 100644 --- a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt +++ b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/tasks/GeneratePackageListTask.kt @@ -85,6 +85,8 @@ abstract class GeneratePackageListTask : DefaultTask() { val packages = model?.dependencies?.values ?: emptyList() return packages .filter { it.platforms?.android != null } + // The pure C++ dependencies won't have a .java/.kt file to import + .filterNot { it.platforms?.android?.isPureCxxDependency == true } .associate { it.name to checkNotNull(it.platforms?.android) } } diff --git a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt index 1b320c9c650..eb26475a5c7 100644 --- a/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt +++ b/packages/react-native-gradle-plugin/react-native-gradle-plugin/src/test/kotlin/com/facebook/react/tasks/GeneratePackageListTaskTest.kt @@ -177,6 +177,33 @@ class GeneratePackageListTaskTest { assertEquals(android, result["a-dependency"]) } + @Test + fun filterAndroidPackages_withIsPureCxxDependencyObject_returnsIt() { + val task = createTestTask() + val android = + ModelAutolinkingDependenciesPlatformAndroidJson( + sourceDir = "./a/directory/android", + packageImportPath = "import com.facebook.react.aPackage;", + packageInstance = "new APackage()", + buildTypes = emptyList(), + isPureCxxDependency = true) + + val result = + task.filterAndroidPackages( + ModelAutolinkingConfigJson( + reactNativeVersion = "1000.0.0", + dependencies = + mapOf( + "a-pure-cxx-dependency" to + ModelAutolinkingDependenciesJson( + root = "./a/directory", + name = "a-pure-cxx-dependency", + platforms = + ModelAutolinkingDependenciesPlatformJson(android = android))), + project = null)) + assertEquals(emptyMap(), result) + } + @Test fun composeFileContent_withNoPackages_returnsValidFile() { val task = createTestTask() diff --git a/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt b/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt index 1f95be43816..9950a0b7fde 100644 --- a/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt +++ b/packages/react-native-gradle-plugin/settings-plugin/src/main/kotlin/com/facebook/react/ReactSettingsExtension.kt @@ -135,6 +135,8 @@ abstract class ReactSettingsExtension @Inject constructor(val settings: Settings // We handle scenarios where there are deps that are // iOS-only or missing the Android configs. ?.filter { it.platforms?.android?.sourceDir != null } + // We want to skip dependencies that are pure C++ as they won't contain a .gradle file. + ?.filterNot { it.platforms?.android?.isPureCxxDependency == true } ?.associate { deps -> ":${deps.nameCleansed}" to File(deps.platforms?.android?.sourceDir) } ?: emptyMap() diff --git a/packages/react-native-gradle-plugin/settings-plugin/src/test/kotlin/com/facebook/react/ReactSettingsExtensionTest.kt b/packages/react-native-gradle-plugin/settings-plugin/src/test/kotlin/com/facebook/react/ReactSettingsExtensionTest.kt index 72d687b2ef5..3f89e1b935c 100644 --- a/packages/react-native-gradle-plugin/settings-plugin/src/test/kotlin/com/facebook/react/ReactSettingsExtensionTest.kt +++ b/packages/react-native-gradle-plugin/settings-plugin/src/test/kotlin/com/facebook/react/ReactSettingsExtensionTest.kt @@ -86,7 +86,8 @@ class ReactSettingsExtensionTest { "cxxModuleCMakeListsModuleName": null, "cxxModuleCMakeListsPath": null, "cxxModuleHeaderName": null, - "dependencyConfiguration": "implementation" + "dependencyConfiguration": "implementation", + "isPureCxxDependency": false } } } diff --git a/packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/model/ModelAutolinkingDependenciesPlatformAndroidJson.kt b/packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/model/ModelAutolinkingDependenciesPlatformAndroidJson.kt index 7729ab852e5..5285d763174 100644 --- a/packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/model/ModelAutolinkingDependenciesPlatformAndroidJson.kt +++ b/packages/react-native-gradle-plugin/shared/src/main/kotlin/com/facebook/react/model/ModelAutolinkingDependenciesPlatformAndroidJson.kt @@ -18,5 +18,6 @@ data class ModelAutolinkingDependenciesPlatformAndroidJson( val cxxModuleCMakeListsModuleName: String? = null, val cxxModuleCMakeListsPath: String? = null, val cxxModuleHeaderName: String? = null, - val dependencyConfiguration: String? = null + val dependencyConfiguration: String? = null, + val isPureCxxDependency: Boolean? = null ) diff --git a/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt b/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt index db73bbc762f..ac995f680cf 100644 --- a/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt +++ b/packages/react-native-gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt @@ -216,7 +216,8 @@ class JsonUtilsTest { "cxxModuleCMakeListsModuleName": null, "cxxModuleCMakeListsPath": null, "cxxModuleHeaderName": null, - "dependencyConfiguration": "implementation" + "dependencyConfiguration": "implementation", + "isPureCxxDependency": false } } } @@ -298,6 +299,11 @@ class JsonUtilsTest { .platforms!! .android!! .dependencyConfiguration) + assertFalse( + parsed.dependencies!!["@react-native/oss-library-example"]!! + .platforms!! + .android!! + .isPureCxxDependency!!) } private fun createJsonFile(@Language("JSON") input: String) =