From 74ea0c73a26d1c61609c1f2fa2e4ee3c8d432bcb Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Thu, 9 Jan 2025 15:51:58 +0000 Subject: [PATCH] Remove enableGetInspectorDataForInstanceInProduction flag (#32033) ## Summary Callers for this method has been removed in https://github.com/facebook/react-native/commit/65bda542320a85f4627d7957e1c6f45c2776298d, so these methods no longer need to be conditionally exported and the feature flag can be removed. ## How did you test this change? Flow fabric/native --- .../react-native-renderer/src/ReactFabric.js | 4 - .../src/ReactNativeFiberInspector.js | 132 ++++++++---------- .../src/ReactNativeRenderer.js | 4 - packages/shared/ReactFeatureFlags.js | 2 - .../forks/ReactFeatureFlags.native-fb.js | 1 - .../forks/ReactFeatureFlags.native-oss.js | 1 - .../forks/ReactFeatureFlags.test-renderer.js | 1 - ...actFeatureFlags.test-renderer.native-fb.js | 1 - .../ReactFeatureFlags.test-renderer.www.js | 1 - .../shared/forks/ReactFeatureFlags.www.js | 1 - 10 files changed, 61 insertions(+), 87 deletions(-) diff --git a/packages/react-native-renderer/src/ReactFabric.js b/packages/react-native-renderer/src/ReactFabric.js index bd50d1a317..67382f5f00 100644 --- a/packages/react-native-renderer/src/ReactFabric.js +++ b/packages/react-native-renderer/src/ReactFabric.js @@ -29,7 +29,6 @@ import { import {createPortal as createPortalImpl} from 'react-reconciler/src/ReactPortal'; import {setBatchingImplementation} from './legacy-events/ReactGenericBatching'; -import {getInspectorDataForInstance} from './ReactNativeFiberInspector'; import {LegacyRoot, ConcurrentRoot} from 'react-reconciler/src/ReactRootTags'; import { findHostInstance_DEPRECATED, @@ -188,9 +187,6 @@ export { unmountComponentAtNode, stopSurface, createPortal, - // This export is typically undefined in production builds. - // See the "enableGetInspectorDataForInstanceInProduction" flag. - getInspectorDataForInstance, // The public instance has a reference to the internal instance handle. // This method allows it to acess the most recent shadow node for // the instance (it's only accessible through it). diff --git a/packages/react-native-renderer/src/ReactNativeFiberInspector.js b/packages/react-native-renderer/src/ReactNativeFiberInspector.js index d0423f1d48..47d588d448 100644 --- a/packages/react-native-renderer/src/ReactNativeFiberInspector.js +++ b/packages/react-native-renderer/src/ReactNativeFiberInspector.js @@ -21,7 +21,6 @@ import { UIManager, getNodeFromPublicInstance, } from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface'; -import {enableGetInspectorDataForInstanceInProduction} from 'shared/ReactFeatureFlags'; import {getClosestInstanceFromNode} from './ReactNativeComponentTree'; import { getNodeFromInternalInstanceHandle, @@ -29,39 +28,40 @@ import { } from './ReactNativePublicCompat'; import {getStackByFiberInDevAndProd} from 'react-reconciler/src/ReactFiberComponentStack'; -const emptyObject = {}; +let getInspectorDataForInstance: ( + closestInstance: Fiber | null, +) => InspectorData; + if (__DEV__) { - Object.freeze(emptyObject); -} + const emptyObject = Object.freeze({}); -// $FlowFixMe[missing-local-annot] -function createHierarchy(fiberHierarchy) { - return fiberHierarchy.map(fiber => ({ - name: getComponentNameFromType(fiber.type), - getInspectorData: () => { - return { - props: getHostProps(fiber), - measure: callback => { - // If this is Fabric, we'll find a shadow node and use that to measure. - const hostFiber = findCurrentHostFiber(fiber); - const node = - hostFiber != null && - hostFiber.stateNode !== null && - hostFiber.stateNode.node; + // $FlowFixMe[missing-local-annot] + const createHierarchy = function (fiberHierarchy) { + return fiberHierarchy.map(fiber => ({ + name: getComponentNameFromType(fiber.type), + getInspectorData: () => { + return { + props: getHostProps(fiber), + measure: callback => { + // If this is Fabric, we'll find a shadow node and use that to measure. + const hostFiber = findCurrentHostFiber(fiber); + const node = + hostFiber != null && + hostFiber.stateNode !== null && + hostFiber.stateNode.node; - if (node) { - nativeFabricUIManager.measure(node, callback); - } else { - return UIManager.measure(getHostNode(fiber), callback); - } - }, - }; - }, - })); -} + if (node) { + nativeFabricUIManager.measure(node, callback); + } else { + return UIManager.measure(getHostNode(fiber), callback); + } + }, + }; + }, + })); + }; -function getHostNode(fiber: Fiber | null) { - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) { + const getHostNode = function (fiber: Fiber | null) { let hostNode; // look for children first for the hostNode // as composite fibers do not have a hostNode @@ -75,22 +75,19 @@ function getHostNode(fiber: Fiber | null) { fiber = fiber.child; } return null; - } -} + }; -// $FlowFixMe[missing-local-annot] -function getHostProps(fiber) { - const host = findCurrentHostFiber(fiber); - if (host) { - return host.memoizedProps || emptyObject; - } - return emptyObject; -} + const getHostProps = function (fiber: Fiber) { + const host = findCurrentHostFiber(fiber); + if (host) { + return host.memoizedProps || emptyObject; + } + return emptyObject; + }; -function getInspectorDataForInstance( - closestInstance: Fiber | null, -): InspectorData { - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) { + getInspectorDataForInstance = function ( + closestInstance: Fiber | null, + ): InspectorData { // Handle case where user clicks outside of ReactNative if (!closestInstance) { return { @@ -125,36 +122,30 @@ function getInspectorDataForInstance( selectedIndex, componentStack, }; - } + }; - throw new Error( - 'getInspectorDataForInstance() is not available in production', - ); -} + const getOwnerHierarchy = function (instance: Fiber) { + const hierarchy: Array<$FlowFixMe> = []; + traverseOwnerTreeUp(hierarchy, instance); + return hierarchy; + }; -function getOwnerHierarchy(instance: Fiber) { - const hierarchy: Array<$FlowFixMe> = []; - traverseOwnerTreeUp(hierarchy, instance); - return hierarchy; -} + // $FlowFixMe[missing-local-annot] + const lastNonHostInstance = function (hierarchy) { + for (let i = hierarchy.length - 1; i > 1; i--) { + const instance = hierarchy[i]; -// $FlowFixMe[missing-local-annot] -function lastNonHostInstance(hierarchy) { - for (let i = hierarchy.length - 1; i > 1; i--) { - const instance = hierarchy[i]; - - if (instance.tag !== HostComponent) { - return instance; + if (instance.tag !== HostComponent) { + return instance; + } } - } - return hierarchy[0]; -} + return hierarchy[0]; + }; -function traverseOwnerTreeUp( - hierarchy: Array<$FlowFixMe>, - instance: Fiber, -): void { - if (__DEV__ || enableGetInspectorDataForInstanceInProduction) { + const traverseOwnerTreeUp = function ( + hierarchy: Array<$FlowFixMe>, + instance: Fiber, + ): void { hierarchy.unshift(instance); const owner = instance._debugOwner; if (owner != null && typeof owner.tag === 'number') { @@ -162,13 +153,12 @@ function traverseOwnerTreeUp( } else { // TODO: Traverse Server Components owners. } - } + }; } function getInspectorDataForViewTag(viewTag: number): InspectorData { if (__DEV__) { const closestInstance = getClosestInstanceFromNode(viewTag); - return getInspectorDataForInstance(closestInstance); } else { throw new Error( diff --git a/packages/react-native-renderer/src/ReactNativeRenderer.js b/packages/react-native-renderer/src/ReactNativeRenderer.js index 7f959184c9..a1a4825393 100644 --- a/packages/react-native-renderer/src/ReactNativeRenderer.js +++ b/packages/react-native-renderer/src/ReactNativeRenderer.js @@ -34,7 +34,6 @@ import { // Modules provided by RN: import {UIManager} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface'; -import {getInspectorDataForInstance} from './ReactNativeFiberInspector'; import {LegacyRoot} from 'react-reconciler/src/ReactRootTags'; import { findHostInstance_DEPRECATED, @@ -206,9 +205,6 @@ export { unmountComponentAtNodeAndRemoveContainer, createPortal, batchedUpdates as unstable_batchedUpdates, - // This export is typically undefined in production builds. - // See the "enableGetInspectorDataForInstanceInProduction" flag. - getInspectorDataForInstance, // DEV-only: isChildPublicInstance, }; diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index bebb275e1b..bc1ae542fa 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -260,6 +260,4 @@ export const enableAsyncDebugInfo = __EXPERIMENTAL__; export const enableUpdaterTracking = __PROFILE__; // Internal only. -export const enableGetInspectorDataForInstanceInProduction = false; - export const enableDO_NOT_USE_disableStrictPassiveEffect = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index f3551ed658..7a01d9c928 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -48,7 +48,6 @@ export const enableCreateEventHandleAPI = false; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableMoveBefore = true; export const enableFizzExternalRuntime = true; -export const enableGetInspectorDataForInstanceInProduction = true; export const enableHalt = false; export const enableInfiniteRenderLoopDetection = false; export const enableLegacyCache = false; diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 11e2013395..26e05087c6 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -33,7 +33,6 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableFabricCompleteRootInCommitPhase = false; export const enableMoveBefore = true; export const enableFizzExternalRuntime = true; -export const enableGetInspectorDataForInstanceInProduction = false; export const enableHalt = false; export const enableHiddenSubtreeInsertionEffectCleanup = false; export const enableInfiniteRenderLoopDetection = false; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index f878cdc560..7e11aceaf7 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -36,7 +36,6 @@ export const enableUseEffectEventHook = false; export const favorSafetyOverHydrationPerf = true; export const enableLegacyFBSupport = false; export const enableMoveBefore = false; -export const enableGetInspectorDataForInstanceInProduction = false; export const enableFabricCompleteRootInCommitPhase = false; export const enableHiddenSubtreeInsertionEffectCleanup = false; export const enableHydrationLaneScheduling = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js index a75174692c..72731529b1 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js @@ -27,7 +27,6 @@ export const enableCreateEventHandleAPI = false; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; export const enableMoveBefore = false; export const enableFizzExternalRuntime = true; -export const enableGetInspectorDataForInstanceInProduction = false; export const enableHalt = false; export const enableInfiniteRenderLoopDetection = false; export const enableHiddenSubtreeInsertionEffectCleanup = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index e25c011828..bfd3316019 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -38,7 +38,6 @@ export const enableUseEffectEventHook = false; export const favorSafetyOverHydrationPerf = true; export const enableLegacyFBSupport = false; export const enableMoveBefore = false; -export const enableGetInspectorDataForInstanceInProduction = false; export const enableRenderableContext = false; export const enableFabricCompleteRootInCommitPhase = false; export const enableHiddenSubtreeInsertionEffectCleanup = true; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index a55cec676c..b317fca356 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -69,7 +69,6 @@ export const enableSchedulingProfiler: boolean = __PROFILE__ && dynamicFeatureFlags.enableSchedulingProfiler; export const disableLegacyContext = __EXPERIMENTAL__; -export const enableGetInspectorDataForInstanceInProduction = false; export const enableLegacyCache = true;