Skip to content

Commit f7f9cf5

Browse files
Abbondanzofacebook-github-bot
authored andcommitted
Fix Kotlin 2.3 warnings in Android Gradle builds
Summary: Kotlin 2.3 introduced warnings that fail the Android Gradle builds when warnings are treated as errors: - API version 2.0 is deprecated. Bump `apiVersion` to `KOTLIN_2_1` in the four gradle-plugin build files, as the previous Kotlin upgrade did when it moved from 1.9 to 2.0. Gradle 9, which React Native requires, ships a Kotlin 2.2 runtime, so the plugin still loads on every supported Gradle version. - `-Xjvm-default` is deprecated in favor of `-jvm-default`. Replace `-Xjvm-default=all` in `ReactAndroid` with its equivalent, `jvmDefault = JvmDefaultMode.NO_COMPATIBILITY`. - Kotlin 2.3 reports more redundant casts, non-null assertions, safe calls and Elvis operators after smart casts or on non-null platform types. Remove them in the gradle-plugin `JsonUtilsTest`, in `ReactAndroid` sources (`WritableNativeArray`, `MountItemDispatcher`, `PreAllocateViewMountItem`, `AppStateModule`, `NetworkingModule`, `UIManagerModule`, `ReactTextViewAccessibilityDelegate`) and in `ReactAndroid` unit tests (`NativeAnimatedNodeTraversalTest`, `DeviceInfoModuleTest`, `UIManagerModuleConstantsTest`). Changelog: [Android][Changed] - Bumped the Gradle plugin minimum Kotlin API version to 2.1 Reviewed By: andrewdacenko Differential Revision: D127831836
1 parent eaf4c26 commit f7f9cf5

16 files changed

Lines changed: 56 additions & 60 deletions

File tree

‎packages/gradle-plugin/react-native-gradle-plugin/build.gradle.kts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ kotlin { jvmToolchain(17) }
6363

6464
tasks.withType<KotlinCompile>().configureEach {
6565
compilerOptions {
66-
apiVersion.set(KotlinVersion.KOTLIN_2_0)
66+
apiVersion.set(KotlinVersion.KOTLIN_2_1)
6767
// See comment above on JDK 11 support
6868
jvmTarget.set(JvmTarget.JVM_11)
6969
allWarningsAsErrors.set(

‎packages/gradle-plugin/settings-plugin/build.gradle.kts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ kotlin { jvmToolchain(17) }
5353

5454
tasks.withType<KotlinCompile>().configureEach {
5555
compilerOptions {
56-
apiVersion.set(KotlinVersion.KOTLIN_2_0)
56+
apiVersion.set(KotlinVersion.KOTLIN_2_1)
5757
// See comment above on JDK 11 support
5858
jvmTarget.set(JvmTarget.JVM_11)
5959
allWarningsAsErrors.set(

‎packages/gradle-plugin/shared-testutil/build.gradle.kts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ kotlin { jvmToolchain(17) }
2424

2525
tasks.withType<KotlinCompile>().configureEach {
2626
compilerOptions {
27-
apiVersion.set(KotlinVersion.KOTLIN_2_0)
27+
apiVersion.set(KotlinVersion.KOTLIN_2_1)
2828
// See comment above on JDK 11 support
2929
jvmTarget.set(JvmTarget.JVM_11)
3030
allWarningsAsErrors.set(

‎packages/gradle-plugin/shared/build.gradle.kts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ kotlin { jvmToolchain(17) }
3030

3131
tasks.withType<KotlinCompile>().configureEach {
3232
compilerOptions {
33-
apiVersion.set(KotlinVersion.KOTLIN_2_0)
33+
apiVersion.set(KotlinVersion.KOTLIN_2_1)
3434
// See comment above on JDK 11 support
3535
jvmTarget.set(JvmTarget.JVM_11)
3636
allWarningsAsErrors.set(

‎packages/gradle-plugin/shared/src/test/kotlin/com/facebook/react/utils/JsonUtilsTest.kt‎

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ class JsonUtilsTest {
8787
val parsed = JsonUtils.fromPackageJson(validJson)!!
8888

8989
assertThat("an awesome library").isEqualTo(parsed.codegenConfig!!.name)
90-
assertThat("../js/").isEqualTo(parsed.codegenConfig!!.jsSrcsDir)
91-
assertThat("com.awesome.library").isEqualTo(parsed.codegenConfig!!.android!!.javaPackageName)
90+
assertThat("../js/").isEqualTo(parsed.codegenConfig.jsSrcsDir)
91+
assertThat("com.awesome.library").isEqualTo(parsed.codegenConfig.android!!.javaPackageName)
9292
}
9393

9494
@Test
@@ -182,13 +182,12 @@ class JsonUtilsTest {
182182
val parsed = JsonUtils.fromAutolinkingConfigJson(validJson)!!
183183

184184
assertThat("./packages/rn-tester").isEqualTo(parsed.project!!.android!!.sourceDir)
185-
assertThat("RN-Tester").isEqualTo(parsed.project!!.android!!.appName)
186-
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.packageName)
187-
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.applicationId)
188-
assertThat(".RNTesterActivity").isEqualTo(parsed.project!!.android!!.mainActivity)
189-
assertThat("--mode HermesDebug")
190-
.isEqualTo(parsed.project!!.android!!.watchModeCommandParams!![0])
191-
assertThat("implementation").isEqualTo(parsed.project!!.android!!.dependencyConfiguration)
185+
assertThat("RN-Tester").isEqualTo(parsed.project.android.appName)
186+
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project.android.packageName)
187+
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project.android.applicationId)
188+
assertThat(".RNTesterActivity").isEqualTo(parsed.project.android.mainActivity)
189+
assertThat("--mode HermesDebug").isEqualTo(parsed.project.android.watchModeCommandParams!![0])
190+
assertThat("implementation").isEqualTo(parsed.project.android.dependencyConfiguration)
192191
}
193192

194193
@Test
@@ -231,13 +230,12 @@ class JsonUtilsTest {
231230
val parsed = JsonUtils.fromAutolinkingConfigJson(validJson)!!
232231

233232
assertThat("./packages/rn-tester").isEqualTo(parsed.project!!.android!!.sourceDir)
234-
assertThat("RN-Tester").isEqualTo(parsed.project!!.android!!.appName)
235-
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.packageName)
236-
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project!!.android!!.applicationId)
237-
assertThat(".RNTesterActivity").isEqualTo(parsed.project!!.android!!.mainActivity)
238-
assertThat("--mode HermesDebug")
239-
.isEqualTo(parsed.project!!.android!!.watchModeCommandParams!![0])
240-
assertThat("implementation").isEqualTo(parsed.project!!.android!!.dependencyConfiguration)
233+
assertThat("RN-Tester").isEqualTo(parsed.project.android.appName)
234+
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project.android.packageName)
235+
assertThat("com.facebook.react.uiapp").isEqualTo(parsed.project.android.applicationId)
236+
assertThat(".RNTesterActivity").isEqualTo(parsed.project.android.mainActivity)
237+
assertThat("--mode HermesDebug").isEqualTo(parsed.project.android.watchModeCommandParams!![0])
238+
assertThat("implementation").isEqualTo(parsed.project.android.dependencyConfiguration)
241239
}
242240

243241
@Test
@@ -286,47 +284,47 @@ class JsonUtilsTest {
286284
assertThat("./node_modules/@react-native/oss-library-example")
287285
.isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.root)
288286
assertThat("@react-native/oss-library-example")
289-
.isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.name)
287+
.isEqualTo(parsed.dependencies["@react-native/oss-library-example"]!!.name)
290288
assertThat("react-native_oss-library-example")
291-
.isEqualTo(parsed.dependencies!!["@react-native/oss-library-example"]!!.nameCleansed)
289+
.isEqualTo(parsed.dependencies["@react-native/oss-library-example"]!!.nameCleansed)
292290
assertThat("./node_modules/@react-native/oss-library-example/android")
293291
.isEqualTo(
294-
parsed.dependencies!!["@react-native/oss-library-example"]!!
292+
parsed.dependencies["@react-native/oss-library-example"]!!
295293
.platforms!!
296294
.android!!
297295
.sourceDir,
298296
)
299297
assertThat("import com.facebook.react.osslibraryexample.OSSLibraryExamplePackage;")
300298
.isEqualTo(
301-
parsed.dependencies!!["@react-native/oss-library-example"]!!
299+
parsed.dependencies["@react-native/oss-library-example"]!!
302300
.platforms!!
303301
.android!!
304302
.packageImportPath,
305303
)
306304
assertThat("new OSSLibraryExamplePackage()")
307305
.isEqualTo(
308-
parsed.dependencies!!["@react-native/oss-library-example"]!!
306+
parsed.dependencies["@react-native/oss-library-example"]!!
309307
.platforms!!
310308
.android!!
311309
.packageInstance,
312310
)
313311
assertThat(listOf("staging", "debug", "release"))
314312
.isEqualTo(
315-
parsed.dependencies!!["@react-native/oss-library-example"]!!
313+
parsed.dependencies["@react-native/oss-library-example"]!!
316314
.platforms!!
317315
.android!!
318316
.buildTypes,
319317
)
320318
assertThat("OSSLibraryExampleSpec")
321319
.isEqualTo(
322-
parsed.dependencies!!["@react-native/oss-library-example"]!!
320+
parsed.dependencies["@react-native/oss-library-example"]!!
323321
.platforms!!
324322
.android!!
325323
.libraryName,
326324
)
327325
assertThat(listOf("SampleNativeComponentComponentDescriptor"))
328326
.isEqualTo(
329-
parsed.dependencies!!["@react-native/oss-library-example"]!!
327+
parsed.dependencies["@react-native/oss-library-example"]!!
330328
.platforms!!
331329
.android!!
332330
.componentDescriptors,
@@ -335,41 +333,41 @@ class JsonUtilsTest {
335333
"./node_modules/@react-native/oss-library-example/android/build/generated/source/codegen/jni/CMakeLists.txt",
336334
)
337335
.isEqualTo(
338-
parsed.dependencies!!["@react-native/oss-library-example"]!!
336+
parsed.dependencies["@react-native/oss-library-example"]!!
339337
.platforms!!
340338
.android!!
341339
.cmakeListsPath,
342340
)
343341
assertThat(
344-
parsed.dependencies!!["@react-native/oss-library-example"]!!
342+
parsed.dependencies["@react-native/oss-library-example"]!!
345343
.platforms!!
346344
.android!!
347345
.cxxModuleHeaderName,
348346
)
349347
.isNull()
350348
assertThat(
351-
parsed.dependencies!!["@react-native/oss-library-example"]!!
349+
parsed.dependencies["@react-native/oss-library-example"]!!
352350
.platforms!!
353351
.android!!
354352
.cxxModuleCMakeListsPath,
355353
)
356354
.isNull()
357355
assertThat(
358-
parsed.dependencies!!["@react-native/oss-library-example"]!!
356+
parsed.dependencies["@react-native/oss-library-example"]!!
359357
.platforms!!
360358
.android!!
361359
.cxxModuleCMakeListsModuleName,
362360
)
363361
.isNull()
364362
assertThat("implementation")
365363
.isEqualTo(
366-
parsed.dependencies!!["@react-native/oss-library-example"]!!
364+
parsed.dependencies["@react-native/oss-library-example"]!!
367365
.platforms!!
368366
.android!!
369367
.dependencyConfiguration,
370368
)
371369
assertThat(
372-
parsed.dependencies!!["@react-native/oss-library-example"]!!
370+
parsed.dependencies["@react-native/oss-library-example"]!!
373371
.platforms!!
374372
.android!!
375373
.isPureCxxDependency!!,

‎packages/react-native/ReactAndroid/build.gradle.kts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.facebook.react.tasks.internal.*
1111
import com.facebook.react.tasks.internal.utils.*
1212
import de.undercouch.gradle.tasks.download.Download
1313
import java.nio.file.Paths
14+
import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode
1415
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1516

1617
plugins {
@@ -575,8 +576,8 @@ android {
575576

576577
kotlin {
577578
compilerOptions {
578-
// Using '-Xjvm-default=all' to generate default java methods for interfaces
579-
freeCompilerArgs = listOf("-Xjvm-default=all")
579+
// Generate default java methods for interfaces
580+
jvmDefault = JvmDefaultMode.NO_COMPATIBILITY
580581
// Using -PenableWarningsAsErrors=true prop to enable allWarningsAsErrors
581582
allWarningsAsErrors = enableWarningsAsErrors()
582583
}

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ public class WritableNativeArray : ReadableNativeArray(), WritableArray {
3535
// Note: this consumes the map so do not reuse it.
3636
override fun pushArray(array: ReadableArray?) {
3737
check(array == null || array is ReadableNativeArray) { "Illegal type provided" }
38-
pushNativeArray(array as ReadableNativeArray?)
38+
pushNativeArray(array)
3939
}
4040

4141
// Note: this consumes the map so do not reuse it.
4242
override fun pushMap(map: ReadableMap?) {
4343
check(map == null || map is ReadableNativeMap) { "Illegal type provided" }
44-
pushNativeMap(map as ReadableNativeMap?)
44+
pushNativeMap(map)
4545
}
4646

4747
private external fun initHybrid()

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ internal class MountItemDispatcher(
151151
} catch (e: RetryableMountingLayerException) {
152152
if (item is DispatchCommandMountItem) {
153153
// Only DispatchCommandMountItem supports retries
154-
val mountItem: DispatchCommandMountItem = item as DispatchCommandMountItem
154+
val mountItem: DispatchCommandMountItem = item
155155
// Retrying exactly once
156156
if (mountItem.getRetries() == 0) {
157157
mountItem.incrementRetries()

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ internal class PreAllocateViewMountItem(
5959
if (FabricUIManager.IS_DEVELOPMENT_ENVIRONMENT) {
6060
result
6161
.append(" props: ")
62-
.append(props.toString() ?: "<null>")
62+
.append(props.toString())
6363
.append(" state: ")
6464
.append(stateWrapper?.toString() ?: "<null>")
6565
}

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ internal class AppStateModule(reactContext: ReactApplicationContext) :
6262
Arguments.createMap().apply { putString("app_state", appState) }
6363

6464
private fun sendEvent(eventName: String, data: Any?) {
65-
val reactApplicationContext = reactApplicationContext ?: return
6665
// We don't gain anything interesting from logging here, and it's an extremely common
6766
// race condition for an AppState event to be triggered as the Catalyst instance is being
6867
// set up or torn down. So, just fail silently here.

0 commit comments

Comments
 (0)