Commit Graph
19509 Commits
Author SHA1 Message Date
Eli WhiteandFacebook Github Bot 9fdb96eec7 Partial React Sync from 241c4467e...00d8e5b80
Summary:
- **[00d8e5b80](https://github.com/facebook/react/commit/00d8e5b80 )**: [Fabric] Fix targetAsInstance dispatchEvent "cannot read property of null" (#18156) //<Joshua Gross>//
- **[ad84625f8](https://github.com/facebook/react/commit/ad84625f8 )**: [Native] Migrate focus/blur to call TextInputState with the host component (#18068) //<Eli White>//
- **[edab5c074](https://github.com/facebook/react/commit/edab5c074 )**: Re-throw errors thrown by the renderer at the root in the complete phase (#18029) //<Andrew Clark>//
- **[a6dfe9aa4](https://github.com/facebook/react/commit/a6dfe9aa4 )**: [Native] Delete NativeComponent and NativeMethodsMixin (#18036) //<Eli White>//

Changelog:
[General][React] Partial React Sync from 241c4467e...00d8e5b80

Reviewed By: JoshuaGross

Differential Revision: D20153744

fbshipit-source-id: 09c5fec620370f1844a89af1c6ba2d487020216d
2020-02-27 19:39:26 -08:00
Mo GorhomandFacebook Github Bot 576ddfb3a8 Dark mode support for RCTPerfMonitor (#28130)
Summary:
Hi There 👋,

While I'm developing on iOS with dark appearance enabled, i notice that `Pref Monitor` view doesn't support dark mode yet, so here is the PR to fix it :)

## Changelog

[iOS] [Fixed] - Fix Pref Monitor in dark appearance
Pull Request resolved: https://github.com/facebook/react-native/pull/28130

Test Plan:
Run any React Native app on iOS > Turn on dark appearance
### Before
![Before](https://user-images.githubusercontent.com/4061838/74872974-8b75b600-535e-11ea-8550-763a598547ec.png)
### After
![After](https://user-images.githubusercontent.com/4061838/74872978-8ca6e300-535e-11ea-9862-4d3014e849f7.png)

Reviewed By: RSNara

Differential Revision: D20080019

Pulled By: PeteTheHeat

fbshipit-source-id: 9365daa3f7193a11760bc1372b8de2c3896def5c
2020-02-27 17:31:23 -08:00
Ramanpreet NaraandFacebook Github Bot 6a9a76e420 Make RCTDevLoadingView TurboModule-compatible
Summary:
This is a redo of D16969764, with a few extensions.

## Changes
1. Move `RCTDevLoadingView.{h,m}` to `CoreModuels/RCTDevLoadingView.{h,mm}`
2. Extract ObjC API of `RCTDevLodingView` into `RCTDevLoadingViewProtocol` in `ReactInternal`.
3. Create API `RCTDevLoadingViewSetEnabled.h` in `ReactInternal` to enable/disable `RCTDevLoadingView`

Changelog:
[iOS][Added] - Make RCTDevLoadingView TurboModule-compatible

Reviewed By: PeteTheHeat

Differential Revision: D18642554

fbshipit-source-id: 6b62e27e128d98254b7a6d018399ec1c06e274fc
2020-02-27 17:06:13 -08:00
Tommy NguyenandFacebook Github Bot 32127e8160 Improvements to app bundle size reports (#28169)
Summary:
Make the Android app bundle size report more legible, and update existing reports if possible.

## Changelog

[Internal] [Changed] - Update existing app bundle size report if possible
[Internal] [Changed] - Generate table for APK sizes report
Pull Request resolved: https://github.com/facebook/react-native/pull/28169

Test Plan:
- App bundle size reports should be updated when possible
- Android apk sizes should be reported using a table

Reviewed By: cpojer

Differential Revision: D20141490

Pulled By: hramos

fbshipit-source-id: 3fc1b808b27e893c0a3e4e34eafc39094448799c
2020-02-27 13:52:14 -08:00
Valentin SherginandFacebook Github Bot 041ce53002 Proper nativeID prop type in UIView+React category implementation
Summary:
`nativeId` type is `NSString`, not `NSNumber`. The `.h` file already has the proper type but `.mm` had a wrong one.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D20135465

fbshipit-source-id: e5f9fbf4940d3883334c910f96f0aa850a069d8c
2020-02-27 13:05:22 -08:00
Emily JanzerandFacebook Github Bot 5ff9ae4a46 Refactor reloadJSFromServer to use a callback internally
Summary:
This is step 3 in creating a new DevSupportManager with a better async API for loading the JS bundle from Metro.

Right now DevSupportManagerImpl calls a method on its ReactInstanceManagerDevHelper delegate when the JS bundle is done being downloaded from the server. However, I want to move to a callback-based method for bridgeless mode (similar to packager status). In this diff, I'm adding a protected method that uses a callback, and then calling that from `reloadJSFromServer` with a callback that calls the delegate, to preserve existing behavior.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D19871102

fbshipit-source-id: 2dbb6b91c5b927df86c3db42aa11e080d57ea78e
2020-02-27 12:36:30 -08:00
Emily JanzerandFacebook Github Bot 506e3a208e Create AsyncDevSupportManager + associated classes
Summary:
This is the second step in creating a new DevSupportManager impl with more async-friendly APIs for bundle loading, which I'll use in bridgeless mode. This diff creates a new interface, AsyncDevSupportManager, and two implementations, mirroring what we currently have.

This new interface doesn't define any methods yet.

Changelog: [Android][Changed] Specify DevSupportManager.setPackagerLocationCustomizer in DevSupportManager impls

Reviewed By: mdvacca

Differential Revision: D19870812

fbshipit-source-id: 042a43e1a3055aba6d7325f948060300b5bf17f3
2020-02-27 12:36:30 -08:00
Emily JanzerandFacebook Github Bot 3f13c9abe6 Split DevSupportManagerImpl into DevSupportManagerBase + Impl
Summary:
This is the first step for adding my own async APIs for DevSupportManager to use in bridgeless mode.

To avoid having to add these APIs to the DevSupportManager interface + both of its implementations, I'm instead splitting DevSupportManager into a base class + final impl so I can more easily share logic with the new impl I'll create.

Changelog: [Internal]

Reviewed By: RSNara

Differential Revision: D19846619

fbshipit-source-id: c67b0231f4e6581fb484f9a4899ed0b7f08fb684
2020-02-27 12:36:29 -08:00
Hans HalversonandFacebook Github Bot a3d9e91203 Move suppression to primary locations in xplat/js
Summary:
We will soon be enforcing that flow suppressions will only apply when on an error's primary location ([post](https://fb.workplace.com/groups/179614562644215/permalink/559286354677032/)). This diff uses the codemod created in D20008770 to move all suppression comments to their primary locations in the  `xplat/js` flow root, and deletes suppression comments that are not on any primary locations.

This diff was generated with:
```
~/fbsource/fbcode/flow/packages/flow-dev-tools/bin/tool suppression-primary-locations --json-file ~/www/errors.json  ~/fbsource/xplat/js
hg st -n | xargs grep -l -P '@(partially-)?generated' | xargs hg revert
hg st -n | xargs grep -l 'format' | xargs prettier --write
```

Changelog: [Internal]

bypass-lint

Reviewed By: dsainati1

Differential Revision: D20122544

fbshipit-source-id: d94e409aadb18bb399a1ddbf9f3f2494fe4fb54c
2020-02-27 12:14:57 -08:00
Valentin SherginandFacebook Github Bot dbc35267a0 Fabric: Removing unnecessary code fragments
Summary:
Those `true &&` code fragments don't look intentional.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D20135541

fbshipit-source-id: a7f2a99b2cbcd82023ec40c6b6211ad4f91d65a4
2020-02-27 09:46:29 -08:00
Ram NandFacebook Github Bot 3498b3b96b Check null values in shouldAnimate
Summary:
Looks like there could be cases when the NativeHirearchyManager may be asking if it should animate on a view that has been removed. Adding a null check

Changelog:
[General] [Fixed] - Check null values in shouldAnimate

Reviewed By: makovkastar

Differential Revision: D20063054

fbshipit-source-id: 5b3b1c27b9aba57a592bd8d4e27a970cf0912b5d
2020-02-27 09:22:13 -08:00
Héctor RamosandFacebook Github Bot 8ae3174873 Run clang-format and apply patches
Summary:
Run clang-format and add .clang-tidy with `clang-diagnostic-*` to several more directories in order to catch any problems.

Changelog:
[Internal]

Reviewed By: shergin

Differential Revision: D19860169

fbshipit-source-id: 7785aab010c8e6945cc6b5c9b68cb8ee0cdbb7fa
2020-02-27 08:29:30 -08:00
Jason SafaiyehandFacebook Github Bot f0c7178a3a Update engines to node >=10 (#28174)
Summary:
v8 dropped out of LTS support, updating the package.json engines to node v10.

## Changelog

[General] [Changed] - Bump supported Node engines to >= 10
Pull Request resolved: https://github.com/facebook/react-native/pull/28174

Reviewed By: cpojer

Differential Revision: D20107977

Pulled By: hramos

fbshipit-source-id: 795cce79eb32f34e19d20bb8684b898b26e07228
2020-02-27 07:06:29 -08:00
Nick GerlemanandFacebook Github Bot 427ba359e0 Stamp React Native Version Into C++ Code (#28036)
Summary:
The PlatformConstants native module exposes the ability to query the React
Native version used to build native code. This is managed on iOS and Android by
a version bumping script, which replaces module code based on a template.

It is currently difficult to accurately determine this version for out-of-tree C++
platforms (I.e. React Native Windows). The version of upstream react-native we resolve to is ultimately
dependent on the version of react-native chosen a peer dependency, which is not
neccesarily constant given a build of react-native-windows.

We could try to hack around this, and make our native build try to reason about
the resolved pacakge for react-native using a lockfile, but a much cleaner
solution is to embed version into C++ code, similar to what is done for Android
and iOS. This change does that, adding a header with React Native version and
updating the build stamping script to write to it.

Usage sample:

```c++
  constants["reactNativeVersion"] = folly::dynamic::object();
  constants["reactNativeVersion"]["major"] = ReactNativeVersion.Major;
  constants["reactNativeVersion"]["minor"] = ReactNativeVersion.Minor;
  constants["reactNativeVersion"]["patch"] = ReactNativeVersion.Patch;
```
## Changelog

[General] [Added] - Stamp React Native Version Into C++ Code
Pull Request resolved: https://github.com/facebook/react-native/pull/28036

Test Plan: Validated that the bumping script will accurately update the header, can compile under both MSVC and Clang.

Differential Revision: D19865992

Pulled By: hramos

fbshipit-source-id: 9e0b8e9519015bb62c60b9935a234cd367a1926a
2020-02-27 06:42:14 -08:00
Samuel SuslaandFacebook Github Bot d33ead3f16 Fix matricesDiffer ignoring first value of matrix
Summary:
Changelog: [internal]

# Problem

Implementation of `matricesDiffer` was ignoring first element in the matrix, therefore two matrixes that were different were actually evaluated as same and React didn't pass value to native.

# Solution

Take first element in the matrix into account when comparing matrices.

Reviewed By: cpojer

Differential Revision: D20117210

fbshipit-source-id: 84c3b4e580da44bda4fc8bd8669318282ae9aa32
2020-02-27 05:43:02 -08:00
Joshua GrossandFacebook Github Bot 6beee039a2 Don't crash in dev if ViewCommand is sent to nonexistent tag
Summary:
We were already doing this for ViewCommands sent with integer IDs; we should do the same for now with String commands. Otherwise, screens with TextInputs are unusable during development because these exceptions are thrown very often around reload and navigation.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D20127446

fbshipit-source-id: a5d65ff6ae5b520fd0efffa5c325b5cca3bd53a0
2020-02-26 23:32:24 -08:00
Valentin SherginandFacebook Github Bot 1aab70d0e2 Fabric: RootShadowNode::clone was renamed/moved to ShadowNode::cloneTree
Summary:
Cloning subtrees is not something specific to a RootNode, so it makes sense to have it in ShadowNode. Soon we will use that to clone subtrees inside Paragraph component to implement Inline Views.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20090666

fbshipit-source-id: 0a64ef9bda438cd55d5fd21d3ad83b36221fa89e
2020-02-26 22:08:22 -08:00
Valentin SherginandFacebook Github Bot 011b470961 Fabric: Introducing LayoutableShadowNode::layoutTree
Summary:
All logic that is performed on the root node only was moved from `layout` to a separate methods `layoutTree`. That makes the code simpler and allows reusing `layoutTree` in InlineViews feature.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20052025

fbshipit-source-id: 3070a1cca4e322c6d077ede751ea80359c96a600
2020-02-26 22:08:22 -08:00
Valentin SherginandFacebook Github Bot 1801d63de2 Fabric: Deleting YogaLayoutableShadowNode::getYogaLayoutableChildren
Summary:
We don't use it anymore.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20052019

fbshipit-source-id: b829e7bbf0768588c2f0f28c59bf8f85054408b7
2020-02-26 22:08:22 -08:00
Valentin SherginandFacebook Github Bot 6a88e94326 Fabric: YogaLayoutableShadowNode::updateYogaChildren
Summary:
Similar to a previous diff but for `setChildren`.
`YogaLayoutableShadowNode::setChildren()` was renamed to `YogaLayoutableShadowNode::updateYogaChildren()`. Now we don't need to pass an argument to this function because the object is already initialized. The new name also disambiguates this method with `getChildren()` from `ShadowNode` (which does something completely different). The rest of the changes is just type adjustments.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20052031

fbshipit-source-id: 6157cad9b55d4cdd97ce04e1278ac1369bfb96bc
2020-02-26 22:08:21 -08:00
Valentin SherginandFacebook Github Bot 191d65ec4e Fabric: YogaLayoutableShadowNode::setProps() was replaced with updateYogaProps()
Summary:
`YogaLayoutableShadowNode::setProps()` was renamed to `YogaLayoutableShadowNode::updateYogaProps()`. Now we don't need to pass an argument to this function because the object is already initialized. The new name also disambiguates this method with `getProp()` from `ShadowNode` (which does something completely different).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052018

fbshipit-source-id: 4d9651bb4452408708fa1b36bb5c5c8639f7d1bb
2020-02-26 22:08:21 -08:00
Valentin SherginandFacebook Github Bot 124c20b2b1 Fabric: Removing ConcreteShadowNode::getChildrenSlice
Summary:
We don't use it anymore.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC, mdvacca

Differential Revision: D20052028

fbshipit-source-id: 22c46b90d87b55465d3549c6de24393c33375833
2020-02-26 22:08:21 -08:00
Valentin SherginandFacebook Github Bot 33bf310920 Fabric: YogaStylableProps now inherits Props
Summary:
How we can finally make `ViewProps` inherit `YogaStylableProps` and remove `dynamic_cast`. This overall change is aligned with D19963353.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052026

fbshipit-source-id: 1066f9a259b50d4672111c9c03a71c2590d59aca
2020-02-26 22:08:20 -08:00
Valentin SherginandFacebook Github Bot 6d10310733 Fabric: Removing a couple of (ViewProps and YogaStylableProps) constructors
Summary:
Here we delete several constructors that were needed only because `YogaLayoutableShadowNode::yogaStyle` was private (which is not true anymore).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC, mdvacca

Differential Revision: D20052033

fbshipit-source-id: c2afcaf2fdebb65cdcde6c214c8b78aa35d45e91
2020-02-26 22:08:20 -08:00
Valentin SherginandFacebook Github Bot cdbc21132b Fabric: Refinement of BaseTraits chain
Summary:
Here we refine the `ShadowNode::BaseTraits` static method. Before this change, ConcreteViewShadowNode<> enforces Layoutable and YogaLayoutable traits. This change moves that responsibility to LayoutableShadowNode and YogaLayoutableShadowNode which makes overall logic more coherent.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052027

fbshipit-source-id: fd25264204b0232b1dbbff6f9dfefd9fbcb146c4
2020-02-26 22:08:20 -08:00
Valentin SherginandFacebook Github Bot 0c50ba5376 Fabric: Moving logic from ConcreteViewShadowNode constructors to YogaLayoutableShadowNode constructors
Summary:
Now we can move custom to `YogaLayoutableShadowNode` code from `ConcreteViewShadowNode<>` template to `YogaLayoutableShadowNode` itself reducing the amount of templated code and reduce overall complexity.

Note, here we have to do `dynamic_cast` for now, we will address that in coming diffs.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20052021

fbshipit-source-id: dac5969a97b75e54c7728a1ca8161922bd2245ca
2020-02-26 22:08:19 -08:00
Valentin SherginandFacebook Github Bot 6f08c37633 Fabric: getLayoutableChildNodes was de-virtualized and moved to LayoutableShadowNode
Summary:
The fact that `LayoutableShadowNode` now inherits `ShadowNode` allows us to de-virtualize `getLayoutableChildNodes` and move that to `LayoutableShadowNode`. Less code, less virtual dispatch, less complexity.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052032

fbshipit-source-id: 580e86b5a746028e470788e00027f247bf77126c
2020-02-26 22:08:19 -08:00
Valentin SherginandFacebook Github Bot 5bf6726bae Fabric: Stop using getChildrenSlice in ConcreteViewShadowNode
Summary:
D19963353 mentioned the infrastructure that re-routes methods calls related to adding and cloning children between YogaLayoutableShadowNode and ShadowNode. `cloneAndReplaceChild` is exactly this. It was implemented as a virtual method that is called from `ConcreteViewShadowNode`. The whole process requires building a list of children of some class and passing that as a list of pointers. Now we don't need it all that because we can call directly and statically. That change will allow us to simplify that infra even more in the future diffs.

With all previous changes, now we can implement `getYogaLayoutableChildren` inside `YogaLayoutableShadowNode` and call that statically. Eventually, that will allow us to remove templated `getChildrenSlice`. Previously the call for that method must be in `ConcreteViewShadowNode`, now it's not true anymore which we will use later to even better goodness.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: mdvacca

Differential Revision: D20052020

fbshipit-source-id: e5c819a4d21b2dbcd08f3439e1783e3a9cba5ef4
2020-02-26 22:08:18 -08:00
Valentin SherginandFacebook Github Bot 7953c3e854 Fabric: Devirtualizing LayoutableShadowNode::cloneAndReplaceChild
Summary:
D19963353 mentioned the infrastructure that re-routes methods calls related to adding and cloning children between YogaLayoutableShadowNode and ShadowNode. `cloneAndReplaceChild` is exactly this. It was implemented as a virtual method that is called from `ConcreteViewShadowNode`. The whole process requires building a list of children of some class and passing that as a list of pointers. Now we don't need it all that because we can call directly and statically. That change will allow us to simplify that infra even more in the future diffs.
 Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052022

fbshipit-source-id: ddf341c112edd8a2f79eaf74465a9a360a168541
2020-02-26 22:08:18 -08:00
Valentin SherginandFacebook Github Bot 1090b05e61 Fabric: Using traitCast in UIManager
Summary:
This is another perf-critical place where using traitCast should help with perf.
After this change we practically will not have any `dynamic_cast`s (except those which will be delited (with methods where they are used) in the future diffs).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052029

fbshipit-source-id: 63b589d3c3322f0afd72f18b4701fe31d0e05c2f
2020-02-26 22:08:18 -08:00
Valentin SherginandFacebook Github Bot 3400135487 Fabric: Using traitCast in layoutMetricsFromShadowNode
Summary:
We use this function in Diffing, and Diffing is one of the hottest pieces of Fabric. Removing `dynamic_cast` here should improve perf. See the previous diff for more details.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052023

fbshipit-source-id: d6427ebf076d7f8244f0aeaf16407efa2368957e
2020-02-26 22:08:17 -08:00
Valentin SherginandFacebook Github Bot b9e5ebd640 Fabric: Using traitCast in Differentiator
Summary:
The Diffing is one of the hottest pieces of Fabric. Removing dynamic_cast here should improve perf. See the previous diff for more details.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052030

fbshipit-source-id: 27fd9f34f2a1f9d22b9da6b1e3c1a2982045c07a
2020-02-26 22:08:17 -08:00
Valentin SherginandFacebook Github Bot fa773a1446 Fabric: Introducing ShadowNode traitCasts
Summary:
`traitCast` is a special form of static_cast that checks additional requirements (similar to `dynamic_cast`) before performing the cast. We will use that in many places in the coming diffs.

Restructuring the class hierarchy in the previous diff finally allows us to do static casts among ShadowNode and LayoutableShadowNode and other classes (previously it wasn't allowed because of lack of common base class).

Why we don't want to use `dynamic_cast`:
* It's expensive (and we need to do the cast on the hottest fragments of the framework). (See: (1) http://www.stroustrup.com/fast_dynamic_casting.pdf and (2) https://www.youtube.com/watch?v=ARYP83yNAWk Herb Sutter & proposal of `down_cast`).
* It's code-size inefficient, whereas `static_cast` has zero runtime and code-size overhead.
* Removing `dynamic_cast` will allow us finally to opt-out `RTTI` (additional code size and perm wins).

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D20052024

fbshipit-source-id: d293c1cf80deb7817d333d5306d6b32bf3abdb27
2020-02-26 22:08:17 -08:00
Valentin SherginandFacebook Github Bot 432b434b55 Fabric: LayoutableShadowNode now inherits ShadowNode
Summary:
This is a very crucial change, everything else in this stack depends on it.
Here is the set of constraints that we have for ShadowNode-based class hierarchy:
* `ShadowNode` is a base class that defines basic operations on the nodes. It does not have virtual methods by design (virtual dispatch hurts performance; we want to limit and centralize that in `ComponentDescriptor`s).
* `ConcreteShadowNode<>` template *statically* wires particular `ShadowNode` and particular `Props` establishing a type-safe relationship between them ensured on compile time.
* Not all `ShadowNode`s are "layoutable", not all "layoutable" `ShadowNode`s use Yoga to do layout.
* Layotability (and YogaLayotability) feature is implemented as two classes `LayoutableShadowNode` and `YogaLayoutableShadowNode`. These classes essentially need to know something about the ShadowNode nature of the object (get the list of children or replace some children).

Before the change, `LayoutableShadowNode` and `YogaLayoutableShadowNode`classes did not inherit `ShadowNode` because we don't want to use *virtual inheritance* for `ShadowNode`: `ConcreteShadowNode<>` already inherits `ShadowNode`, so if we make `LayoutableShadowNode` inherits `ShadowNode`, we will have to somehow flatten this inheritance hierarchy (and the virtual inheritance is an answer to that). (Yes, C++ supports multiple inheritance and virtual inheritance.)
Before this change, we solved this dilemma this way: We have a subclass-template `ConcreteViewShadowNode<>` that inherits `ConcreteShadowNode<>` and `YogaLayoutableShadowNode`. Then, we had a bunch of methods that implement the rerouting of some functionality from `YogaLayoutableShadowNode` to `ShadowNode` and vise-versa. (See the diagram "Before".)

That worked fine, except the caveats:
* That wiring is nasty, complex, hard to reason about and overall limiting.
* There is no way to statically cast `LayoutableShadowNode` to `ShadowNode` (because there is no common base class). That forces us to use dynamic_cast on some perf critical paths (including layout, diffing and so on).
* Adding features that rely on interop between `LayoutableShadowNode` and `ShadowNode` is a nightmare.

It should be a better way to deal with this dilemma, and this diff implements a different approach: We can have a base class of `ConcreteShadowNode<>` as a template parameter. With this approach, we can make `LayoutableShadowNode` inherit `ShadowNode` and when we need to instantiate a `ConcreteShadowNode<>` that needs to be layoutable, we can just specify `YogaLayoutableShadowNode` as a base class. (See the diagram "After".)

This simple change will allow us to simplify a lot of things. The rest of the stack is about getting rid of unnecessary moving parts. Which will finally allow us to build "Inline Views" feature.

```
╭──────────────────────╮
│ ◎ ○ ○ ░░░░░░░░░░░░░░░│
├──────────────────────┤
│                      │
│                      │
│        Before        │
│                      │              ┌────────────────────────────┐       ┌────────────────────────────┐
│                      │              │                            │       │                            │
│                      │              │         ShadowNode         │       │    LayoutableShadowNode    │
└──────────────────────┘              │                            │       │                            │
                                      └────────────────────────────┘       └────────────────────────────┘
                                                     ▲                                    ▲
                                                     │                                    │
                                      ╔════════════════════════════╗       ┌────────────────────────────┐
                                      ║                            ║       │                            │
                            ┌────────�║    ConcreteShadowNode<>    ║       │  YogaLayoutableShadowNode  │
                            │         ║                            ║       │                            │
                            │         ╚════════════════════════════╝       └────────────────────────────┘
                            │                        ▲                                    ▲
                            │                        │                                    │
                            │                        │                                    │
                            │                        │                                    │
                            │                        │     ╔════════════════════════════╗ │
                            │                        │     ║                            ║ │
                            │                        └─────║  ConcreteViewShadowNode<>  ║─┘
                            │                              ║                            ║
                            │                              ╚════════════════════════════╝
                            │                                             ▲
                            │                                             │
                            │                              ┌──────────────┴───────────────┐
                            │                              │                              │
                            │                              │                              │
                            │                              │                              │
             ┌────────────────────────────┐ ┌────────────────────────────┐ ┌────────────────────────────┐
             │                            │ │                            │ │                            │
             │       TextShadowNode       │ │       ViewShadowNode       │ │    ParagraphShadowNode     │
             │                            │ │                            │ │                            │
             └────────────────────────────┘ └────────────────────────────┘ └────────────────────────────┘

╭──────────────────────╮
│ ◎ ○ ○ ░░░░░░░░░░░░░░░│
├──────────────────────┤
│                      │                           ┌────────────────────────────┐
│                      │                           │                            │
│        After         │                           │         ShadowNode         │
│                      │                           │                            │
│                      │                           └────────────────────────────┘
│                      │                                          ▲
└──────────────────────┘     ┌────────────────────────────────────┤
                             │                                    │
                             │                     ╔════════════════════════════╗
              ┌────────────────────────────┐       ║     ConcreteShadowNode     ║
              │                            │       ║     <Base: ShadowNode>     ║
              │    LayoutableShadowNode    │       ║                            ║
              │                            │       ╚════════════════════════════╝
              └────────────────────────────┘                      ▲
                             ▲                                    │
                             │                     ┌────────────────────────────┐
              ┌────────────────────────────┐       │                            │
              │                            │       │       TextShadowNode       │
              │  YogaLayoutableShadowNode  │       │                            │
              │                            │       └────────────────────────────┘
              └────────────────────────────┘
                             ▲
                             │
              ╔════════════════════════════╗
              ║     ConcreteShadowNode     ║
              ║           <Base:           ║
              ║ YogaLayoutableShadowNode>  ║
              ╚════════════════════════════╝
                             ▲
                             │
              ╔════════════════════════════╗
              ║                            ║
              ║  ConcreteViewShadowNode<>  ║
              ║                            ║
              ╚════════════════════════════╝
                             ▲
                             ├─────────────────────────────────────┐
                             │                                     │
              ┌────────────────────────────┐        ┌────────────────────────────┐
              │                            │        │                            │
              │    ParagraphShadowNode     │        │       ViewShadowNode       │
              │                            │        │                            │
              └────────────────────────────┘        └────────────────────────────┘

```

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D19963353

fbshipit-source-id: b65c8a5064bdb54ab64f08a8e546aa9e2b5a486b
2020-02-26 22:08:16 -08:00
Valentin SherginandFacebook Github Bot 6589b64518 Codemod: Clang-format for all files in React/Fabric directory
Summary:
We are moving towards 100%-prettified files. That's another step when we apply Clang Format for `React/Fabric`.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D20112417

fbshipit-source-id: 020d818e5cb8e2f509c5276738c8f252f6817a56
2020-02-26 21:31:12 -08:00
Tommy NguyenandFacebook Github Bot d0a32c2011 iOS: Make RCTKeyWindow multi-window aware and add UIScene support to RCTRedBox (#28147)
Summary:
`RCTRedBox` doesn't appear in apps implementing `UISceneDelegate`.

## Changelog

[iOS] [Changed] - `RCTKeyWindow()` is now multi-window aware
[iOS] [Fixed] - `RCTRedBox` doesn't appear in apps implementing `UISceneDelegate`
Pull Request resolved: https://github.com/facebook/react-native/pull/28147

Test Plan:
- Trigger an error in RNTester
- Trigger an error in an app implementing `UISceneDelegate`

![Simulator Screen Shot - iPhone 11 Pro Max - 2020-02-21 at 14 17 54](https://user-images.githubusercontent.com/4123478/75037702-14066a80-54b5-11ea-9373-b56b467be845.png)

Reviewed By: PeteTheHeat

Differential Revision: D20036399

Pulled By: hramos

fbshipit-source-id: 07d83e985b02296f930114e3c7100c2077e82300
2020-02-26 19:55:14 -08:00
Tommy NguyenandFacebook Github Bot 74b667dbc2 iOS: Fix RCTDevLoadingView not showing up with UIScene (#27916)
Summary:
Attaches the loading view to a `UIScene` in apps using the new Scenes API (iOS 13+).

## Changelog

[iOS] [Fixed] - Fix RCTDevLoadingView not showing up with UIScene
Pull Request resolved: https://github.com/facebook/react-native/pull/27916

Test Plan:
Create a new app based on UIScene and integrate React Native.

| Before | After  |
|:------:|:------:|
 | <img width="453" alt="image" src="https://user-images.githubusercontent.com/4123478/73485717-eccfe800-43a3-11ea-96fd-f7077a348345.png"> | <img width="453" alt="image" src="https://user-images.githubusercontent.com/4123478/73485749-f9ecd700-43a3-11ea-8a18-2e2185e62e78.png"> |

Reviewed By: PeteTheHeat

Differential Revision: D20104655

Pulled By: hramos

fbshipit-source-id: 86c1902c00f791fd23f75ea7562b44c92e719c5e
2020-02-26 19:06:02 -08:00
Sam Mathias WeggersenandFacebook Github Bot 7d2daa0a6d Add nightly build (#28066)
Summary:
Note: I'm currently testing this, so do not review just yet.

Adding a nightly CI build in preparation for further work on [React Native: Benchmark Suite](https://github.com/react-native-community/discussions-and-proposals/issues/186.)

Currently it will only run the job `nightly_job` which will simply run `$ echo "Nightly build run"`. The plan is to do nightly checks and performance status on the React Native repo, and create a dashboard where we can see performance changes over time. More on this in the proposal: [React Native: Benchmark Suite](https://github.com/react-native-community/discussions-and-proposals/issues/186.)

## Changelog

[General] [Added] - Add nightly CI build
Pull Request resolved: https://github.com/facebook/react-native/pull/28066

Test Plan: Individual jobs will have their own test plan.

Reviewed By: sebmck

Differential Revision: D20008434

Pulled By: hramos

fbshipit-source-id: a5e8aad616c28bfad8f3455b5ebadf7a7d174a55
2020-02-26 18:10:03 -08:00
Joshua GrossandFacebook Github Bot 5be86695a3 AndroidTextInput uses default padding from Android theme
Summary:
For backwards-compatibility with Paper, we're implementing a feature in Fabric that will allow TextInputs to use the default padding from the theme in Android.

Note that this uses some pretty ugly hacks that probably shouldn't be used inside of components at all: looking directly at rawProps, overriding props/Yoga styles in the component descriptor, etc. I would (personally) really like to kill this feature entirely unless and until we can find a more elegant solution.

Changelog: [Internal]

TextInputs are still not pixel-perfect with Paper, but they're much closer, and the underline visual glitchiness is no longer an issue.

Reviewed By: mdvacca

Differential Revision: D20109605

fbshipit-source-id: 543282843e0a9f03a504d72d7a014431099bd64c
2020-02-26 13:46:57 -08:00
Jordan BrownandFacebook Github Bot 6ea963de6a @allow-large-files deploy 0.119 to xplat
Summary:
Used the deploy_xplat.sh script.

There were a few errors after running the script, so I reverted the changes to those files and the errors went away. This is expected because the new version does not introduce errors, so these errors were caused by the deploy script.

Changelog: [Internal]

Reviewed By: samwgoldman

Differential Revision: D20070916

fbshipit-source-id: 56b8f56eab952010f44219ce1b5c4ec66a0b084a
2020-02-26 12:08:51 -08:00
Chad SmithandFacebook Github Bot e64c18b3a6 upgrade detox version
Summary:
Upgrade detox version so the codec of the recording of the iOS simulator can be specified.

Changelog: [Internal] Upgrade Detox to 15.4.0

Reviewed By: hramos, TheSavior

Differential Revision: D20079348

fbshipit-source-id: 4effc040286b92b468550fdbec1a2373339134d1
2020-02-26 11:27:25 -08:00
Samuel SuslaandFacebook Github Bot c7f9a9e49b UIManager.findNodeAtPoint now returns shadowNode instead of instanceHandle
Summary:
Changelog: [Internal]

As agreed in https://fb.quip.com/Oh2mAaTAbBj6, `findNodeAtPoint` now calls callback with `shadowNode` instead of `instanceHandle`.

Reviewed By: shergin

Differential Revision: D20097269

fbshipit-source-id: bd2a1bcd26ab2510f16c3e73f628be4b1f7dacfc
2020-02-26 04:47:43 -08:00
Samuel SuslaandFacebook Github Bot f936b65883 Creating new state should now correctly increment state revision
Summary:
Changelog: [Internal]

# Problem

Calling `UIManager::updateState` does not increment state revision because it calls `ConcreteComponentDescriptor::createState` which creates new state with state revision 1.

# How did this propagate?

This error propagated itself in TextInput when trying to input a value, you would be only allowed to type in 1 character.

Reviewed By: JoshuaGross

Differential Revision: D20072844

fbshipit-source-id: 37b8173307e1d91d6e9c41b5ff2e185dde31cc38
2020-02-26 03:32:19 -08:00
Michał PierzchałaandFacebook Github Bot 71ac4bbcdd - Remove connect, escape-string-regexp, eslint-plugin-relay deps (#28171)
Summary:
Some dependencies don't need to be downloaded by consumers:

- `connect` is only used in RNTester, moved to dev dependencies
- `escape-string-regexp` is not used directly, removed
- `eslint-plugin-relay` was in both deps and dev deps, removed from deps

Overall, this results in node_modules being 3.3MB smaller on clean install.

cc cpojer as you may already be aware. Feel free to treat these as a reference when optimizing internal deps.

## Changelog

[Internal] [Changed] - Remove connect, escape-string-regexp, eslint-plugin-relay deps
Pull Request resolved: https://github.com/facebook/react-native/pull/28171

Test Plan: CI passes

Reviewed By: hramos

Differential Revision: D20097591

Pulled By: cpojer

fbshipit-source-id: 0800751996accf39fd777bc6458be19f66f436a3
2020-02-26 01:59:28 -08:00
Lorenzo SciandraandFacebook Github Bot fe101ffee5 - Bump CLI to ^4.1.x (#28172)
Summary:
Upgrading CLI to latest. alloy should have done a local commit on the 0.62 branch and this pr is just meant to sync the status between master and 0.62 branch.

cc grabbou alloy

nit: it seems that the new 4.1.1 CLI version pulls in quite a bit of dependencies, I hope it's ok. It seems it's mostly because of `pretty-format`.

## Changelog

[Internal] [Changed] - Bump CLI to ^4.1.x
Pull Request resolved: https://github.com/facebook/react-native/pull/28172

Test Plan: None

Reviewed By: hramos

Differential Revision: D20097587

Pulled By: cpojer

fbshipit-source-id: ec95498ced374d1e4e6b696f2167fedf66395ac9
2020-02-26 01:59:27 -08:00
Steven BellandFacebook Github Bot 0921460ea9 update RN docs link to reactnative.dev (#28175)
Summary:
Updated React Native docs links to reactnative.dev

## Changelog

[INTERNAL] [CHANGED] - update RN docs links to reactnative.dev
Pull Request resolved: https://github.com/facebook/react-native/pull/28175

Test Plan: Tested new links and made sure they work

Reviewed By: motiz88

Differential Revision: D20114439

Pulled By: cpojer

fbshipit-source-id: 6a7ee32f98da04b440ae31eeb7ea4ee15a23cf22
2020-02-26 01:21:39 -08:00
Valentin SherginandFacebook Github Bot ede2c5031f Codemod: Clang-format for all files in ReactCommon directory
Summary:
We are moving towards 100%-prettified files. That's the first step when we apply Clang Format for `ReactCommon`.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D20110895

fbshipit-source-id: 0a0ce4997cf1c3721b0b07ef78c1a57ce87d20f9
2020-02-25 19:52:27 -08:00
Joshua GrossandFacebook Github Bot a3ade9e167 EZ fix comment
Summary:
Fix a comment to correctly document how this method works.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D20109606

fbshipit-source-id: d50754887d7a7e0e72a2f8a041887a67aa64c966
2020-02-25 19:08:28 -08:00
Gabriel NunesandFacebook Github Bot 8ad67de59e Update documentation for Function::call to reflect how 'this' behaves in non-strict mode
Summary: The `Function::call` method says it leaves the JS `this` object undefined. According to my tests, that's not completely true: if the function is defined to use strict mode via `"use strict"` either inside itself or in the file it was defined in, it does leave it `undefined`, but if the function is defined in non-strict mode, it sets `this` to the global object instead. This diff updates the documentation to reflect this.

Reviewed By: mhorowitz

Differential Revision: D19613483

fbshipit-source-id: 4b9ecf81c6318592be05a216748dcb22e32989f8
2020-02-25 13:02:32 -08:00
Ramanpreet NaraandFacebook Github Bot ee93ee603b Re-check in all codegen output
Summary:
This diff:
1. Updates `update-specs.js` to also check in the JNI TurboModules codegen output.
2. Updates all the checked in OSS codegen.

Changelog: [Internal]

Reviewed By: mdvacca

Differential Revision: D19907536

fbshipit-source-id: 179e01aff05f4c970c20f1482f096dbca10caed3
2020-02-25 12:57:43 -08:00