From 932fd86b741887ed00724fc192e390d557efdb43 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 5 Mar 2025 23:22:37 -0800 Subject: [PATCH] Log class loading for subset of bridge and uimanager classes annotated with @LegacyArchitecture (#49829) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/49829 Log class loading for bridge and uimanager classes annotated with LegacyArchitecture changelog: [internal] internal Reviewed By: cortinico Differential Revision: D70607960 fbshipit-source-id: e35666b48e63c784217c0b35ad1b5d4328944527 --- .../java/com/facebook/react/bridge/CxxCallbackImpl.kt | 5 +++++ .../java/com/facebook/react/bridge/CxxModuleWrapper.kt | 7 ++++++- .../com/facebook/react/bridge/InvalidIteratorException.kt | 8 +++++++- .../java/com/facebook/react/bridge/JavaMethodWrapper.java | 6 ++++++ .../java/com/facebook/react/bridge/JavaModuleWrapper.java | 6 ++++++ .../main/java/com/facebook/react/bridge/ReactBridge.kt | 5 +++++ .../react/bridge/ReactInstanceManagerInspectorTarget.java | 4 ++++ .../react/uimanager/NativeViewHierarchyOptimizer.java | 7 +++++++ .../facebook/react/uimanager/NoSuchNativeViewException.kt | 8 +++++++- .../com/facebook/react/uimanager/UIImplementation.java | 7 +++++++ .../java/com/facebook/react/uimanager/ViewAtIndex.java | 7 +++++++ .../java/com/facebook/react/uimanager/YogaNodePool.kt | 4 ++++ 12 files changed, 71 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxCallbackImpl.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxCallbackImpl.kt index d40b11ba6b9..970fbec2bf5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxCallbackImpl.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxCallbackImpl.kt @@ -10,11 +10,16 @@ package com.facebook.react.bridge import com.facebook.jni.HybridClassBase import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** Callback impl that calls directly into the cxx bridge. Created from C++. */ @DoNotStrip @LegacyArchitecture public class CxxCallbackImpl @DoNotStrip private constructor() : HybridClassBase(), Callback { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("CxxCallbackImpl") + } + override fun invoke(vararg args: Any?) { nativeInvoke(Arguments.fromJavaArgs(args)) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt index 7d8ebb7b498..c8c12946df2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapper.kt @@ -10,9 +10,14 @@ package com.facebook.react.bridge import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** This does nothing interesting, except avoid breaking existing code. */ @DoNotStrip @LegacyArchitecture public open class CxxModuleWrapper protected constructor(hybridData: HybridData) : - CxxModuleWrapperBase(hybridData) + CxxModuleWrapperBase(hybridData) { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("CxxModuleWrapper") + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/InvalidIteratorException.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/InvalidIteratorException.kt index 5d05d520ff2..3fdc7ee341f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/InvalidIteratorException.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/InvalidIteratorException.kt @@ -9,6 +9,7 @@ package com.facebook.react.bridge import com.facebook.proguard.annotations.DoNotStrip import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Exception thrown by [ReadableMapKeySetIterator.nextKey] when the iterator tries to iterate over @@ -17,4 +18,9 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture @DoNotStrip @LegacyArchitecture public class InvalidIteratorException @DoNotStrip public constructor(msg: String) : - RuntimeException(msg) {} + RuntimeException(msg) { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "InvalidIteratorException") + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.java index f6db9c6c8f3..0d441ad15f7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.java @@ -15,12 +15,18 @@ import com.facebook.debug.holder.PrinterHolder; import com.facebook.debug.tags.ReactDebugOverlayTags; import com.facebook.infer.annotation.Assertions; 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 com.facebook.systrace.SystraceMessage; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @LegacyArchitecture class JavaMethodWrapper implements JavaModuleWrapper.NativeMethod { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "JavaMethodWrapper", LegacyArchitectureLogLevel.WARNING); + } private abstract static class ArgumentExtractor { public int getJSArgumentsNeeded() { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java index 3b7b4e7bfef..880d9f54bb2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java @@ -16,6 +16,8 @@ import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; import androidx.annotation.Nullable; 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 com.facebook.react.turbomodule.core.interfaces.TurboModule; import com.facebook.systrace.Systrace; import com.facebook.systrace.SystraceMessage; @@ -32,6 +34,10 @@ import java.util.Map; @DoNotStrip @LegacyArchitecture class JavaModuleWrapper { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "JavaModuleWrapper", LegacyArchitectureLogLevel.WARNING); + } interface NativeMethod { void invoke(JSInstance jsInstance, ReadableArray parameters); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactBridge.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactBridge.kt index 14ca11f0348..e0d4c720a3a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactBridge.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactBridge.kt @@ -9,12 +9,17 @@ package com.facebook.react.bridge import android.os.SystemClock import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger import com.facebook.soloader.SoLoader import com.facebook.systrace.Systrace import com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE @LegacyArchitecture internal object ReactBridge { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("ReactBridge") + } + @Volatile private var _loadStartTime: Long = 0 @Volatile private var _loadEndTime: Long = 0 @Volatile private var _didInit: Boolean = false diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactInstanceManagerInspectorTarget.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactInstanceManagerInspectorTarget.java index 974c91a1cf7..bc5c46f3e96 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactInstanceManagerInspectorTarget.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactInstanceManagerInspectorTarget.java @@ -11,6 +11,8 @@ import com.facebook.infer.annotation.Nullsafe; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStripAny; 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 com.facebook.react.devsupport.inspector.InspectorNetworkRequestListener; import java.util.Map; import java.util.concurrent.Executor; @@ -66,6 +68,8 @@ public class ReactInstanceManagerInspectorTarget implements AutoCloseable { } static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "ReactInstanceManagerInspectorTarget", LegacyArchitectureLogLevel.WARNING); ReactBridge.staticInit(); } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java index ccc0cc55655..55e8ecb9bf4 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java @@ -14,6 +14,8 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.common.annotations.internal.LegacyArchitecture; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogLevel; +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger; /** * Class responsible for optimizing the native view hierarchy while still respecting the final UI @@ -49,6 +51,11 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture; @LegacyArchitecture public class NativeViewHierarchyOptimizer { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "NativeViewHierarchyOptimizer", LegacyArchitectureLogLevel.WARNING); + } + private static final String TAG = "NativeViewHierarchyOptimizer"; private static class NodeIndexPair { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NoSuchNativeViewException.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NoSuchNativeViewException.kt index 0197c7bed25..d677c3af19b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NoSuchNativeViewException.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NoSuchNativeViewException.kt @@ -8,6 +8,7 @@ package com.facebook.react.uimanager import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger /** * Exception thrown when a class tries to access a native view by a tag that has no native view @@ -15,4 +16,9 @@ import com.facebook.react.common.annotations.internal.LegacyArchitecture */ @LegacyArchitecture internal class NoSuchNativeViewException(detailMessage: String) : - IllegalViewOperationException(detailMessage) + IllegalViewOperationException(detailMessage) { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "NoSuchNativeViewException") + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java index ce25a598a76..68bb4a475f3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java @@ -22,6 +22,8 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableArray; import com.facebook.react.common.ReactConstants; 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 com.facebook.react.common.build.ReactBuildConfig; import com.facebook.react.modules.i18nmanager.I18nUtil; import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener; @@ -41,6 +43,11 @@ import java.util.Map; */ @LegacyArchitecture public class UIImplementation { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "UIImplementation", LegacyArchitectureLogLevel.WARNING); + } + protected Object uiImplementationThreadLock = new Object(); protected final EventDispatcher mEventDispatcher; diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewAtIndex.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewAtIndex.java index 335313d7121..9f96c0849c8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewAtIndex.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewAtIndex.java @@ -8,6 +8,8 @@ package com.facebook.react.uimanager; 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.util.Comparator; /** @@ -16,6 +18,11 @@ import java.util.Comparator; */ @LegacyArchitecture public class ViewAtIndex { + static { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled( + "ViewAtIndex", LegacyArchitectureLogLevel.WARNING); + } + public static Comparator COMPARATOR = new Comparator() { @Override diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/YogaNodePool.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/YogaNodePool.kt index e50bfd52f4b..a8fd91bbca9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/YogaNodePool.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/YogaNodePool.kt @@ -9,11 +9,15 @@ package com.facebook.react.uimanager import com.facebook.react.common.ClearableSynchronizedPool import com.facebook.react.common.annotations.internal.LegacyArchitecture +import com.facebook.react.common.annotations.internal.LegacyArchitectureLogger import com.facebook.yoga.YogaNode /** Static holder for a recycling pool of YogaNodes. */ @LegacyArchitecture internal object YogaNodePool { + init { + LegacyArchitectureLogger.assertWhenLegacyArchitectureMinifyingEnabled("YogaNodePool") + } private val pool: ClearableSynchronizedPool by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { ClearableSynchronizedPool(1024) }