diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt
index f992454f15e..d4155d13158 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutDirectionUtil.kt
@@ -8,8 +8,10 @@
package com.facebook.react.uimanager
import android.view.View
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
import com.facebook.yoga.YogaDirection
+@LegacyArchitecture
internal object LayoutDirectionUtil {
@JvmStatic
fun toAndroidFromYoga(direction: YogaDirection): Int =
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java
index d62808ae4ff..87ed9a575f5 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java
@@ -12,6 +12,7 @@ import com.facebook.common.logging.FLog;
import com.facebook.react.bridge.Dynamic;
import com.facebook.react.bridge.ReadableType;
import com.facebook.react.common.ReactConstants;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.modules.i18nmanager.I18nUtil;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.facebook.react.uimanager.annotations.ReactPropGroup;
@@ -34,6 +35,7 @@ import com.facebook.yoga.YogaWrap;
* may or may not be embedded in a parent text. There are better solutions that should probably be
* explored, namely using the VirtualText class in JS and setting the correct set of validAttributes
*/
+@LegacyArchitecture
public class LayoutShadowNode extends ReactShadowNodeImpl {
/** A Mutable version of com.facebook.yoga.YogaValue */
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeKind.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeKind.kt
index ee000bbb142..d60a64f7b8f 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeKind.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeKind.kt
@@ -7,10 +7,12 @@
package com.facebook.react.uimanager
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
+
// Common conditionals:
// - `kind == PARENT` checks whether the node can host children in the native tree.
// - `kind != NONE` checks whether the node appears in the native tree.
-
+@LegacyArchitecture
internal enum class NativeKind {
// Node is in the native hierarchy and the HierarchyOptimizer should assume it can host children
// (e.g. because it's a ViewGroup). Note that it's okay if the node doesn't support children. When
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java
index 9f37e762035..f4e6b1c3ec7 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java
@@ -26,6 +26,7 @@ import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.RetryableMountingLayerException;
import com.facebook.react.bridge.SoftAssertions;
import com.facebook.react.bridge.UiThreadUtil;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.common.build.ReactBuildConfig;
import com.facebook.react.touch.JSResponderHandler;
import com.facebook.react.uimanager.layoutanimation.LayoutAnimationController;
@@ -64,6 +65,7 @@ import javax.annotation.concurrent.NotThreadSafe;
*
TODO(5483031): Only dispatch updates when shadow views have changed
*/
@NotThreadSafe
+@LegacyArchitecture
public class NativeViewHierarchyManager {
private static final String TAG = NativeViewHierarchyManager.class.getSimpleName();
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 e57eadd2630..ccc0cc55655 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
@@ -13,6 +13,7 @@ import com.facebook.common.logging.FLog;
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;
/**
* Class responsible for optimizing the native view hierarchy while still respecting the final UI
@@ -45,6 +46,7 @@ import com.facebook.react.bridge.ReadableMapKeySetIterator;
* manageChildren calls for various parent views may be issued to the native view hierarchy
* depending on where the views being added/removed are attached in the optimized hierarchy
*/
+@LegacyArchitecture
public class NativeViewHierarchyOptimizer {
private static final String TAG = "NativeViewHierarchyOptimizer";
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 a0d4448d13c..0197c7bed25 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
@@ -7,9 +7,12 @@
package com.facebook.react.uimanager
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
+
/**
* Exception thrown when a class tries to access a native view by a tag that has no native view
* associated with it.
*/
+@LegacyArchitecture
internal class NoSuchNativeViewException(detailMessage: String) :
IllegalViewOperationException(detailMessage)
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java
index 37fc1905004..4666b9a8038 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java
@@ -12,10 +12,12 @@ import androidx.core.util.Pools;
import com.facebook.infer.annotation.Nullsafe;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.uimanager.events.Event;
/** Event used to notify JS component about changes of its position or dimensions */
@Nullsafe(Nullsafe.Mode.LOCAL)
+@LegacyArchitecture
public class OnLayoutEvent extends Event {
private static final Pools.SynchronizedPool EVENTS_POOL =
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java
index ef3464a2e2d..14643f01ed6 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java
@@ -8,6 +8,7 @@
package com.facebook.react.uimanager;
import androidx.annotation.Nullable;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.yoga.YogaAlign;
import com.facebook.yoga.YogaBaselineFunction;
import com.facebook.yoga.YogaDirection;
@@ -44,6 +45,7 @@ import com.facebook.yoga.YogaWrap;
* separately native children (e.g. {@link #getNativeChildCount()}). See {@link
* NativeViewHierarchyOptimizer} for more information.
*/
+@LegacyArchitecture
public interface ReactShadowNode {
/**
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java
index 7e764a4ec33..c5d9e606646 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java
@@ -9,6 +9,7 @@ package com.facebook.react.uimanager;
import androidx.annotation.Nullable;
import com.facebook.infer.annotation.Assertions;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.uimanager.annotations.ReactPropertyHolder;
import com.facebook.yoga.YogaAlign;
import com.facebook.yoga.YogaBaselineFunction;
@@ -54,6 +55,7 @@ import java.util.Arrays;
* NativeViewHierarchyOptimizer} for more information.
*/
@ReactPropertyHolder
+@LegacyArchitecture
public class ReactShadowNodeImpl implements ReactShadowNode {
private static final YogaConfig sYogaConfig;
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt
index e04c0d9edd6..5b5fcf560b5 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactYogaConfigProvider.kt
@@ -7,10 +7,12 @@
package com.facebook.react.uimanager
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
import com.facebook.yoga.YogaConfig
import com.facebook.yoga.YogaConfigFactory
import com.facebook.yoga.YogaErrata
+@LegacyArchitecture
internal object ReactYogaConfigProvider {
val yogaConfig: YogaConfig by
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java
index c14a06d26ed..6c10f3561f4 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.java
@@ -11,11 +11,13 @@ import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.View;
import com.facebook.react.common.SingleThreadAsserter;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
/**
* Simple container class to keep track of {@link ReactShadowNode}s associated with a particular
* UIManagerModule instance.
*/
+@LegacyArchitecture
class ShadowNodeRegistry {
private final SparseArray mTagsToCSSNodes;
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 afa1d3a968d..ce25a598a76 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
@@ -21,6 +21,7 @@ import com.facebook.react.bridge.ReadableMap;
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.build.ReactBuildConfig;
import com.facebook.react.modules.i18nmanager.I18nUtil;
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
@@ -38,6 +39,7 @@ import java.util.Map;
* A class that is used to receive React commands from JS and translate them into a shadow node
* hierarchy that is then mapped to a native view hierarchy.
*/
+@LegacyArchitecture
public class UIImplementation {
protected Object uiImplementationThreadLock = new Object();
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java
index 7a3cfc55ae6..6584507545a 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java
@@ -39,6 +39,7 @@ import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.common.MapBuilder;
import com.facebook.react.common.ReactConstants;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.uimanager.common.ViewUtil;
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
@@ -82,6 +83,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* Don't dispatch the view hierarchy at the end of a batch if no UI changes occurred
*/
@ReactModule(name = UIManagerModule.NAME)
+@LegacyArchitecture
public class UIManagerModule extends ReactContextBaseJavaModule
implements OnBatchCompleteListener, LifecycleEventListener, UIManager {
public static final String TAG = UIManagerModule.class.getSimpleName();
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleListener.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleListener.kt
index 3648611ad9c..a498bbb0477 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleListener.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleListener.kt
@@ -7,8 +7,11 @@
package com.facebook.react.uimanager
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
+
/** Listener used to hook into the UIManager update process. */
@Deprecated("Use UIManagerListener instead. This will be deleted in some future release.")
+@LegacyArchitecture
public interface UIManagerModuleListener {
/**
* Called right before view updates are dispatched at the end of a batch. This is useful if a
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java
index c279e522ee1..e809f955934 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java
@@ -25,6 +25,7 @@ import com.facebook.react.bridge.RetryableMountingLayerException;
import com.facebook.react.bridge.SoftAssertions;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.common.ReactConstants;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import com.facebook.react.modules.core.ReactChoreographer;
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
import com.facebook.systrace.Systrace;
@@ -45,6 +46,7 @@ import java.util.Map;
* TODO(7135923): Pooling of operation objects TODO(5694019): Consider a better data structure
* for operations queue to save on allocations
*/
+@LegacyArchitecture
public class UIViewOperationQueue {
public static final int DEFAULT_MIN_TIME_LEFT_IN_FRAME_FOR_NONBATCHED_OPERATION_MS = 8;
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 3ad0bc67baf..335313d7121 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
@@ -7,12 +7,14 @@
package com.facebook.react.uimanager;
+import com.facebook.react.common.annotations.internal.LegacyArchitecture;
import java.util.Comparator;
/**
* Data structure that couples view tag to it's index in parent view. Used for managing children
* operation.
*/
+@LegacyArchitecture
public class ViewAtIndex {
public static Comparator COMPARATOR =
new Comparator() {
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 d76399e8f83..e50bfd52f4b 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
@@ -8,9 +8,11 @@
package com.facebook.react.uimanager
import com.facebook.react.common.ClearableSynchronizedPool
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
import com.facebook.yoga.YogaNode
/** Static holder for a recycling pool of YogaNodes. */
+@LegacyArchitecture
internal object YogaNodePool {
private val pool: ClearableSynchronizedPool by
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt
index 894a4e59439..4ccd2a1476d 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt
@@ -7,6 +7,8 @@
package com.facebook.react.uimanager.debug
+import com.facebook.react.common.annotations.internal.LegacyArchitecture
+
/**
* A listener that is notified about view hierarchy update events. This listener should only be used
* for debug purposes and should not affect application state.
@@ -16,6 +18,7 @@ package com.facebook.react.uimanager.debug
*/
@Deprecated(
"NotThreadSafeViewHierarchyUpdateDebugListener will be deleted in the new architecture.")
+@LegacyArchitecture
internal interface NotThreadSafeViewHierarchyUpdateDebugListener {
/** Called when `UIManagerModule` enqueues a UI batch to be dispatched to the main thread. */
fun onViewHierarchyUpdateEnqueued()