diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java index 9af888e02..11ee1aae0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java @@ -1,15 +1,33 @@ // Copyright 2004-present Facebook. All Rights Reserved. package com.facebook.react.fabric; -import com.facebook.react.fabric.jsi.Binding; -import com.facebook.react.fabric.jsi.ComponentFactoryDelegate; -import com.facebook.react.fabric.jsi.EventBeatManager; import com.facebook.react.ReactInstanceManager; import com.facebook.react.bridge.JSIModuleProvider; import com.facebook.react.bridge.JavaScriptContextHolder; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.UIManager; import com.facebook.react.bridge.queue.MessageQueueThread; +import com.facebook.react.fabric.jsi.Binding; +import com.facebook.react.fabric.jsi.ComponentFactoryDelegate; +import com.facebook.react.fabric.jsi.ComponentRegistry; +import com.facebook.react.fabric.jsi.EventBeatManager; +import com.facebook.react.fabric.jsi.EventEmitterWrapper; +import com.facebook.react.fabric.jsi.FabricSoLoader; +import com.facebook.react.fabric.mounting.ContextBasedViewPool; +import com.facebook.react.fabric.mounting.LayoutMetricsConversions; +import com.facebook.react.fabric.mounting.MountingManager; +import com.facebook.react.fabric.mounting.ViewPool; +import com.facebook.react.fabric.mounting.mountitems.BatchMountItem; +import com.facebook.react.fabric.mounting.mountitems.CreateMountItem; +import com.facebook.react.fabric.mounting.mountitems.DeleteMountItem; +import com.facebook.react.fabric.mounting.mountitems.DispatchCommandMountItem; +import com.facebook.react.fabric.mounting.mountitems.InsertMountItem; +import com.facebook.react.fabric.mounting.mountitems.MountItem; +import com.facebook.react.fabric.mounting.mountitems.RemoveMountItem; +import com.facebook.react.fabric.mounting.mountitems.UpdateEventEmitterMountItem; +import com.facebook.react.fabric.mounting.mountitems.UpdateLayoutMountItem; +import com.facebook.react.fabric.mounting.mountitems.UpdateLocalDataMountItem; +import com.facebook.react.fabric.mounting.mountitems.UpdatePropsMountItem; import com.facebook.react.uimanager.UIManagerModule; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.systrace.Systrace; @@ -40,6 +58,8 @@ public class FabricJSIModuleProvider implements JSIModuleProvider { Systrace.beginSection( Systrace.TRACE_TAG_REACT_JAVA_BRIDGE, "FabricJSIModuleProvider.registerBinding"); final Binding binding = new Binding(); + // TODO T31905686: remove this call + loadClasses(); MessageQueueThread jsMessageQueueThread = mReactApplicationContext .getCatalystInstance() @@ -66,4 +86,33 @@ public class FabricJSIModuleProvider implements JSIModuleProvider { Systrace.endSection(Systrace.TRACE_TAG_REACT_JAVA_BRIDGE); return fabricUIManager; } + + // TODO T31905686: eager load Fabric classes, this is temporary and it will be removed + // in the near future + private static void loadClasses() { + FabricEventEmitter.class.getClass(); + FabricUIManager.class.getClass(); + GuardedFrameCallback.class.getClass(); + BatchMountItem.class.getClass(); + CreateMountItem.class.getClass(); + DeleteMountItem.class.getClass(); + DispatchCommandMountItem.class.getClass(); + InsertMountItem.class.getClass(); + MountItem.class.getClass(); + RemoveMountItem.class.getClass(); + UpdateEventEmitterMountItem.class.getClass(); + UpdateLayoutMountItem.class.getClass(); + UpdateLocalDataMountItem.class.getClass(); + UpdatePropsMountItem.class.getClass(); + ContextBasedViewPool.class.getClass(); + LayoutMetricsConversions.class.getClass(); + MountingManager.class.getClass(); + ViewPool.class.getClass(); + Binding.class.getClass(); + ComponentFactoryDelegate.class.getClass(); + ComponentRegistry.class.getClass(); + EventBeatManager.class.getClass(); + EventEmitterWrapper.class.getClass(); + FabricSoLoader.class.getClass(); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java index ed2a54927..c92476535 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java @@ -14,7 +14,7 @@ import com.facebook.react.uimanager.ViewManagerRegistry; import java.util.WeakHashMap; /** Class that provides pool for views based on {@link ThemedReactContext}. */ -final class ContextBasedViewPool { +public final class ContextBasedViewPool { private final WeakHashMap mContextViewPoolHashMap = new WeakHashMap<>(); private final ViewManagerRegistry mViewManagerRegistry; diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewPool.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewPool.java index 5cf492a1a..5cf657691 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewPool.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewPool.java @@ -15,7 +15,7 @@ import com.facebook.react.uimanager.ViewManagerRegistry; import java.util.HashMap; import java.util.Map; -final class ViewPool { +public final class ViewPool { private static final int POOL_SIZE = 512; private final Map> mViewPool = new HashMap<>(); private final ViewManagerRegistry mViewManagerRegistry; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index 1a219f430..31991e0bc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -317,7 +317,8 @@ public class TextLayoutManager { return YogaMeasureOutput.make(PixelUtil.toSPFromPixel(width), PixelUtil.toSPFromPixel(height)); } - private static class SetSpanOperation { + // TODO T31905686: This class should be private + public static class SetSpanOperation { protected int start, end; protected ReactSpan what;