diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 1c0e6f5ccb4..22129cc946a 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -892,10 +892,10 @@ public final class com/facebook/react/bridge/JavaOnlyMap$Companion { public final fun of ([Ljava/lang/Object;)Lcom/facebook/react/bridge/JavaOnlyMap; } -public class com/facebook/react/bridge/JavaScriptContextHolder { +public final class com/facebook/react/bridge/JavaScriptContextHolder { public fun (J)V - public fun clear ()V - public fun get ()J + public final fun clear ()V + public final fun get ()J } public abstract class com/facebook/react/bridge/JavaScriptExecutor { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.kt index c737b5620fd..0277e17dadd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutor.kt @@ -42,7 +42,7 @@ public class HermesExecutor internal constructor(enableDebugger: Boolean, debugg private external fun initHybridDefaultConfig( enableDebugger: Boolean, debuggerName: String - ): HybridData? + ): HybridData @DoNotStrip @JvmStatic @@ -50,6 +50,6 @@ public class HermesExecutor internal constructor(enableDebugger: Boolean, debugg enableDebugger: Boolean, debuggerName: String, heapSizeMB: Long - ): HybridData? + ): HybridData } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.kt similarity index 57% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.kt index 25b9accc99e..322845b53ad 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptContextHolder.kt @@ -5,29 +5,21 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.bridge; +package com.facebook.react.bridge -import androidx.annotation.GuardedBy; +import androidx.annotation.GuardedBy /** * Wrapper for JavaScriptContext native pointer. CatalystInstanceImpl creates this on demand, and * will call clear() before destroying the VM. People who need the raw JavaScriptContext pointer can * synchronize on this wrapper object to guarantee that it will not be destroyed. */ -public class JavaScriptContextHolder { - @GuardedBy("this") - private long mContext; +public class JavaScriptContextHolder +public constructor(@field:GuardedBy("this") private var context: Long) { + @GuardedBy("this") public fun get(): Long = context - public JavaScriptContextHolder(long context) { - mContext = context; - } - - @GuardedBy("this") - public long get() { - return mContext; - } - - public synchronized void clear() { - mContext = 0; + @Synchronized + public fun clear() { + context = 0 } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.java deleted file mode 100644 index 2f01c027f75..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.java +++ /dev/null @@ -1,31 +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.jni.HybridData; -import com.facebook.proguard.annotations.DoNotStrip; - -@DoNotStrip -public abstract class JavaScriptExecutor { - private final HybridData mHybridData; - - protected JavaScriptExecutor(HybridData hybridData) { - mHybridData = hybridData; - } - - /** - * Close this executor and cleanup any resources that it was using. No further calls are expected - * after this. TODO mhorowitz: This may no longer be used; check and delete if possible. - */ - public void close() { - mHybridData.resetNative(); - } - - /** Returns the name of the executor, identifying the underlying runtime. */ - public abstract String getName(); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.kt new file mode 100644 index 00000000000..5d3866d7cd2 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptExecutor.kt @@ -0,0 +1,30 @@ +/* + * 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.jni.HybridData +import com.facebook.proguard.annotations.DoNotStripAny + +@DoNotStripAny +public abstract class JavaScriptExecutor +protected constructor( + // fbjni looks for the exact name "mHybridData": + // https://github.com/facebookincubator/fbjni/blob/7b7efda0d49b956acf1d3307510e3c73fc55b404/cxx/fbjni/detail/Hybrid.h#L310 + @Suppress("NoHungarianNotation") private val mHybridData: HybridData +) { + /** + * Close this executor and cleanup any resources that it was using. No further calls are expected + * after this. TODO mhorowitz: This may no longer be used; check and delete if possible. + */ + public open fun close() { + mHybridData.resetNative() + } + + /** Returns the name of the executor, identifying the underlying runtime. */ + public abstract fun getName(): String +}