From 79389191da68b405d38663d09a04c1bb3a1dd68f Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 8 Apr 2025 15:40:47 -0700 Subject: [PATCH] Remove usage of getShadowNodeClass() on new architecture Summary: This diff removes the usage of getShadowNodeClass() on apps that are purely running on the new architecture. The implications of this change are: - all shadow node classes will be stripped-out by proguard - props exposed in shadow Nodes won't be included in the native view configs, this is fine becuase all core components are already using static view configs, props included in LayoutShadow node are covered by: BaseViewConfig.android.js changelog: [internal] internal Reviewed By: javache, cortinico, rshest Differential Revision: D72602551 fbshipit-source-id: caada701f80253830df0085fdbbac47a2aa6d71b --- .../main/java/com/facebook/react/uimanager/ViewManager.java | 6 ++++++ .../facebook/react/uimanager/ViewManagerPropertyUpdater.kt | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java index 102fd7f35d1..5bfc7112dd6 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java @@ -21,6 +21,7 @@ import com.facebook.react.bridge.ReactSoftExceptionLogger; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.annotations.UnstableReactNativeAPI; +import com.facebook.react.common.build.ReactBuildConfig; import com.facebook.react.common.mapbuffer.MapBuffer; import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags; import com.facebook.react.touch.JSResponderHandler; @@ -406,6 +407,11 @@ public abstract class ViewManager * Map contains the names (key) and types (value) of the ViewManager's props. */ public Map getNativeProps() { + if (ReactBuildConfig.UNSTABLE_ENABLE_MINIFY_LEGACY_ARCHITECTURE + && ReactNativeFeatureFlags.enableBridgelessArchitecture() + && ReactNativeFeatureFlags.disableShadowNodeOnNewArchitectureAndroid()) { + return ViewManagerPropertyUpdater.getNativeProps(getClass(), null); + } return ViewManagerPropertyUpdater.getNativeProps(getClass(), getShadowNodeClass()); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt index cdac6cfac77..356fabe4b57 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.kt @@ -84,11 +84,13 @@ public object ViewManagerPropertyUpdater { @JvmStatic public fun getNativeProps( viewManagerTopClass: Class>, - shadowNodeTopClass: Class + shadowNodeTopClass: Class? ): Map { val props: MutableMap = HashMap() findManagerSetter(viewManagerTopClass).getProperties(props) - findNodeSetter(shadowNodeTopClass).getProperties(props) + if (shadowNodeTopClass != null) { + findNodeSetter(shadowNodeTopClass).getProperties(props) + } return props }