Reduce dependencies on ReactHostDelegate (#37564)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/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
This commit is contained in:
Родитель
8ae084675b
Коммит
c99d6f6077
|
@ -945,7 +945,7 @@ public class ReactHost {
|
|||
// Since metro is running, fetch the JS bundle from the server
|
||||
return loadJSBundleFromMetro();
|
||||
}
|
||||
return Task.forResult(mReactHostDelegate.getJSBundleLoader(mContext));
|
||||
return Task.forResult(mReactHostDelegate.getJSBundleLoader());
|
||||
},
|
||||
mBGExecutor);
|
||||
} else {
|
||||
|
@ -960,7 +960,7 @@ public class ReactHost {
|
|||
* throws an exception, the task will fault, and we'll go through the ReactHost error
|
||||
* reporting pipeline.
|
||||
*/
|
||||
return Task.call(() -> mReactHostDelegate.getJSBundleLoader(mContext));
|
||||
return Task.call(() -> mReactHostDelegate.getJSBundleLoader());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,14 +7,13 @@
|
|||
|
||||
package com.facebook.react.bridgeless
|
||||
|
||||
import android.content.Context
|
||||
import com.facebook.infer.annotation.ThreadSafe
|
||||
import com.facebook.react.ReactPackage
|
||||
import com.facebook.react.bridge.JSBundleLoader
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactContext
|
||||
import com.facebook.react.common.annotations.UnstableReactNativeAPI
|
||||
import com.facebook.react.fabric.ReactNativeConfig
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManager
|
||||
import com.facebook.react.turbomodule.core.TurboModuleManagerDelegate
|
||||
|
||||
/** TODO: add javadoc for class and methods */
|
||||
|
@ -27,36 +26,33 @@ interface ReactHostDelegate {
|
|||
|
||||
val reactPackages: List<ReactPackage>
|
||||
|
||||
fun getJSBundleLoader(context: Context): JSBundleLoader
|
||||
val jSEngineInstance: JSEngineInstance
|
||||
|
||||
val jSBundleLoader: JSBundleLoader
|
||||
|
||||
fun getTurboModuleManagerDelegate(context: ReactApplicationContext): TurboModuleManagerDelegate
|
||||
|
||||
fun getJSEngineInstance(context: ReactApplicationContext): JSEngineInstance
|
||||
|
||||
fun handleInstanceException(e: Exception)
|
||||
|
||||
// TODO: remove TurboModuleManager as a parameter
|
||||
fun getReactNativeConfig(turboModuleManager: TurboModuleManager): ReactNativeConfig
|
||||
fun getReactNativeConfig(context: ReactContext): ReactNativeConfig
|
||||
|
||||
@UnstableReactNativeAPI
|
||||
class ReactHostDelegateBase(
|
||||
override val jSMainModulePath: String,
|
||||
override val jSBundleLoader: JSBundleLoader,
|
||||
override val jSEngineInstance: JSEngineInstance,
|
||||
override val reactPackages: List<ReactPackage> = emptyList(),
|
||||
override val bindingsInstaller: BindingsInstaller? = null,
|
||||
override val reactPackages: List<ReactPackage>,
|
||||
private val jsBundleLoader: JSBundleLoader,
|
||||
private val turboModuleManagerDelegate: TurboModuleManagerDelegate,
|
||||
private val jsEngineInstance: JSEngineInstance,
|
||||
private val turboModuleManagerDelegate:
|
||||
(context: ReactApplicationContext) -> TurboModuleManagerDelegate,
|
||||
private val reactNativeConfig: ReactNativeConfig = ReactNativeConfig.DEFAULT_CONFIG,
|
||||
private val exceptionHandler: (Exception) -> Unit = {}
|
||||
) : ReactHostDelegate {
|
||||
override fun getJSBundleLoader(context: Context) = jsBundleLoader
|
||||
|
||||
override fun getTurboModuleManagerDelegate(context: ReactApplicationContext) =
|
||||
turboModuleManagerDelegate
|
||||
turboModuleManagerDelegate(context)
|
||||
|
||||
override fun getJSEngineInstance(context: ReactApplicationContext) = jsEngineInstance
|
||||
|
||||
override fun getReactNativeConfig(turboModuleManager: TurboModuleManager) = reactNativeConfig
|
||||
override fun getReactNativeConfig(context: ReactContext) = reactNativeConfig
|
||||
|
||||
override fun handleInstanceException(e: Exception) = exceptionHandler(e)
|
||||
}
|
||||
|
|
|
@ -150,7 +150,7 @@ final class ReactInstance {
|
|||
}
|
||||
});
|
||||
|
||||
JSEngineInstance jsEngineInstance = mDelegate.getJSEngineInstance(mBridgelessReactContext);
|
||||
JSEngineInstance jsEngineInstance = mDelegate.getJSEngineInstance();
|
||||
BindingsInstaller bindingsInstaller = mDelegate.getBindingsInstaller();
|
||||
// Notify JS if profiling is enabled
|
||||
boolean isProfiling =
|
||||
|
@ -225,7 +225,7 @@ final class ReactInstance {
|
|||
mFabricUIManager =
|
||||
new FabricUIManager(mBridgelessReactContext, viewManagerRegistry, eventBeatManager);
|
||||
|
||||
ReactNativeConfig config = mDelegate.getReactNativeConfig(mTurboModuleManager);
|
||||
ReactNativeConfig config = mDelegate.getReactNativeConfig(mBridgelessReactContext);
|
||||
|
||||
// Misc initialization that needs to be done before Fabric init
|
||||
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(mBridgelessReactContext);
|
||||
|
@ -383,7 +383,7 @@ final class ReactInstance {
|
|||
JavaTimerManager timerManager,
|
||||
JSTimerExecutor jsTimerExecutor,
|
||||
ReactJsExceptionHandler jReactExceptionsManager,
|
||||
BindingsInstaller jBindingsInstaller,
|
||||
@Nullable BindingsInstaller jBindingsInstaller,
|
||||
boolean isProfiling);
|
||||
|
||||
@DoNotStrip
|
||||
|
|
|
@ -11,7 +11,6 @@ import com.facebook.jni.HybridData
|
|||
import com.facebook.jni.annotations.DoNotStrip
|
||||
import com.facebook.react.bridgeless.JSEngineInstance
|
||||
import com.facebook.soloader.SoLoader
|
||||
import kotlin.jvm.JvmStatic
|
||||
|
||||
class HermesInstance() : JSEngineInstance(initHybrid()!!) {
|
||||
|
||||
|
|
|
@ -40,12 +40,12 @@ class ReactHostDelegateTest {
|
|||
val delegate =
|
||||
ReactHostDelegate.ReactHostDelegateBase(
|
||||
jsMainModulePathMocked,
|
||||
jsBundleLoader = jsBundleLoader,
|
||||
jSBundleLoader = jsBundleLoader,
|
||||
reactPackages = reactPackages,
|
||||
bindingsInstaller = bindingsInstallerMock,
|
||||
jsEngineInstance = jsEngineInstanceMock,
|
||||
jSEngineInstance = jsEngineInstanceMock,
|
||||
reactNativeConfig = reactNativeConfigMock,
|
||||
turboModuleManagerDelegate = turboModuleManagerDelegateMock,
|
||||
turboModuleManagerDelegate = { turboModuleManagerDelegateMock },
|
||||
exceptionHandler = {})
|
||||
|
||||
assertThat(delegate.jSMainModulePath).isEqualTo(jsMainModulePathMocked)
|
||||
|
|
|
@ -20,7 +20,6 @@ import android.app.Activity;
|
|||
import com.facebook.react.MemoryPressureRouter;
|
||||
import com.facebook.react.bridge.JSBundleLoader;
|
||||
import com.facebook.react.bridge.MemoryPressureListener;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.UIManager;
|
||||
import com.facebook.react.bridgeless.internal.bolts.TaskCompletionSource;
|
||||
import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
|
||||
|
@ -32,7 +31,6 @@ import org.junit.Ignore;
|
|||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
import org.powermock.core.classloader.annotations.PowerMockIgnore;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
|
||||
|
@ -83,9 +81,7 @@ public class ReactHostTest {
|
|||
whenNew(MemoryPressureRouter.class).withAnyArguments().thenReturn(mMemoryPressureRouter);
|
||||
whenNew(BridgelessDevSupportManager.class).withAnyArguments().thenReturn(mDevSupportManager);
|
||||
|
||||
doReturn(mJSBundleLoader)
|
||||
.when(mReactHostDelegate)
|
||||
.getJSBundleLoader(ArgumentMatchers.<ReactApplicationContext>any());
|
||||
doReturn(mJSBundleLoader).when(mReactHostDelegate).getJSBundleLoader();
|
||||
|
||||
mReactHost =
|
||||
new ReactHost(
|
||||
|
|
Загрузка…
Ссылка в новой задаче