diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 85c5c5d0903..2588c54a127 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -1133,9 +1133,9 @@ public abstract class com/facebook/react/bridge/ReactContextBaseJavaModule : com protected final fun getCurrentActivity ()Landroid/app/Activity; } -public class com/facebook/react/bridge/ReactCxxErrorHandler { - public fun ()V - public static fun setHandleErrorFunc (Ljava/lang/Object;Ljava/lang/reflect/Method;)V +public final class com/facebook/react/bridge/ReactCxxErrorHandler { + public static final field INSTANCE Lcom/facebook/react/bridge/ReactCxxErrorHandler; + public static final fun setHandleErrorFunc (Ljava/lang/Object;Ljava/lang/reflect/Method;)V } public final class com/facebook/react/bridge/ReactIgnorableMountingException : java/lang/RuntimeException { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java deleted file mode 100644 index 13f9721490c..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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.bridge; - -import com.facebook.common.logging.FLog; -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.common.annotations.internal.LegacyArchitecture; -import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; -import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; -import java.lang.reflect.Method; - -@DoNotStrip -@LegacyArchitecture -public class ReactCxxErrorHandler { - static { - LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( - "ReactCxxErrorHandler", LegacyArchitectureLogLevel.WARNING); - } - - private static Method mHandleErrorFunc; - private static Object mObject; - - @DoNotStrip - public static void setHandleErrorFunc(Object object, Method handleErrorFunc) { - mObject = object; - mHandleErrorFunc = handleErrorFunc; - } - - @DoNotStrip - // For use from within the C++ JReactCxxErrorHandler - private static void handleError(final String message) { - if (mHandleErrorFunc != null) { - try { - Object[] parameters = new Object[1]; - parameters[0] = new Exception(message); - mHandleErrorFunc.invoke(mObject, parameters); - } catch (Exception e) { - FLog.e("ReactCxxErrorHandler", "Failed to invoke error handler function", e); - } - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.kt new file mode 100644 index 00000000000..a265c2145bf --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.kt @@ -0,0 +1,48 @@ +/* + * 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.bridge + +import com.facebook.common.logging.FLog +import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger +import java.lang.reflect.Method + +@DoNotStrip +@LegacyArchitecture +public object ReactCxxErrorHandler { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "ReactCxxErrorHandler", LegacyArchitectureLogLevel.WARNING) + } + + private var handleErrorFunc: Method? = null + private var handlerObject: Any? = null + + @DoNotStrip + @JvmStatic + public fun setHandleErrorFunc(handlerObject: Any?, handleErrorFunc: Method?) { + this.handlerObject = handlerObject + this.handleErrorFunc = handleErrorFunc + } + + @DoNotStrip + @JvmStatic + // For use from within the C++ JReactCxxErrorHandler + private fun handleError(message: String) { + handleErrorFunc?.let { + try { + val parameters = arrayOf(Exception(message)) + it.invoke(handlerObject, parameters) + } catch (e: Exception) { + FLog.e("ReactCxxErrorHandler", "Failed to invoke error handler function", e) + } + } + } +}