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
Pieter De Baets committed
Jan 9, 2025 at 15:51 UTC
74ea0c73a26d1c61609c1f2fa2e4ee3c8d432bcb
10 files changed
+61
-87
packages/react-native-renderer/src/ReactFabric.js
-4
@@ -29,7 +29,6 @@ import {
29
import {createPortal as createPortalImpl} from 'react-reconciler/src/ReactPortal';
30
import {setBatchingImplementation} from './legacy-events/ReactGenericBatching';
31
32
-import {getInspectorDataForInstance} from './ReactNativeFiberInspector';
32
import {LegacyRoot, ConcurrentRoot} from 'react-reconciler/src/ReactRootTags';
33
import {
34
findHostInstance_DEPRECATED,
@@ -188,9 +187,6 @@ export {
187
unmountComponentAtNode,
188
stopSurface,
189
createPortal,
191
- // This export is typically undefined in production builds.
192
- // See the "enableGetInspectorDataForInstanceInProduction" flag.
193
- getInspectorDataForInstance,
190
// The public instance has a reference to the internal instance handle.
191
// This method allows it to acess the most recent shadow node for
192
// the instance (it's only accessible through it).
packages/react-native-renderer/src/ReactNativeFiberInspector.js
+61
-71
@@ -21,7 +21,6 @@ import {
21
UIManager,
22
getNodeFromPublicInstance,
23
} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
24
-import {enableGetInspectorDataForInstanceInProduction} from 'shared/ReactFeatureFlags';
24
import {getClosestInstanceFromNode} from './ReactNativeComponentTree';
25
import {
26
getNodeFromInternalInstanceHandle,
@@ -29,39 +28,40 @@ import {
28
} from './ReactNativePublicCompat';
29
import {getStackByFiberInDevAndProd} from 'react-reconciler/src/ReactFiberComponentStack';
30
32
-const emptyObject = {};
31
+let getInspectorDataForInstance: (
32
+ closestInstance: Fiber | null,
33
+) => InspectorData;
34
+
35
if (__DEV__) {
34
- Object.freeze(emptyObject);
35
-}
36
+ const emptyObject = Object.freeze({});
37
37
-// $FlowFixMe[missing-local-annot]
38
-function createHierarchy(fiberHierarchy) {
39
- return fiberHierarchy.map(fiber => ({
40
- name: getComponentNameFromType(fiber.type),
41
- getInspectorData: () => {
42
- return {
43
- props: getHostProps(fiber),
44
- measure: callback => {
45
- // If this is Fabric, we'll find a shadow node and use that to measure.
46
- const hostFiber = findCurrentHostFiber(fiber);
47
- const node =
48
- hostFiber != null &&
49
- hostFiber.stateNode !== null &&
50
- hostFiber.stateNode.node;
38
+ // $FlowFixMe[missing-local-annot]
39
+ const createHierarchy = function (fiberHierarchy) {
40
+ return fiberHierarchy.map(fiber => ({
41
+ name: getComponentNameFromType(fiber.type),
42
+ getInspectorData: () => {
43
+ return {
44
+ props: getHostProps(fiber),
45
+ measure: callback => {
46
+ // If this is Fabric, we'll find a shadow node and use that to measure.
47
+ const hostFiber = findCurrentHostFiber(fiber);
48
+ const node =
49
+ hostFiber != null &&
50
+ hostFiber.stateNode !== null &&
51
+ hostFiber.stateNode.node;
52
52
- if (node) {
53
- nativeFabricUIManager.measure(node, callback);
54
- } else {
55
- return UIManager.measure(getHostNode(fiber), callback);
56
- }
57
- },
58
- };
59
- },
60
- }));
61
-}
53
+ if (node) {
54
+ nativeFabricUIManager.measure(node, callback);
55
+ } else {
56
+ return UIManager.measure(getHostNode(fiber), callback);
57
+ }
58
+ },
59
+ };
60
+ },
61
+ }));
62
+ };
63
63
-function getHostNode(fiber: Fiber | null) {
64
- if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
64
+ const getHostNode = function (fiber: Fiber | null) {
65
let hostNode;
66
// look for children first for the hostNode
67
// as composite fibers do not have a hostNode
@@ -75,22 +75,19 @@ function getHostNode(fiber: Fiber | null) {
75
fiber = fiber.child;
76
}
77
return null;
78
- }
79
-}
78
+ };
79
81
-// $FlowFixMe[missing-local-annot]
82
-function getHostProps(fiber) {
83
- const host = findCurrentHostFiber(fiber);
84
- if (host) {
85
- return host.memoizedProps || emptyObject;
86
- }
87
- return emptyObject;
88
-}
80
+ const getHostProps = function (fiber: Fiber) {
81
+ const host = findCurrentHostFiber(fiber);
82
+ if (host) {
83
+ return host.memoizedProps || emptyObject;
84
+ }
85
+ return emptyObject;
86
+ };
87
90
-function getInspectorDataForInstance(
91
- closestInstance: Fiber | null,
92
-): InspectorData {
93
- if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
88
+ getInspectorDataForInstance = function (
89
+ closestInstance: Fiber | null,
90
+ ): InspectorData {
91
// Handle case where user clicks outside of ReactNative
92
if (!closestInstance) {
93
return {
@@ -125,36 +122,30 @@ function getInspectorDataForInstance(
122
selectedIndex,
123
componentStack,
124
};
128
- }
125
+ };
126
130
- throw new Error(
131
- 'getInspectorDataForInstance() is not available in production',
132
- );
133
-}
134
-
135
-function getOwnerHierarchy(instance: Fiber) {
136
- const hierarchy: Array<$FlowFixMe> = [];
137
- traverseOwnerTreeUp(hierarchy, instance);
138
- return hierarchy;
139
-}
127
+ const getOwnerHierarchy = function (instance: Fiber) {
128
+ const hierarchy: Array<$FlowFixMe> = [];
129
+ traverseOwnerTreeUp(hierarchy, instance);
130
+ return hierarchy;
131
+ };
132
141
-// $FlowFixMe[missing-local-annot]
142
-function lastNonHostInstance(hierarchy) {
143
- for (let i = hierarchy.length - 1; i > 1; i--) {
144
- const instance = hierarchy[i];
133
+ // $FlowFixMe[missing-local-annot]
134
+ const lastNonHostInstance = function (hierarchy) {
135
+ for (let i = hierarchy.length - 1; i > 1; i--) {
136
+ const instance = hierarchy[i];
137
146
- if (instance.tag !== HostComponent) {
147
- return instance;
138
+ if (instance.tag !== HostComponent) {
139
+ return instance;
140
+ }
141
}
149
- }
150
- return hierarchy[0];
151
-}
142
+ return hierarchy[0];
143
+ };
144
153
-function traverseOwnerTreeUp(
154
- hierarchy: Array<$FlowFixMe>,
155
- instance: Fiber,
156
-): void {
157
- if (__DEV__ || enableGetInspectorDataForInstanceInProduction) {
145
+ const traverseOwnerTreeUp = function (
146
+ hierarchy: Array<$FlowFixMe>,
147
+ instance: Fiber,
148
+ ): void {
149
hierarchy.unshift(instance);
150
const owner = instance._debugOwner;
151
if (owner != null && typeof owner.tag === 'number') {
@@ -162,13 +153,12 @@ function traverseOwnerTreeUp(
153
} else {
154
// TODO: Traverse Server Components owners.
155
}
165
- }
156
+ };
157
}
158
159
function getInspectorDataForViewTag(viewTag: number): InspectorData {
160
if (__DEV__) {
161
const closestInstance = getClosestInstanceFromNode(viewTag);
171
-
162
return getInspectorDataForInstance(closestInstance);
163
} else {
164
throw new Error(
packages/react-native-renderer/src/ReactNativeRenderer.js
-4
@@ -34,7 +34,6 @@ import {
34
// Modules provided by RN:
35
import {UIManager} from 'react-native/Libraries/ReactPrivate/ReactNativePrivateInterface';
36
37
-import {getInspectorDataForInstance} from './ReactNativeFiberInspector';
37
import {LegacyRoot} from 'react-reconciler/src/ReactRootTags';
38
import {
39
findHostInstance_DEPRECATED,
@@ -206,9 +205,6 @@ export {
205
unmountComponentAtNodeAndRemoveContainer,
206
createPortal,
207
batchedUpdates as unstable_batchedUpdates,
209
- // This export is typically undefined in production builds.
210
- // See the "enableGetInspectorDataForInstanceInProduction" flag.
211
- getInspectorDataForInstance,
208
// DEV-only:
209
isChildPublicInstance,
210
};
packages/shared/ReactFeatureFlags.js
-2
@@ -260,6 +260,4 @@ export const enableAsyncDebugInfo = __EXPERIMENTAL__;
260
export const enableUpdaterTracking = __PROFILE__;
261
262
// Internal only.
263
-export const enableGetInspectorDataForInstanceInProduction = false;
264
-
263
export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
packages/shared/forks/ReactFeatureFlags.native-fb.js
-1
@@ -48,7 +48,6 @@ export const enableCreateEventHandleAPI = false;
48
export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
49
export const enableMoveBefore = true;
50
export const enableFizzExternalRuntime = true;
51
-export const enableGetInspectorDataForInstanceInProduction = true;
51
export const enableHalt = false;
52
export const enableInfiniteRenderLoopDetection = false;
53
export const enableLegacyCache = false;
packages/shared/forks/ReactFeatureFlags.native-oss.js
-1
@@ -33,7 +33,6 @@ export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
33
export const enableFabricCompleteRootInCommitPhase = false;
34
export const enableMoveBefore = true;
35
export const enableFizzExternalRuntime = true;
36
-export const enableGetInspectorDataForInstanceInProduction = false;
36
export const enableHalt = false;
37
export const enableHiddenSubtreeInsertionEffectCleanup = false;
38
export const enableInfiniteRenderLoopDetection = false;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
-1
@@ -36,7 +36,6 @@ export const enableUseEffectEventHook = false;
36
export const favorSafetyOverHydrationPerf = true;
37
export const enableLegacyFBSupport = false;
38
export const enableMoveBefore = false;
39
-export const enableGetInspectorDataForInstanceInProduction = false;
39
export const enableFabricCompleteRootInCommitPhase = false;
40
export const enableHiddenSubtreeInsertionEffectCleanup = false;
41
export const enableHydrationLaneScheduling = true;
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
-1
@@ -27,7 +27,6 @@ export const enableCreateEventHandleAPI = false;
27
export const enableDO_NOT_USE_disableStrictPassiveEffect = false;
28
export const enableMoveBefore = false;
29
export const enableFizzExternalRuntime = true;
30
-export const enableGetInspectorDataForInstanceInProduction = false;
30
export const enableHalt = false;
31
export const enableInfiniteRenderLoopDetection = false;
32
export const enableHiddenSubtreeInsertionEffectCleanup = true;
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
-1
@@ -38,7 +38,6 @@ export const enableUseEffectEventHook = false;
38
export const favorSafetyOverHydrationPerf = true;
39
export const enableLegacyFBSupport = false;
40
export const enableMoveBefore = false;
41
-export const enableGetInspectorDataForInstanceInProduction = false;
41
export const enableRenderableContext = false;
42
export const enableFabricCompleteRootInCommitPhase = false;
43
export const enableHiddenSubtreeInsertionEffectCleanup = true;
packages/shared/forks/ReactFeatureFlags.www.js
-1
@@ -69,7 +69,6 @@ export const enableSchedulingProfiler: boolean =
69
__PROFILE__ && dynamicFeatureFlags.enableSchedulingProfiler;
70
71
export const disableLegacyContext = __EXPERIMENTAL__;
72
-export const enableGetInspectorDataForInstanceInProduction = false;
72
73
export const enableLegacyCache = true;
74