From ca5d940fe4f5540fb47319b690aa500feaabf710 Mon Sep 17 00:00:00 2001 From: Fabrizio Cucci Date: Wed, 3 Apr 2024 06:26:29 -0700 Subject: [PATCH] Kotlinify CallInvokerHolderImpl (#43796) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43796 Changelog: [Internal] As part of the Sustainability Week (see [post](https://fb.workplace.com/groups/251759413609061/permalink/742797531171911/)). Reviewed By: cortinico Differential Revision: D55655061 fbshipit-source-id: fd2c81ce91681f9f26e2b4a659b8fbae8a4b7d51 --- .../ReactAndroid/api/ReactAndroid.api | 2 +- .../turbomodule/core/NativeModuleSoLoader.kt | 6 ++-- ...lderImpl.java => CallInvokerHolderImpl.kt} | 30 ++++++++----------- 3 files changed, 16 insertions(+), 22 deletions(-) rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/{CallInvokerHolderImpl.java => CallInvokerHolderImpl.kt} (53%) diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 585734f3b5a1f9..c0d2ec9e7c9015 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -3869,7 +3869,7 @@ public abstract interface class com/facebook/react/touch/ReactInterceptingViewGr public abstract fun setOnInterceptTouchEventListener (Lcom/facebook/react/touch/OnInterceptTouchEventListener;)V } -public class com/facebook/react/turbomodule/core/CallInvokerHolderImpl : com/facebook/react/turbomodule/core/interfaces/CallInvokerHolder { +public final class com/facebook/react/turbomodule/core/CallInvokerHolderImpl : com/facebook/react/turbomodule/core/interfaces/CallInvokerHolder { } public class com/facebook/react/turbomodule/core/NativeMethodCallInvokerHolderImpl : com/facebook/react/turbomodule/core/interfaces/NativeMethodCallInvokerHolder { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/NativeModuleSoLoader.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/NativeModuleSoLoader.kt index 4d6509f01e6694..9dd54b55a5f04d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/NativeModuleSoLoader.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/NativeModuleSoLoader.kt @@ -9,13 +9,13 @@ package com.facebook.react.internal.turbomodule.core import com.facebook.soloader.SoLoader -internal class NativeModuleSoLoader { - companion object { +public class NativeModuleSoLoader { + public companion object { private var isSoLibraryLoaded = false @Synchronized @JvmStatic - fun maybeLoadSoLibrary() { + public fun maybeLoadSoLibrary() { if (!isSoLibraryLoaded) { SoLoader.loadLibrary("turbomodulejsijni") isSoLibraryLoaded = true diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.kt similarity index 53% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.kt index 455eeb840773a6..c354f46891174a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/CallInvokerHolderImpl.kt @@ -5,31 +5,25 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.turbomodule.core; +package com.facebook.react.turbomodule.core -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.common.annotations.FrameworkAPI; -import com.facebook.react.internal.turbomodule.core.NativeModuleSoLoader; -import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder; +import com.facebook.jni.HybridData +import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.react.common.annotations.FrameworkAPI +import com.facebook.react.internal.turbomodule.core.NativeModuleSoLoader +import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder /** * JSCallInvoker is created at a different time/place (i.e: in CatalystInstance) than * TurboModuleManager. Therefore, we need to wrap JSCallInvoker within a hybrid class so that we may * pass it from CatalystInstance, through Java, to TurboModuleManager::initHybrid. */ -@Nullsafe(Nullsafe.Mode.LOCAL) @FrameworkAPI -public class CallInvokerHolderImpl implements CallInvokerHolder { - - @DoNotStrip private final HybridData mHybridData; - - static { - NativeModuleSoLoader.maybeLoadSoLibrary(); - } - - private CallInvokerHolderImpl(HybridData hd) { - mHybridData = hd; +public class CallInvokerHolderImpl +private constructor(@field:DoNotStrip private val mHybridData: HybridData) : CallInvokerHolder { + private companion object { + init { + NativeModuleSoLoader.maybeLoadSoLibrary() + } } }