Skip to content

Commit c99d6f6

Browse files
mdvaccafacebook-github-bot
authored andcommitted
Reduce dependencies on ReactHostDelegate (#37564)
Summary: Pull Request resolved: #37564 In this diff I'm refactoring ReactHostDelegate to reduce API dependencies. As part of this diff I'm also refactoring callsites to ensure everything works as expected. changelog: [internal] internal Reviewed By: cortinico, yungsters Differential Revision: D45662329 fbshipit-source-id: 1cab4331b2636b9a5d0d48085b68610153bcf0c5
1 parent 8ae0846 commit c99d6f6

File tree

6 files changed

+21
-30
lines changed

6 files changed

+21
-30
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHost.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ private Task<JSBundleLoader> getJSBundleLoader() {
945945
// Since metro is running, fetch the JS bundle from the server
946946
return loadJSBundleFromMetro();
947947
}
948-
return Task.forResult(mReactHostDelegate.getJSBundleLoader(mContext));
948+
return Task.forResult(mReactHostDelegate.getJSBundleLoader());
949949
},
950950
mBGExecutor);
951951
} else {
@@ -960,7 +960,7 @@ private Task<JSBundleLoader> getJSBundleLoader() {
960960
* throws an exception, the task will fault, and we'll go through the ReactHost error
961961
* reporting pipeline.
962962
*/
963-
return Task.call(() -> mReactHostDelegate.getJSBundleLoader(mContext));
963+
return Task.call(() -> mReactHostDelegate.getJSBundleLoader());
964964
}
965965
}
966966

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHostDelegate.kt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77

88
package com.facebook.react.bridgeless
99

10-
import android.content.Context
1110
import com.facebook.infer.annotation.ThreadSafe
1211
import com.facebook.react.ReactPackage
1312
import com.facebook.react.bridge.JSBundleLoader
1413
import com.facebook.react.bridge.ReactApplicationContext
14+
import com.facebook.react.bridge.ReactContext
1515
import com.facebook.react.common.annotations.UnstableReactNativeAPI
1616
import com.facebook.react.fabric.ReactNativeConfig
17-
import com.facebook.react.turbomodule.core.TurboModuleManager
1817
import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate
1918

2019
/** TODO: add javadoc for class and methods */
@@ -27,36 +26,33 @@ interface ReactHostDelegate {
2726

2827
val reactPackages: List<ReactPackage>
2928

30-
fun getJSBundleLoader(context: Context): JSBundleLoader
29+
val jSEngineInstance: JSEngineInstance
3130

32-
fun getTurboModuleManagerDelegate(context: ReactApplicationContext): TurboModuleManagerDelegate
31+
val jSBundleLoader: JSBundleLoader
3332

34-
fun getJSEngineInstance(context: ReactApplicationContext): JSEngineInstance
33+
fun getTurboModuleManagerDelegate(context: ReactApplicationContext): TurboModuleManagerDelegate
3534

3635
fun handleInstanceException(e: Exception)
3736

38-
// TODO: remove TurboModuleManager as a parameter
39-
fun getReactNativeConfig(turboModuleManager: TurboModuleManager): ReactNativeConfig
37+
fun getReactNativeConfig(context: ReactContext): ReactNativeConfig
4038

4139
@UnstableReactNativeAPI
4240
class ReactHostDelegateBase(
4341
override val jSMainModulePath: String,
42+
override val jSBundleLoader: JSBundleLoader,
43+
override val jSEngineInstance: JSEngineInstance,
44+
override val reactPackages: List<ReactPackage> = emptyList(),
4445
override val bindingsInstaller: BindingsInstaller? = null,
45-
override val reactPackages: List<ReactPackage>,
46-
private val jsBundleLoader: JSBundleLoader,
47-
private val turboModuleManagerDelegate: TurboModuleManagerDelegate,
48-
private val jsEngineInstance: JSEngineInstance,
46+
private val turboModuleManagerDelegate:
47+
(context: ReactApplicationContext) -> TurboModuleManagerDelegate,
4948
private val reactNativeConfig: ReactNativeConfig = ReactNativeConfig.DEFAULT_CONFIG,
5049
private val exceptionHandler: (Exception) -> Unit = {}
5150
) : ReactHostDelegate {
52-
override fun getJSBundleLoader(context: Context) = jsBundleLoader
5351

5452
override fun getTurboModuleManagerDelegate(context: ReactApplicationContext) =
55-
turboModuleManagerDelegate
56-
57-
override fun getJSEngineInstance(context: ReactApplicationContext) = jsEngineInstance
53+
turboModuleManagerDelegate(context)
5854

59-
override fun getReactNativeConfig(turboModuleManager: TurboModuleManager) = reactNativeConfig
55+
override fun getReactNativeConfig(context: ReactContext) = reactNativeConfig
6056

6157
override fun handleInstanceException(e: Exception) = exceptionHandler(e)
6258
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactInstance.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public void onHostDestroy() {
150150
}
151151
});
152152

153-
JSEngineInstance jsEngineInstance = mDelegate.getJSEngineInstance(mBridgelessReactContext);
153+
JSEngineInstance jsEngineInstance = mDelegate.getJSEngineInstance();
154154
BindingsInstaller bindingsInstaller = mDelegate.getBindingsInstaller();
155155
// Notify JS if profiling is enabled
156156
boolean isProfiling =
@@ -225,7 +225,7 @@ public Collection<String> getViewManagerNames() {
225225
mFabricUIManager =
226226
new FabricUIManager(mBridgelessReactContext, viewManagerRegistry, eventBeatManager);
227227

228-
ReactNativeConfig config = mDelegate.getReactNativeConfig(mTurboModuleManager);
228+
ReactNativeConfig config = mDelegate.getReactNativeConfig(mBridgelessReactContext);
229229

230230
// Misc initialization that needs to be done before Fabric init
231231
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(mBridgelessReactContext);
@@ -383,7 +383,7 @@ private native HybridData initHybrid(
383383
JavaTimerManager timerManager,
384384
JSTimerExecutor jsTimerExecutor,
385385
ReactJsExceptionHandler jReactExceptionsManager,
386-
BindingsInstaller jBindingsInstaller,
386+
@Nullable BindingsInstaller jBindingsInstaller,
387387
boolean isProfiling);
388388

389389
@DoNotStrip

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/hermes/HermesInstance.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import com.facebook.jni.HybridData
1111
import com.facebook.jni.annotations.DoNotStrip
1212
import com.facebook.react.bridgeless.JSEngineInstance
1313
import com.facebook.soloader.SoLoader
14-
import kotlin.jvm.JvmStatic
1514

1615
class HermesInstance() : JSEngineInstance(initHybrid()!!) {
1716

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridgeless/ReactHostDelegateTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class ReactHostDelegateTest {
4040
val delegate =
4141
ReactHostDelegate.ReactHostDelegateBase(
4242
jsMainModulePathMocked,
43-
jsBundleLoader = jsBundleLoader,
43+
jSBundleLoader = jsBundleLoader,
4444
reactPackages = reactPackages,
4545
bindingsInstaller = bindingsInstallerMock,
46-
jsEngineInstance = jsEngineInstanceMock,
46+
jSEngineInstance = jsEngineInstanceMock,
4747
reactNativeConfig = reactNativeConfigMock,
48-
turboModuleManagerDelegate = turboModuleManagerDelegateMock,
48+
turboModuleManagerDelegate = { turboModuleManagerDelegateMock },
4949
exceptionHandler = {})
5050

5151
assertThat(delegate.jSMainModulePath).isEqualTo(jsMainModulePathMocked)

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridgeless/ReactHostTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.facebook.react.MemoryPressureRouter;
2121
import com.facebook.react.bridge.JSBundleLoader;
2222
import com.facebook.react.bridge.MemoryPressureListener;
23-
import com.facebook.react.bridge.ReactApplicationContext;
2423
import com.facebook.react.bridge.UIManager;
2524
import com.facebook.react.bridgeless.internal.bolts.TaskCompletionSource;
2625
import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
@@ -32,7 +31,6 @@
3231
import org.junit.Rule;
3332
import org.junit.Test;
3433
import org.junit.runner.RunWith;
35-
import org.mockito.ArgumentMatchers;
3634
import org.powermock.core.classloader.annotations.PowerMockIgnore;
3735
import org.powermock.core.classloader.annotations.PrepareForTest;
3836
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
@@ -83,9 +81,7 @@ public void setUp() throws Exception {
8381
whenNew(MemoryPressureRouter.class).withAnyArguments().thenReturn(mMemoryPressureRouter);
8482
whenNew(BridgelessDevSupportManager.class).withAnyArguments().thenReturn(mDevSupportManager);
8583

86-
doReturn(mJSBundleLoader)
87-
.when(mReactHostDelegate)
88-
.getJSBundleLoader(ArgumentMatchers.<ReactApplicationContext>any());
84+
doReturn(mJSBundleLoader).when(mReactHostDelegate).getJSBundleLoader();
8985

9086
mReactHost =
9187
new ReactHost(

0 commit comments

Comments
 (0)