Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/isomorphic/classic/element/ReactDebugCurrentFrame.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ const ReactDebugCurrentFrame = {};
if (__DEV__) {
var {
getStackAddendumByID,
getStackAddendumByWorkInProgressFiber,
getCurrentStackAddendum,
} = require('ReactComponentTreeHook');
var {
getStackAddendumByWorkInProgressFiber,
} = require('ReactFiberComponentTreeHook');

// Component that is being worked on
ReactDebugCurrentFrame.current = (null : Fiber | DebugID | null);
Expand Down
8 changes: 5 additions & 3 deletions src/isomorphic/classic/element/ReactElementValidator.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
'use strict';

var ReactCurrentOwner = require('ReactCurrentOwner');
var ReactComponentTreeHook = require('ReactComponentTreeHook');
var ReactElement = require('ReactElement');

var checkReactTypeSpec = require('checkReactTypeSpec');
Expand All @@ -31,6 +30,9 @@ var getIteratorFn = require('getIteratorFn');
if (__DEV__) {
var warning = require('fbjs/lib/warning');
var ReactDebugCurrentFrame = require('ReactDebugCurrentFrame');
var {
getCurrentStackAddendum,
} = require('ReactComponentTreeHook');
}

function getDeclarationErrorAddendum() {
Expand Down Expand Up @@ -122,7 +124,7 @@ function validateExplicitKey(element, parentType) {
'%s%s See https://fb.me/react-warning-keys for more information.%s',
currentComponentErrorInfo,
childOwner,
ReactComponentTreeHook.getCurrentStackAddendum(element)
getCurrentStackAddendum(element)
);
}

Expand Down Expand Up @@ -225,7 +227,7 @@ var ReactElementValidator = {
info += getDeclarationErrorAddendum();
}

info += ReactComponentTreeHook.getCurrentStackAddendum();
info += getCurrentStackAddendum();

warning(
false,
Expand Down
69 changes: 11 additions & 58 deletions src/isomorphic/hooks/ReactComponentTreeHook.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,13 @@
'use strict';

var ReactCurrentOwner = require('ReactCurrentOwner');
var ReactTypeOfWork = require('ReactTypeOfWork');
var {
IndeterminateComponent,
FunctionalComponent,
ClassComponent,
HostComponent,
} = ReactTypeOfWork;

var getComponentName = require('getComponentName');
getStackAddendumByWorkInProgressFiber,
describeComponentFrame,
} = require('ReactFiberComponentTreeHook');
var invariant = require('fbjs/lib/invariant');
var warning = require('fbjs/lib/warning');
var getComponentName = require('getComponentName');

import type { ReactElement, Source } from 'ReactElementType';
import type { DebugID } from 'ReactInstanceType';
Expand Down Expand Up @@ -159,17 +155,6 @@ function purgeDeep(id) {
}
}

function describeComponentFrame(name, source, ownerName) {
return '\n in ' + (name || 'Unknown') + (
source ?
' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' +
source.lineNumber + ')' :
ownerName ?
' (created by ' + ownerName + ')' :
''
);
}

function getDisplayName(element: ?ReactElement): string {
if (element == null) {
return '#empty';
Expand All @@ -183,10 +168,11 @@ function getDisplayName(element: ?ReactElement): string {
}

function describeID(id: DebugID): string {
var name = ReactComponentTreeHook.getDisplayName(id);
var element = ReactComponentTreeHook.getElement(id);
var ownerID = ReactComponentTreeHook.getOwnerID(id);
var ownerName;
const name = ReactComponentTreeHook.getDisplayName(id);
const element = ReactComponentTreeHook.getElement(id);
const ownerID = ReactComponentTreeHook.getOwnerID(id);
let ownerName;

if (ownerID) {
ownerName = ReactComponentTreeHook.getDisplayName(ownerID);
}
Expand All @@ -196,26 +182,7 @@ function describeID(id: DebugID): string {
'building stack',
id
);
return describeComponentFrame(name, element && element._source, ownerName);
}

function describeFiber(fiber : Fiber) : string {
switch (fiber.tag) {
case IndeterminateComponent:
case FunctionalComponent:
case ClassComponent:
case HostComponent:
var owner = fiber._debugOwner;
var source = fiber._debugSource;
var name = getComponentName(fiber);
var ownerName = null;
if (owner) {
ownerName = getComponentName(owner);
}
return describeComponentFrame(name, source, ownerName);
default:
return '';
}
return describeComponentFrame(name || '', element && element._source, ownerName || '');
}

var ReactComponentTreeHook = {
Expand Down Expand Up @@ -356,7 +323,7 @@ var ReactComponentTreeHook = {
const workInProgress = ((currentOwner : any) : Fiber);
// Safe because if current owner exists, we are reconciling,
// and it is guaranteed to be the work-in-progress version.
info += ReactComponentTreeHook.getStackAddendumByWorkInProgressFiber(workInProgress);
info += getStackAddendumByWorkInProgressFiber(workInProgress);
} else if (typeof currentOwner._debugID === 'number') {
info += ReactComponentTreeHook.getStackAddendumByID(currentOwner._debugID);
}
Expand All @@ -373,20 +340,6 @@ var ReactComponentTreeHook = {
return info;
},

// This function can only be called with a work-in-progress fiber and
// only during begin or complete phase. Do not call it under any other
// circumstances.
getStackAddendumByWorkInProgressFiber(workInProgress : Fiber) : string {
var info = '';
var node = workInProgress;
do {
info += describeFiber(node);
// Otherwise this return pointer might point to the wrong tree:
node = node.return;
} while (node);
return info;
},

getChildIDs(id: DebugID): Array<DebugID> {
var item = getItem(id);
return item ? item.childIDs : [];
Expand Down
9 changes: 7 additions & 2 deletions src/renderers/dom/shared/hooks/ReactDOMInvalidARIAHook.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,23 @@
'use strict';

var DOMProperty = require('DOMProperty');
var ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');
var ReactDebugCurrentFiber = require('ReactDebugCurrentFiber');

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

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

if (__DEV__) {
var {
getStackAddendumByID,
} = require('react/lib/ReactComponentTreeHook');
}

function getStackAddendum(debugID) {
if (debugID != null) {
// This can only happen on Stack
return ReactComponentTreeHook.getStackAddendumByID(debugID);
return getStackAddendumByID(debugID);
} else {
// This can only happen on Fiber
return ReactDebugCurrentFiber.getCurrentFiberStackAddendum();
Expand Down
10 changes: 7 additions & 3 deletions src/renderers/dom/shared/hooks/ReactDOMNullInputValuePropHook.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,21 @@

'use strict';

var ReactComponentTreeHook = require('react/lib/ReactComponentTreeHook');
var ReactDebugCurrentFiber = require('ReactDebugCurrentFiber');

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

if (__DEV__) {
var {
getStackAddendumByID,
} = require('react/lib/ReactComponentTreeHook');
}

var didWarnValueNull = false;

function getStackAddendum(debugID) {
if (debugID != null) {
// This can only happen on Stack
return ReactComponentTreeHook.getStackAddendumByID(debugID);
return getStackAddendumByID(debugID);
} else {
// This can only happen on Fiber
return ReactDebugCurrentFiber.getCurrentFiberStackAddendum();
Expand Down
2 changes: 1 addition & 1 deletion src/renderers/shared/fiber/ReactDebugCurrentFiber.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ type LifeCyclePhase = 'render' | 'getChildContext';

if (__DEV__) {
var getComponentName = require('getComponentName');
var { getStackAddendumByWorkInProgressFiber } = require('react/lib/ReactComponentTreeHook');
var { getStackAddendumByWorkInProgressFiber } = require('ReactFiberComponentTreeHook');
}

function getCurrentFiberOwnerName() : string | null {
Expand Down
2 changes: 1 addition & 1 deletion src/renderers/shared/fiber/ReactFiberScheduler.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ var {
const { reset } = require('ReactFiberStack');
var {
getStackAddendumByWorkInProgressFiber,
} = require('react/lib/ReactComponentTreeHook');
} = require('ReactFiberComponentTreeHook');
var { logCapturedError } = require('ReactFiberErrorLogger');
var { invokeGuardedCallback } = require('ReactErrorUtils');

Expand Down
73 changes: 73 additions & 0 deletions src/shared/ReactFiberComponentTreeHook.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Copyright 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @flow
* @providesModule ReactFiberComponentTreeHook
*/

'use strict';

var ReactTypeOfWork = require('ReactTypeOfWork');
var {
IndeterminateComponent,
FunctionalComponent,
ClassComponent,
HostComponent,
} = ReactTypeOfWork;
var getComponentName = require('getComponentName');

import type { Fiber } from 'ReactFiber';

function describeComponentFrame(name, source: any, ownerName) {
return '\n in ' + (name || 'Unknown') + (
source ?
' (at ' + source.fileName.replace(/^.*[\\\/]/, '') + ':' +
source.lineNumber + ')' :
ownerName ?
' (created by ' + ownerName + ')' :
''
);
}

function describeFiber(fiber : Fiber) : string {
switch (fiber.tag) {
case IndeterminateComponent:
case FunctionalComponent:
case ClassComponent:
case HostComponent:
var owner = fiber._debugOwner;
var source = fiber._debugSource;
var name = getComponentName(fiber);
var ownerName = null;
if (owner) {
ownerName = getComponentName(owner);
}
return describeComponentFrame(name, source, ownerName);
default:
return '';
}
}

// This function can only be called with a work-in-progress fiber and
// only during begin or complete phase. Do not call it under any other
// circumstances.
function getStackAddendumByWorkInProgressFiber(workInProgress : Fiber) : string {
var info = '';
var node = workInProgress;
do {
info += describeFiber(node);
// Otherwise this return pointer might point to the wrong tree:
node = node.return;
} while (node);
return info;
}

module.exports = {
getStackAddendumByWorkInProgressFiber,
describeComponentFrame,
};