From 52d20659105abe2b065148b33c441941104f4d30 Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Fri, 26 May 2023 12:31:11 +0100 Subject: [PATCH] [LOCAL] Make sure Java Toolchain and source/target level is applied to all projects (#37576) --- .../kotlin/com/facebook/react/ReactPlugin.kt | 4 ++ .../react/utils/JdkConfiguratorUtils.kt | 40 +++++++++++++++++++ .../com/facebook/react/utils/PropertyUtils.kt | 18 +++++++++ 3 files changed, 62 insertions(+) create mode 100644 packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt create mode 100644 packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/PropertyUtils.kt diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt index 0aa563c9ae9f25..062dcc738a266d 100644 --- a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/ReactPlugin.kt @@ -19,6 +19,7 @@ import com.facebook.react.utils.BackwardCompatUtils.configureBackwardCompatibili import com.facebook.react.utils.DependencyUtils.configureDependencies import com.facebook.react.utils.DependencyUtils.configureRepositories import com.facebook.react.utils.DependencyUtils.readVersionAndGroupStrings +import com.facebook.react.utils.JdkConfiguratorUtils.configureJavaToolChains import com.facebook.react.utils.JsonUtils import com.facebook.react.utils.NdkConfiguratorUtils.configureReactNativeNdk import com.facebook.react.utils.ProjectUtils.needsCodegenFromPackageJson @@ -78,6 +79,9 @@ class ReactPlugin : Plugin { project.pluginManager.withPlugin("com.android.library") { configureCodegen(project, extension, rootExtension, isLibrary = true) } + + // App and Library Configurations + configureJavaToolChains(project) } private fun checkJvmVersion(project: Project) { diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt new file mode 100644 index 00000000000000..78fe1b6a13bb91 --- /dev/null +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/JdkConfiguratorUtils.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.utils + +import com.android.build.api.variant.AndroidComponentsExtension +import com.facebook.react.utils.PropertyUtils.INTERNAL_DISABLE_JAVA_VERSION_ALIGNMENT +import org.gradle.api.Action +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.api.plugins.AppliedPlugin + +internal object JdkConfiguratorUtils { + /** + * Function that takes care of configuring the JDK toolchain for all the projects projects. As we + * do decide the JDK version based on the AGP version that RNGP brings over, here we can safely + * configure the toolchain to 11. + */ + fun configureJavaToolChains(input: Project) { + if (input.hasProperty(INTERNAL_DISABLE_JAVA_VERSION_ALIGNMENT)) { + return + } + input.rootProject.allprojects { project -> + val action = + Action { + project.extensions.getByType(AndroidComponentsExtension::class.java).finalizeDsl { + ext -> + ext.compileOptions.sourceCompatibility = JavaVersion.VERSION_11 + ext.compileOptions.targetCompatibility = JavaVersion.VERSION_11 + } + } + project.pluginManager.withPlugin("com.android.application", action) + project.pluginManager.withPlugin("com.android.library", action) + } + } +} diff --git a/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/PropertyUtils.kt b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/PropertyUtils.kt new file mode 100644 index 00000000000000..3f9b5663d51ddc --- /dev/null +++ b/packages/react-native-gradle-plugin/src/main/kotlin/com/facebook/react/utils/PropertyUtils.kt @@ -0,0 +1,18 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.utils + +/** Collection of all the Gradle Propreties that are accepted by React Native Gradle Plugin. */ +object PropertyUtils { + + /** + * Internal Property that acts as a killswitch to configure the JDK version and align it for app + * and all the libraries. + */ + const val INTERNAL_DISABLE_JAVA_VERSION_ALIGNMENT = "react.internal.disableJavaVersionAlignment" +}