Skip to content

Commit f4961cc

Browse files
Dawid Małeckimeta-codesync[bot]
authored andcommitted
Make LayoutConformance component headers for-frameworks
Summary: Move `LayoutConformanceComponentDescriptor.h`, `LayoutConformanceProps.h` and `LayoutConformanceShadowNode.h` from the public tier of the C++ stable API to the for-frameworks tier, and remove them from the `<React/View.h>` umbrella. These headers implement the experimental `LayoutConformance` core component. Native component authors do not use them, but a platform that registers React Native's core components does: `YogaLayoutableShadowNode::resolveErrata` checks for `LayoutConformanceShadowNode` with a `dynamic_cast` to choose the Yoga errata, so a platform has to register React Native's own descriptor for the component to have any effect. That makes them framework-author API rather than private headers. The `LayoutConformance` enum and its conversions stay public in `primitives.h` and `conversions.h`. A for-frameworks header has to reach public headers through their umbrella, so the three headers now include `<React/View.h>` and `<React/RendererCore.h>` instead of fine-grained paths, and compile when included directly under strict API enforcement. `LayoutConformanceProps.h` was the only umbrella member that included the public `conversions.h`, so `conversions.h` is added to `<React/View.h>` directly to keep it available through the umbrella. The headers stay published, because React Native's own core component registries outside this module include them. Because they now include their own module's umbrella, and `YogaLayoutableShadowNode.cpp` includes `LayoutConformanceShadowNode.h`, the CMake `rrc_view` target exposes its umbrella directory as `PUBLIC` instead of `INTERFACE`, so the module's own sources can resolve `<React/View.h>` as well as its dependents. Changelog: [Internal] Differential Revision: D123895702
1 parent 1af1186 commit f4961cc

14 files changed

Lines changed: 9 additions & 112 deletions

‎packages/react-native/ReactCommon/react/renderer/components/view/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ react_native_android_selector(platform_DIR
2323
${CMAKE_CURRENT_SOURCE_DIR}/platform/android/
2424
${CMAKE_CURRENT_SOURCE_DIR}/platform/cxx/)
2525
target_include_directories(rrc_view PUBLIC ${REACT_COMMON_DIR} ${platform_DIR})
26-
target_include_directories(rrc_view INTERFACE ${REACT_COMMON_DIR}/react/renderer/components/view)
26+
target_include_directories(rrc_view PUBLIC ${REACT_COMMON_DIR}/react/renderer/components/view)
2727

2828
target_link_libraries(rrc_view
2929
folly_runtime

‎packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceComponentDescriptor.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
#pragma once
99

10-
#include <react/cxxstableapi/UmbrellaGuard.h>
10+
#include <react/cxxstableapi/FrameworksGuard.h>
1111

12+
#include <React/RendererCore.h>
1213
#include <react/renderer/components/view/LayoutConformanceShadowNode.h>
13-
#include <react/renderer/core/ConcreteComponentDescriptor.h>
1414

1515
namespace facebook::react {
1616

‎packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceProps.h‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77

88
#pragma once
99

10-
#include <react/cxxstableapi/UmbrellaGuard.h>
10+
#include <react/cxxstableapi/FrameworksGuard.h>
1111

12-
#include <react/renderer/components/view/YogaStylableProps.h>
13-
#include <react/renderer/components/view/conversions.h>
14-
#include <react/renderer/core/propsConversions.h>
12+
#include <React/RendererCore.h>
13+
#include <React/View.h>
1514

1615
namespace facebook::react {
1716

‎packages/react-native/ReactCommon/react/renderer/components/view/LayoutConformanceShadowNode.h‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77

88
#pragma once
99

10-
#include <react/cxxstableapi/UmbrellaGuard.h>
10+
#include <react/cxxstableapi/FrameworksGuard.h>
1111

12-
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
12+
#include <React/View.h>
1313
#include <react/renderer/components/view/LayoutConformanceProps.h>
14-
#include <react/renderer/components/view/YogaLayoutableShadowNode.h>
1514

1615
namespace facebook::react {
1716

‎packages/react-native/ReactCommon/react/renderer/components/view/React/View.h‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@
4141
#include <react/renderer/components/view/HostPlatformViewEventEmitter.h>
4242
#include <react/renderer/components/view/HostPlatformViewProps.h>
4343
#include <react/renderer/components/view/HostPlatformViewTraitsInitializer.h>
44-
#include <react/renderer/components/view/LayoutConformanceComponentDescriptor.h>
45-
#include <react/renderer/components/view/LayoutConformanceProps.h>
46-
#include <react/renderer/components/view/LayoutConformanceShadowNode.h>
4744
#include <react/renderer/components/view/PointerEvent.h>
4845
#include <react/renderer/components/view/Touch.h>
4946
#include <react/renderer/components/view/TouchEvent.h>
@@ -55,6 +52,7 @@
5552
#include <react/renderer/components/view/YogaLayoutableShadowNode.h>
5653
#include <react/renderer/components/view/YogaStylableProps.h>
5754
#include <react/renderer/components/view/accessibilityPropsConversions.h>
55+
#include <react/renderer/components/view/conversions.h>
5856
#include <react/renderer/components/view/primitives.h>
5957

6058
#undef RN_UMBRELLA_CONTEXT

‎scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ struct facebook::hermes::ISetEventLoopControl : public facebook::jsi::ICast {
376376
const char facebook::react::ViewComponentName[];
377377
const facebook::react::EventTag facebook::react::EMPTY_EVENT_TAG;
378378
constexpr auto facebook::react::rncore_ModuleProvider;
379-
constexpr char facebook::react::LayoutConformanceShadowNodeComponentName[];
380379
constexpr facebook::react::ReactNativeVersionType facebook::react::ReactNativeVersion;
381380
constexpr facebook::react::Tag facebook::react::kNoTag;
382381
constexpr uint32_t facebook::react::INITIAL_BUCKETS_SIZE;
@@ -424,7 +423,6 @@ using facebook::react::GradientDirection = std::variant<facebook::react::Float,
424423
using facebook::react::HostPlatformTouch = facebook::react::BaseTouch;
425424
using facebook::react::HostPlatformViewEventEmitter = facebook::react::BaseViewEventEmitter;
426425
using facebook::react::ImageSources = std::vector<facebook::react::ImageSource>;
427-
using facebook::react::LayoutConformanceComponentDescriptor = facebook::react::ConcreteComponentDescriptor<facebook::react::LayoutConformanceShadowNode>;
428426
using facebook::react::ModalHostViewSupportedOrientationsMask = uint32_t;
429427
using facebook::react::NativeMethodCallFunc = std::function<void()>;
430428
using facebook::react::PromiseSetupFunctionType = std::function<void(facebook::jsi::Runtime& rt, std::shared_ptr<facebook::react::Promise>)>;
@@ -1724,9 +1722,6 @@ struct facebook::react::JavaTurboModule::InitParams {
17241722
public std::string moduleName;
17251723
}
17261724

1727-
class facebook::react::LayoutConformanceShadowNode : public facebook::react::ConcreteShadowNode<facebook::react::LayoutConformanceShadowNodeComponentName, facebook::react::YogaLayoutableShadowNode, facebook::react::LayoutConformanceProps> {
1728-
}
1729-
17301725
class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode {
17311726
public LayoutableShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
17321727
public LayoutableShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
@@ -3375,12 +3370,6 @@ struct facebook::react::JTurboModuleWithJSIBindings : public facebook::jni::Java
33753370
public static constexpr auto kJavaDescriptor;
33763371
}
33773372

3378-
struct facebook::react::LayoutConformanceProps : public facebook::react::YogaStylableProps {
3379-
public LayoutConformanceProps() = default;
3380-
public LayoutConformanceProps(const facebook::react::PropsParserContext& context, const facebook::react::LayoutConformanceProps& sourceProps, const facebook::react::RawProps& rawProps);
3381-
public facebook::react::LayoutConformance mode;
3382-
}
3383-
33843373
struct facebook::react::LayoutConstraints {
33853374
public facebook::react::LayoutDirection layoutDirection;
33863375
public facebook::react::Size clamp(const facebook::react::Size& size) const;

‎scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ struct facebook::hermes::ISetEventLoopControl : public facebook::jsi::ICast {
376376
const char facebook::react::ViewComponentName[];
377377
const facebook::react::EventTag facebook::react::EMPTY_EVENT_TAG;
378378
constexpr auto facebook::react::rncore_ModuleProvider;
379-
constexpr char facebook::react::LayoutConformanceShadowNodeComponentName[];
380379
constexpr facebook::react::ReactNativeVersionType facebook::react::ReactNativeVersion;
381380
constexpr facebook::react::Tag facebook::react::kNoTag;
382381
constexpr uint32_t facebook::react::INITIAL_BUCKETS_SIZE;
@@ -424,7 +423,6 @@ using facebook::react::GradientDirection = std::variant<facebook::react::Float,
424423
using facebook::react::HostPlatformTouch = facebook::react::BaseTouch;
425424
using facebook::react::HostPlatformViewEventEmitter = facebook::react::BaseViewEventEmitter;
426425
using facebook::react::ImageSources = std::vector<facebook::react::ImageSource>;
427-
using facebook::react::LayoutConformanceComponentDescriptor = facebook::react::ConcreteComponentDescriptor<facebook::react::LayoutConformanceShadowNode>;
428426
using facebook::react::ModalHostViewSupportedOrientationsMask = uint32_t;
429427
using facebook::react::NativeMethodCallFunc = std::function<void()>;
430428
using facebook::react::PromiseSetupFunctionType = std::function<void(facebook::jsi::Runtime& rt, std::shared_ptr<facebook::react::Promise>)>;
@@ -1723,9 +1721,6 @@ struct facebook::react::JavaTurboModule::InitParams {
17231721
public std::string moduleName;
17241722
}
17251723

1726-
class facebook::react::LayoutConformanceShadowNode : public facebook::react::ConcreteShadowNode<facebook::react::LayoutConformanceShadowNodeComponentName, facebook::react::YogaLayoutableShadowNode, facebook::react::LayoutConformanceProps> {
1727-
}
1728-
17291724
class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode {
17301725
public LayoutableShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
17311726
public LayoutableShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
@@ -3368,12 +3363,6 @@ struct facebook::react::JTurboModuleWithJSIBindings : public facebook::jni::Java
33683363
public static constexpr auto kJavaDescriptor;
33693364
}
33703365

3371-
struct facebook::react::LayoutConformanceProps : public facebook::react::YogaStylableProps {
3372-
public LayoutConformanceProps() = default;
3373-
public LayoutConformanceProps(const facebook::react::PropsParserContext& context, const facebook::react::LayoutConformanceProps& sourceProps, const facebook::react::RawProps& rawProps);
3374-
public facebook::react::LayoutConformance mode;
3375-
}
3376-
33773366
struct facebook::react::LayoutConstraints {
33783367
public facebook::react::LayoutDirection layoutDirection;
33793368
public facebook::react::Size clamp(const facebook::react::Size& size) const;

‎scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ struct facebook::hermes::ISetEventLoopControl : public facebook::jsi::ICast {
376376
const char facebook::react::ViewComponentName[];
377377
const facebook::react::EventTag facebook::react::EMPTY_EVENT_TAG;
378378
constexpr auto facebook::react::rncore_ModuleProvider;
379-
constexpr char facebook::react::LayoutConformanceShadowNodeComponentName[];
380379
constexpr facebook::react::ReactNativeVersionType facebook::react::ReactNativeVersion;
381380
constexpr facebook::react::Tag facebook::react::kNoTag;
382381
constexpr uint32_t facebook::react::INITIAL_BUCKETS_SIZE;
@@ -424,7 +423,6 @@ using facebook::react::GradientDirection = std::variant<facebook::react::Float,
424423
using facebook::react::HostPlatformTouch = facebook::react::BaseTouch;
425424
using facebook::react::HostPlatformViewEventEmitter = facebook::react::BaseViewEventEmitter;
426425
using facebook::react::ImageSources = std::vector<facebook::react::ImageSource>;
427-
using facebook::react::LayoutConformanceComponentDescriptor = facebook::react::ConcreteComponentDescriptor<facebook::react::LayoutConformanceShadowNode>;
428426
using facebook::react::ModalHostViewSupportedOrientationsMask = uint32_t;
429427
using facebook::react::NativeMethodCallFunc = std::function<void()>;
430428
using facebook::react::PromiseSetupFunctionType = std::function<void(facebook::jsi::Runtime& rt, std::shared_ptr<facebook::react::Promise>)>;
@@ -1723,9 +1721,6 @@ struct facebook::react::JavaTurboModule::InitParams {
17231721
public std::string moduleName;
17241722
}
17251723

1726-
class facebook::react::LayoutConformanceShadowNode : public facebook::react::ConcreteShadowNode<facebook::react::LayoutConformanceShadowNodeComponentName, facebook::react::YogaLayoutableShadowNode, facebook::react::LayoutConformanceProps> {
1727-
}
1728-
17291724
class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode {
17301725
public LayoutableShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
17311726
public LayoutableShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
@@ -3368,12 +3363,6 @@ struct facebook::react::JTurboModuleWithJSIBindings : public facebook::jni::Java
33683363
public static constexpr auto kJavaDescriptor;
33693364
}
33703365

3371-
struct facebook::react::LayoutConformanceProps : public facebook::react::YogaStylableProps {
3372-
public LayoutConformanceProps() = default;
3373-
public LayoutConformanceProps(const facebook::react::PropsParserContext& context, const facebook::react::LayoutConformanceProps& sourceProps, const facebook::react::RawProps& rawProps);
3374-
public facebook::react::LayoutConformance mode;
3375-
}
3376-
33773366
struct facebook::react::LayoutConstraints {
33783367
public facebook::react::LayoutDirection layoutDirection;
33793368
public facebook::react::Size clamp(const facebook::react::Size& size) const;

‎scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3163,7 +3163,6 @@ struct facebook::hermes::ISetEventLoopControl : public facebook::jsi::ICast {
31633163

31643164
const char facebook::react::ViewComponentName[];
31653165
const facebook::react::EventTag facebook::react::EMPTY_EVENT_TAG;
3166-
constexpr char facebook::react::LayoutConformanceShadowNodeComponentName[];
31673166
constexpr facebook::react::ReactNativeVersionType facebook::react::ReactNativeVersion;
31683167
constexpr facebook::react::Tag facebook::react::kNoTag;
31693168
constexpr uint32_t facebook::react::INITIAL_BUCKETS_SIZE;
@@ -3210,7 +3209,6 @@ using facebook::react::GradientDirection = std::variant<facebook::react::Float,
32103209
using facebook::react::HostPlatformTouch = facebook::react::BaseTouch;
32113210
using facebook::react::HostPlatformViewEventEmitter = facebook::react::BaseViewEventEmitter;
32123211
using facebook::react::ImageSources = std::vector<facebook::react::ImageSource>;
3213-
using facebook::react::LayoutConformanceComponentDescriptor = facebook::react::ConcreteComponentDescriptor<facebook::react::LayoutConformanceShadowNode>;
32143212
using facebook::react::ModalHostViewSupportedOrientationsMask = uint32_t;
32153213
using facebook::react::NativeMethodCallFunc = std::function<void()>;
32163214
using facebook::react::PromiseSetupFunctionType = std::function<void(facebook::jsi::Runtime& rt, std::shared_ptr<facebook::react::Promise>)>;
@@ -4018,9 +4016,6 @@ class facebook::react::JSBigString : public facebook::jsi::Buffer {
40184016
public ~JSBigString() override = default;
40194017
}
40204018

4021-
class facebook::react::LayoutConformanceShadowNode : public facebook::react::ConcreteShadowNode<facebook::react::LayoutConformanceShadowNodeComponentName, facebook::react::YogaLayoutableShadowNode, facebook::react::LayoutConformanceProps> {
4022-
}
4023-
40244019
class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode {
40254020
public LayoutableShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
40264021
public LayoutableShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
@@ -5459,12 +5454,6 @@ struct facebook::react::ImageURLLoaderAttribution {
54595454
public std::string queryRootName;
54605455
}
54615456

5462-
struct facebook::react::LayoutConformanceProps : public facebook::react::YogaStylableProps {
5463-
public LayoutConformanceProps() = default;
5464-
public LayoutConformanceProps(const facebook::react::PropsParserContext& context, const facebook::react::LayoutConformanceProps& sourceProps, const facebook::react::RawProps& rawProps);
5465-
public facebook::react::LayoutConformance mode;
5466-
}
5467-
54685457
struct facebook::react::LayoutConstraints {
54695458
public facebook::react::LayoutDirection layoutDirection;
54705459
public facebook::react::Size clamp(const facebook::react::Size& size) const;

‎scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3155,7 +3155,6 @@ struct facebook::hermes::ISetEventLoopControl : public facebook::jsi::ICast {
31553155

31563156
const char facebook::react::ViewComponentName[];
31573157
const facebook::react::EventTag facebook::react::EMPTY_EVENT_TAG;
3158-
constexpr char facebook::react::LayoutConformanceShadowNodeComponentName[];
31593158
constexpr facebook::react::ReactNativeVersionType facebook::react::ReactNativeVersion;
31603159
constexpr facebook::react::Tag facebook::react::kNoTag;
31613160
constexpr uint32_t facebook::react::INITIAL_BUCKETS_SIZE;
@@ -3202,7 +3201,6 @@ using facebook::react::GradientDirection = std::variant<facebook::react::Float,
32023201
using facebook::react::HostPlatformTouch = facebook::react::BaseTouch;
32033202
using facebook::react::HostPlatformViewEventEmitter = facebook::react::BaseViewEventEmitter;
32043203
using facebook::react::ImageSources = std::vector<facebook::react::ImageSource>;
3205-
using facebook::react::LayoutConformanceComponentDescriptor = facebook::react::ConcreteComponentDescriptor<facebook::react::LayoutConformanceShadowNode>;
32063204
using facebook::react::ModalHostViewSupportedOrientationsMask = uint32_t;
32073205
using facebook::react::NativeMethodCallFunc = std::function<void()>;
32083206
using facebook::react::PromiseSetupFunctionType = std::function<void(facebook::jsi::Runtime& rt, std::shared_ptr<facebook::react::Promise>)>;
@@ -4009,9 +4007,6 @@ class facebook::react::JSBigString : public facebook::jsi::Buffer {
40094007
public ~JSBigString() override = default;
40104008
}
40114009

4012-
class facebook::react::LayoutConformanceShadowNode : public facebook::react::ConcreteShadowNode<facebook::react::LayoutConformanceShadowNodeComponentName, facebook::react::YogaLayoutableShadowNode, facebook::react::LayoutConformanceProps> {
4013-
}
4014-
40154010
class facebook::react::LayoutableShadowNode : public facebook::react::ShadowNode {
40164011
public LayoutableShadowNode(const facebook::react::ShadowNode& sourceShadowNode, const facebook::react::ShadowNodeFragment& fragment);
40174012
public LayoutableShadowNode(const facebook::react::ShadowNodeFragment& fragment, const facebook::react::ShadowNodeFamily::Shared& family, facebook::react::ShadowNodeTraits traits);
@@ -5444,12 +5439,6 @@ struct facebook::react::ImageURLLoaderAttribution {
54445439
public std::string queryRootName;
54455440
}
54465441

5447-
struct facebook::react::LayoutConformanceProps : public facebook::react::YogaStylableProps {
5448-
public LayoutConformanceProps() = default;
5449-
public LayoutConformanceProps(const facebook::react::PropsParserContext& context, const facebook::react::LayoutConformanceProps& sourceProps, const facebook::react::RawProps& rawProps);
5450-
public facebook::react::LayoutConformance mode;
5451-
}
5452-
54535442
struct facebook::react::LayoutConstraints {
54545443
public facebook::react::LayoutDirection layoutDirection;
54555444
public facebook::react::Size clamp(const facebook::react::Size& size) const;

0 commit comments

Comments
 (0)