Skip to content

Commit 4e9d7ac

Browse files
authored
Merge pull request #9096 from trueadm/component-tree-hook-dev
[Fiber] Split dev methods within ReactComponentTreeHook
2 parents 6ca2140 + a159e85 commit 4e9d7ac

File tree

8 files changed

+108
-69
lines changed

8 files changed

+108
-69
lines changed

src/isomorphic/classic/element/ReactDebugCurrentFrame.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ const ReactDebugCurrentFrame = {};
2020
if (__DEV__) {
2121
var {
2222
getStackAddendumByID,
23-
getStackAddendumByWorkInProgressFiber,
2423
getCurrentStackAddendum,
2524
} = require('ReactComponentTreeHook');
25+
var {
26+
getStackAddendumByWorkInProgressFiber,
27+
} = require('ReactFiberComponentTreeHook');
2628

2729
// Component that is being worked on
2830
ReactDebugCurrentFrame.current = (null : Fiber | DebugID | null);

src/isomorphic/classic/element/ReactElementValidator.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
'use strict';
2020

2121
var ReactCurrentOwner = require('ReactCurrentOwner');
22-
var ReactComponentTreeHook = require('ReactComponentTreeHook');
2322
var ReactElement = require('ReactElement');
2423

2524
var checkReactTypeSpec = require('checkReactTypeSpec');
@@ -31,6 +30,9 @@ var getIteratorFn = require('getIteratorFn');
3130
if (__DEV__) {
3231
var warning = require('fbjs/lib/warning');
3332
var ReactDebugCurrentFrame = require('ReactDebugCurrentFrame');
33+
var {
34+
getCurrentStackAddendum,
35+
} = require('ReactComponentTreeHook');
3436
}
3537

3638
function getDeclarationErrorAddendum() {
@@ -122,7 +124,7 @@ function validateExplicitKey(element, parentType) {
122124
'%s%s See https://fb.me/react-warning-keys for more information.%s',
123125
currentComponentErrorInfo,
124126
childOwner,
125-
ReactComponentTreeHook.getCurrentStackAddendum(element)
127+
getCurrentStackAddendum(element)
126128
);
127129
}
128130

@@ -225,7 +227,7 @@ var ReactElementValidator = {
225227
info += getDeclarationErrorAddendum();
226228
}
227229

228-
info += ReactComponentTreeHook.getCurrentStackAddendum();
230+
info += getCurrentStackAddendum();
229231

230232
warning(
231233
false,

src/isomorphic/hooks/ReactComponentTreeHook.js

Lines changed: 11 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,13 @@
1313
'use strict';
1414

1515
var ReactCurrentOwner = require('ReactCurrentOwner');
16-
var ReactTypeOfWork = require('ReactTypeOfWork');
1716
var {
18-
IndeterminateComponent,
19-
FunctionalComponent,
20-
ClassComponent,
21-
HostComponent,
22-
} = ReactTypeOfWork;
23-
24-
var getComponentName = require('getComponentName');
17+
getStackAddendumByWorkInProgressFiber,
18+
describeComponentFrame,
19+
} = require('ReactFiberComponentTreeHook');
2520
var invariant = require('fbjs/lib/invariant');
2621
var warning = require('fbjs/lib/warning');
22+
var getComponentName = require('getComponentName');
2723

2824
import type { ReactElement, Source } from 'ReactElementType';
2925
import type { DebugID } from 'ReactInstanceType';
@@ -159,17 +155,6 @@ function purgeDeep(id) {
159155
}
160156
}
161157

162-
function describeComponentFrame(name, source, ownerName) {
163-
return '\n in ' + (name || 'Unknown') + (
164-
source ?
165-
' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' +
166-
source.lineNumber + ')' :
167-
ownerName ?
168-
' (created by ' + ownerName + ')' :
169-
''
170-
);
171-
}
172-
173158
function getDisplayName(element: ?ReactElement): string {
174159
if (element == null) {
175160
return '#empty';
@@ -183,10 +168,11 @@ function getDisplayName(element: ?ReactElement): string {
183168
}
184169

185170
function describeID(id: DebugID): string {
186-
var name = ReactComponentTreeHook.getDisplayName(id);
187-
var element = ReactComponentTreeHook.getElement(id);
188-
var ownerID = ReactComponentTreeHook.getOwnerID(id);
189-
var ownerName;
171+
const name = ReactComponentTreeHook.getDisplayName(id);
172+
const element = ReactComponentTreeHook.getElement(id);
173+
const ownerID = ReactComponentTreeHook.getOwnerID(id);
174+
let ownerName;
175+
190176
if (ownerID) {
191177
ownerName = ReactComponentTreeHook.getDisplayName(ownerID);
192178
}
@@ -196,26 +182,7 @@ function describeID(id: DebugID): string {
196182
'building stack',
197183
id
198184
);
199-
return describeComponentFrame(name, element && element._source, ownerName);
200-
}
201-
202-
function describeFiber(fiber : Fiber) : string {
203-
switch (fiber.tag) {
204-
case IndeterminateComponent:
205-
case FunctionalComponent:
206-
case ClassComponent:
207-
case HostComponent:
208-
var owner = fiber._debugOwner;
209-
var source = fiber._debugSource;
210-
var name = getComponentName(fiber);
211-
var ownerName = null;
212-
if (owner) {
213-
ownerName = getComponentName(owner);
214-
}
215-
return describeComponentFrame(name, source, ownerName);
216-
default:
217-
return '';
218-
}
185+
return describeComponentFrame(name || '', element && element._source, ownerName || '');
219186
}
220187

221188
var ReactComponentTreeHook = {
@@ -356,7 +323,7 @@ var ReactComponentTreeHook = {
356323
const workInProgress = ((currentOwner : any) : Fiber);
357324
// Safe because if current owner exists, we are reconciling,
358325
// and it is guaranteed to be the work-in-progress version.
359-
info += ReactComponentTreeHook.getStackAddendumByWorkInProgressFiber(workInProgress);
326+
info += getStackAddendumByWorkInProgressFiber(workInProgress);
360327
} else if (typeof currentOwner._debugID === 'number') {
361328
info += ReactComponentTreeHook.getStackAddendumByID(currentOwner._debugID);
362329
}
@@ -373,20 +340,6 @@ var ReactComponentTreeHook = {
373340
return info;
374341
},
375342

376-
// This function can only be called with a work-in-progress fiber and
377-
// only during begin or complete phase. Do not call it under any other
378-
// circumstances.
379-
getStackAddendumByWorkInProgressFiber(workInProgress : Fiber) : string {
380-
var info = '';
381-
var node = workInProgress;
382-
do {
383-
info += describeFiber(node);
384-
// Otherwise this return pointer might point to the wrong tree:
385-
node = node.return;
386-
} while (node);
387-
return info;
388-
},
389-
390343
getChildIDs(id: DebugID): Array<DebugID> {
391344
var item = getItem(id);
392345
return item ? item.childIDs : [];

src/renderers/dom/shared/hooks/ReactDOMInvalidARIAHook.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,23 @@
1212
'use strict';
1313

1414
var DOMProperty = require('DOMProperty');
15-
var ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');
1615
var ReactDebugCurrentFiber = require('ReactDebugCurrentFiber');
1716

1817
var warning = require('fbjs/lib/warning');
1918

2019
var warnedProperties = {};
2120
var rARIA = new RegExp('^(aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');
2221

22+
if (__DEV__) {
23+
var {
24+
getStackAddendumByID,
25+
} = require('react/lib/ReactComponentTreeHook');
26+
}
27+
2328
function getStackAddendum(debugID) {
2429
if (debugID != null) {
2530
// This can only happen on Stack
26-
return ReactComponentTreeHook.getStackAddendumByID(debugID);
31+
return getStackAddendumByID(debugID);
2732
} else {
2833
// This can only happen on Fiber
2934
return ReactDebugCurrentFiber.getCurrentFiberStackAddendum();

src/renderers/dom/shared/hooks/ReactDOMNullInputValuePropHook.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,21 @@
1111

1212
'use strict';
1313

14-
var ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');
1514
var ReactDebugCurrentFiber = require('ReactDebugCurrentFiber');
16-
1715
var warning = require('fbjs/lib/warning');
1816

17+
if (__DEV__) {
18+
var {
19+
getStackAddendumByID,
20+
} = require('react/lib/ReactComponentTreeHook');
21+
}
22+
1923
var didWarnValueNull = false;
2024

2125
function getStackAddendum(debugID) {
2226
if (debugID != null) {
2327
// This can only happen on Stack
24-
return ReactComponentTreeHook.getStackAddendumByID(debugID);
28+
return getStackAddendumByID(debugID);
2529
} else {
2630
// This can only happen on Fiber
2731
return ReactDebugCurrentFiber.getCurrentFiberStackAddendum();

src/renderers/shared/fiber/ReactDebugCurrentFiber.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type LifeCyclePhase = 'render' | 'getChildContext';
1818

1919
if (__DEV__) {
2020
var getComponentName = require('getComponentName');
21-
var { getStackAddendumByWorkInProgressFiber } = require('react/lib/ReactComponentTreeHook');
21+
var { getStackAddendumByWorkInProgressFiber } = require('ReactFiberComponentTreeHook');
2222
}
2323

2424
function getCurrentFiberOwnerName() : string | null {

src/renderers/shared/fiber/ReactFiberScheduler.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ var {
3737
const { reset } = require('ReactFiberStack');
3838
var {
3939
getStackAddendumByWorkInProgressFiber,
40-
} = require('react/lib/ReactComponentTreeHook');
40+
} = require('ReactFiberComponentTreeHook');
4141
var { logCapturedError } = require('ReactFiberErrorLogger');
4242
var { invokeGuardedCallback } = require('ReactErrorUtils');
4343

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
* Copyright 2016-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
* @flow
10+
* @providesModule ReactFiberComponentTreeHook
11+
*/
12+
13+
'use strict';
14+
15+
var ReactTypeOfWork = require('ReactTypeOfWork');
16+
var {
17+
IndeterminateComponent,
18+
FunctionalComponent,
19+
ClassComponent,
20+
HostComponent,
21+
} = ReactTypeOfWork;
22+
var getComponentName = require('getComponentName');
23+
24+
import type { Fiber } from 'ReactFiber';
25+
26+
function describeComponentFrame(name, source: any, ownerName) {
27+
return '\n in ' + (name || 'Unknown') + (
28+
source ?
29+
' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' +
30+
source.lineNumber + ')' :
31+
ownerName ?
32+
' (created by ' + ownerName + ')' :
33+
''
34+
);
35+
}
36+
37+
function describeFiber(fiber : Fiber) : string {
38+
switch (fiber.tag) {
39+
case IndeterminateComponent:
40+
case FunctionalComponent:
41+
case ClassComponent:
42+
case HostComponent:
43+
var owner = fiber._debugOwner;
44+
var source = fiber._debugSource;
45+
var name = getComponentName(fiber);
46+
var ownerName = null;
47+
if (owner) {
48+
ownerName = getComponentName(owner);
49+
}
50+
return describeComponentFrame(name, source, ownerName);
51+
default:
52+
return '';
53+
}
54+
}
55+
56+
// This function can only be called with a work-in-progress fiber and
57+
// only during begin or complete phase. Do not call it under any other
58+
// circumstances.
59+
function getStackAddendumByWorkInProgressFiber(workInProgress : Fiber) : string {
60+
var info = '';
61+
var node = workInProgress;
62+
do {
63+
info += describeFiber(node);
64+
// Otherwise this return pointer might point to the wrong tree:
65+
node = node.return;
66+
} while (node);
67+
return info;
68+
}
69+
70+
module.exports = {
71+
getStackAddendumByWorkInProgressFiber,
72+
describeComponentFrame,
73+
};

0 commit comments

Comments
 (0)