From 63ff5eb1a1df857dfbb7c9fc7d8cb336a1974245 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Wed, 30 Sep 2026 00:38:44 -0700 Subject: [PATCH 1/2] Generate public feature flags entry point Summary: Adds a `dangerouslyExposeInPublicCppHeaders` option to the feature flags config. Flags that opt in are generated into `ReactNativePublicFeatureFlags.h`, whose getters forward to `ReactNativeFeatureFlags` from a generated `.cpp`, so exported headers can read them without including the rest of the module. Opts in the flags that exported headers currently read inline. Changelog: [Internal] Differential Revision: D122353811 --- .../ReactNativePublicFeatureFlags.cpp | 49 ++++++++++++++ .../ReactNativePublicFeatureFlags.h | 66 +++++++++++++++++++ .../ReactNativeFeatureFlags.config.js | 6 ++ .../featureflags/generateCommonCxxModules.js | 6 ++ .../scripts/featureflags/generateFiles.js | 13 +++- ...ctNativePublicFeatureFlags.cpp-template.js | 47 +++++++++++++ ...eactNativePublicFeatureFlags.h-template.js | 57 ++++++++++++++++ .../scripts/featureflags/types.js | 2 + 8 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.cpp create mode 100644 packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.h create mode 100644 packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.cpp-template.js create mode 100644 packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.h-template.js diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.cpp b/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.cpp new file mode 100644 index 000000000000..ee4ccaf72737 --- /dev/null +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @generated SignedSource<<95f86b3476aeff097f532b10cabf067e>> + */ + +/** + * IMPORTANT: Do NOT modify this file directly. + * + * To change the definition of the flags, edit + * packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js. + * + * To regenerate this code, run the following script from the repo root: + * yarn featureflags --update + */ + +#include "ReactNativeFeatureFlags.h" +#include "ReactNativePublicFeatureFlags.h" + +namespace facebook::react { + +bool ReactNativeFeatureFlags_DO_NOT_USE::enableAccumulatedUpdatesInRawPropsAndroid() { + return ReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid(); +} + +bool ReactNativeFeatureFlags_DO_NOT_USE::enableCppPropsIteratorSetter() { + return ReactNativeFeatureFlags::enableCppPropsIteratorSetter(); +} + +bool ReactNativeFeatureFlags_DO_NOT_USE::enableExclusivePropsUpdateAndroid() { + return ReactNativeFeatureFlags::enableExclusivePropsUpdateAndroid(); +} + +bool ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing() { + return ReactNativeFeatureFlags::enableNativeCSSParsing(); +} + +bool ReactNativeFeatureFlags_DO_NOT_USE::enablePropsUpdateReconciliationAndroid() { + return ReactNativeFeatureFlags::enablePropsUpdateReconciliationAndroid(); +} + +bool ReactNativeFeatureFlags_DO_NOT_USE::useSharedAnimatedBackend() { + return ReactNativeFeatureFlags::useSharedAnimatedBackend(); +} + +} // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.h b/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.h new file mode 100644 index 000000000000..f8c27e60c167 --- /dev/null +++ b/packages/react-native/ReactCommon/react/featureflags/ReactNativePublicFeatureFlags.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @generated SignedSource<<39037a69a47b86d0c6643d90f4058002>> + */ + +/** + * IMPORTANT: Do NOT modify this file directly. + * + * To change the definition of the flags, edit + * packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js. + * + * To regenerate this code, run the following script from the repo root: + * yarn featureflags --update + */ + +#pragma once + +#include + +#ifndef RN_EXPORT +#define RN_EXPORT __attribute__((visibility("default"))) +#endif + +namespace facebook::react { + +/** + * This class provides public access to select internal React Native feature flags. + */ +class ReactNativeFeatureFlags_DO_NOT_USE { + public: + /** + * When enabled, Android will accumulate updates in rawProps to reduce the number of mounting instructions for cascading re-renders. + */ + RN_EXPORT static bool enableAccumulatedUpdatesInRawPropsAndroid(); + + /** + * Enable prop iterator setter-style construction of Props in C++ (this flag is not used in Java). + */ + RN_EXPORT static bool enableCppPropsIteratorSetter(); + + /** + * When enabled, Android will disable Props 1.5 raw value merging when Props 2.0 is available. + */ + RN_EXPORT static bool enableExclusivePropsUpdateAndroid(); + + /** + * Parse CSS strings using the Fabric CSS parser instead of ViewConfig processing + */ + RN_EXPORT static bool enableNativeCSSParsing(); + + /** + * When enabled, Android will receive prop updates based on the differences between the last rendered shadow node and the last committed shadow node. + */ + RN_EXPORT static bool enablePropsUpdateReconciliationAndroid(); + + /** + * Use shared animation backend in C++ Animated + */ + RN_EXPORT static bool useSharedAnimatedBackend(); +}; + +} // namespace facebook::react diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index b7e56a770ebe..9d776f20b10e 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -181,6 +181,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'canary', }, enableAccumulatedUpdatesInRawPropsAndroid: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2024-12-10', @@ -233,6 +234,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, enableCppPropsIteratorSetter: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2024-09-13', @@ -287,6 +289,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, enableExclusivePropsUpdateAndroid: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2025-11-11', @@ -517,6 +520,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, enableNativeCSSParsing: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2025-02-07', @@ -538,6 +542,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, enablePropsUpdateReconciliationAndroid: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2024-07-12', @@ -923,6 +928,7 @@ const definitions: FeatureFlagDefinitions = { ossReleaseStage: 'none', }, useSharedAnimatedBackend: { + dangerouslyExposeInPublicCppHeaders: true, defaultValue: false, metadata: { dateAdded: '2025-08-02', diff --git a/packages/react-native/scripts/featureflags/generateCommonCxxModules.js b/packages/react-native/scripts/featureflags/generateCommonCxxModules.js index d46aceb40a45..c6530b23c772 100644 --- a/packages/react-native/scripts/featureflags/generateCommonCxxModules.js +++ b/packages/react-native/scripts/featureflags/generateCommonCxxModules.js @@ -18,6 +18,8 @@ import ReactNativeFeatureFlagsDefaultsH from './templates/common-cxx/ReactNative import ReactNativeFeatureFlagsDynamicProviderH from './templates/common-cxx/ReactNativeFeatureFlagsDynamicProvider.h-template'; import ReactNativeFeatureFlagsOverrides from './templates/common-cxx/ReactNativeFeatureFlagsOverridesOSS_Stage_.h-template'; import ReactNativeFeatureFlagsProviderH from './templates/common-cxx/ReactNativeFeatureFlagsProvider.h-template'; +import ReactNativePublicFeatureFlagsCPP from './templates/common-cxx/ReactNativePublicFeatureFlags.cpp-template'; +import ReactNativePublicFeatureFlagsH from './templates/common-cxx/ReactNativePublicFeatureFlags.h-template'; import path from 'node:path'; export default function generateCommonCxxModules( @@ -30,6 +32,10 @@ export default function generateCommonCxxModules( ReactNativeFeatureFlagsH(featureFlagDefinitions), [path.join(commonCxxPath, 'ReactNativeFeatureFlags.cpp')]: ReactNativeFeatureFlagsCPP(featureFlagDefinitions), + [path.join(commonCxxPath, 'ReactNativePublicFeatureFlags.h')]: + ReactNativePublicFeatureFlagsH(featureFlagDefinitions), + [path.join(commonCxxPath, 'ReactNativePublicFeatureFlags.cpp')]: + ReactNativePublicFeatureFlagsCPP(featureFlagDefinitions), [path.join(commonCxxPath, 'ReactNativeFeatureFlagsAccessor.h')]: ReactNativeFeatureFlagsAccessorH(featureFlagDefinitions), [path.join(commonCxxPath, 'ReactNativeFeatureFlagsAccessor.cpp')]: diff --git a/packages/react-native/scripts/featureflags/generateFiles.js b/packages/react-native/scripts/featureflags/generateFiles.js index ead6d67e2288..ddcccbb94594 100644 --- a/packages/react-native/scripts/featureflags/generateFiles.js +++ b/packages/react-native/scripts/featureflags/generateFiles.js @@ -34,7 +34,18 @@ export default function generateFiles( ...generatorConfig.featureFlagDefinitions, common: Object.fromEntries( Object.entries(generatorConfig.featureFlagDefinitions.common).filter( - ([_, definition]) => !definition.skipNativeAPI, + ([name, definition]) => { + if ( + definition.skipNativeAPI && + definition.dangerouslyExposeInPublicCppHeaders + ) { + throw new Error( + `${name} cannot have both skipNativeAPI and dangerouslyExposeInPublicCppHeaders enabled at the same time.`, + ); + } + + return !definition.skipNativeAPI; + }, ), ), }, diff --git a/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.cpp-template.js b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.cpp-template.js new file mode 100644 index 000000000000..cc5934aa6769 --- /dev/null +++ b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.cpp-template.js @@ -0,0 +1,47 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + */ + +import type {FeatureFlagDefinitions} from '../../types'; + +import {DO_NOT_MODIFY_COMMENT, getCxxTypeFromDefaultValue} from '../../utils'; +import signedsource from 'signedsource'; + +export default function (definitions: FeatureFlagDefinitions): string { + return signedsource.signFile(`/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * ${signedsource.getSigningToken()} + */ + +${DO_NOT_MODIFY_COMMENT} + +#include "ReactNativeFeatureFlags.h" +#include "ReactNativePublicFeatureFlags.h" + +namespace facebook::react { + +${Object.entries(definitions.common) + .filter(([_, flagConfig]) => flagConfig.dangerouslyExposeInPublicCppHeaders) + .map( + ([flagName, flagConfig]) => + `${getCxxTypeFromDefaultValue( + flagConfig.defaultValue, + )} ReactNativeFeatureFlags_DO_NOT_USE::${flagName}() { + return ReactNativeFeatureFlags::${flagName}(); +}`, + ) + .join('\n\n')} + +} // namespace facebook::react +`); +} diff --git a/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.h-template.js b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.h-template.js new file mode 100644 index 000000000000..920405706b2e --- /dev/null +++ b/packages/react-native/scripts/featureflags/templates/common-cxx/ReactNativePublicFeatureFlags.h-template.js @@ -0,0 +1,57 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + */ + +import type {FeatureFlagDefinitions} from '../../types'; + +import {DO_NOT_MODIFY_COMMENT, getCxxTypeFromDefaultValue} from '../../utils'; +import signedsource from 'signedsource'; + +export default function (definitions: FeatureFlagDefinitions): string { + return signedsource.signFile(`/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * ${signedsource.getSigningToken()} + */ + +${DO_NOT_MODIFY_COMMENT} + +#pragma once + +#include + +#ifndef RN_EXPORT +#define RN_EXPORT __attribute__((visibility("default"))) +#endif + +namespace facebook::react { + +/** + * This class provides public access to select internal React Native feature flags. + */ +class ReactNativeFeatureFlags_DO_NOT_USE { + public: +${Object.entries(definitions.common) + .filter(([_, flagConfig]) => flagConfig.dangerouslyExposeInPublicCppHeaders) + .map( + ([flagName, flagConfig]) => + ` /** + * ${flagConfig.metadata.description} + */ + RN_EXPORT static ${getCxxTypeFromDefaultValue(flagConfig.defaultValue)} ${flagName}();`, + ) + .join('\n\n')} +}; + +} // namespace facebook::react +`); +} diff --git a/packages/react-native/scripts/featureflags/types.js b/packages/react-native/scripts/featureflags/types.js index acec7193a8ae..b072a8e05555 100644 --- a/packages/react-native/scripts/featureflags/types.js +++ b/packages/react-native/scripts/featureflags/types.js @@ -34,6 +34,8 @@ export type CommonFeatureFlagConfig< // Indicates if this API should only be defined in JavaScript, only to // preserve backwards compatibility with existing native code temporarily. skipNativeAPI?: true, + // Whether this flag should be exposed by the public feature flags entrypoint. + dangerouslyExposeInPublicCppHeaders?: true, }>; export type CommonFeatureFlagList = Readonly<{ From c69158a66609e166f011a68d234aad625b48d741 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Wed, 30 Sep 2026 01:05:15 -0700 Subject: [PATCH 2/2] Use public feature flags entry point in exported headers (#58743) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58743 Exported headers that read feature flags inline now go through the generated `ReactNativePublicFeatureFlags.h` instead of `ReactNativeFeatureFlags.h`. Sources that relied on the transitive include now include `ReactNativeFeatureFlags.h` directly. Changelog: [Internal] Reviewed By: rubennorte Differential Revision: D122353873 --- .../react/renderer/attributedstring/conversions.h | 4 ++-- .../view/BackgroundImagePropsConversions.h | 4 ++-- .../components/view/BoxShadowPropsConversions.h | 4 ++-- .../components/view/FilterPropsConversions.h | 4 ++-- .../react/renderer/components/view/conversions.h | 8 ++++---- .../renderer/core/ConcreteComponentDescriptor.h | 13 +++++++------ .../react/renderer/graphics/fromRawValueShared.h | 4 ++-- .../react/renderer/mounting/ShadowTree.cpp | 1 + .../renderer/mounting/tests/StackingContextTest.cpp | 1 + 9 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h index e77b21d33653..c6d6f7ad9b3b 100644 --- a/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/attributedstring/conversions.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include #include @@ -517,7 +517,7 @@ inline void parseUnprocessedFontVariant(const PropsParserContext &context, const inline void fromRawValue(const PropsParserContext &context, const RawValue &value, FontVariant &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { parseUnprocessedFontVariant(context, value, result); } else { parseProcessedFontVariant(context, value, result); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h index 7db2cc39881b..a8c38ae5d9c7 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.h @@ -9,7 +9,7 @@ #include -#include +#include #include #include #include @@ -30,7 +30,7 @@ void parseUnprocessedBackgroundImageString(const std::string &value, std::vector inline void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { if (value.hasType()) { parseUnprocessedBackgroundImageString((std::string)value, result); } else if (value.hasType>()) { diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h index a5b779d0b96d..a31e08d57139 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/BoxShadowPropsConversions.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include #include @@ -255,7 +255,7 @@ parseUnprocessedBoxShadow(const PropsParserContext &context, const RawValue &val inline void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { parseUnprocessedBoxShadow(context, value, result); } else { parseProcessedBoxShadow(context, value, result); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h index 0bb301979286..2a35234576c4 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/FilterPropsConversions.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include #include @@ -358,7 +358,7 @@ parseUnprocessedFilter(const PropsParserContext &context, const RawValue &value, inline void fromRawValue(const PropsParserContext &context, const RawValue &value, std::vector &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { parseUnprocessedFilter(context, value, result); } else { parseProcessedFilter(context, value, result); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h index 8ef320cf8c84..e1be3a01a291 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include #include @@ -520,7 +520,7 @@ inline yoga::FloatOptional convertAspectRatio(const PropsParserContext & /*conte if (value.hasType()) { return yoga::FloatOptional((float)value); } - if (ReactNativeFeatureFlags::enableNativeCSSParsing() && value.hasType()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing() && value.hasType()) { auto ratio = parseCSSProperty((std::string)value); if (std::holds_alternative(ratio)) { auto r = std::get(ratio); @@ -995,7 +995,7 @@ inline void parseUnprocessedTransform(const PropsParserContext &context, const R inline void fromRawValue(const PropsParserContext &context, const RawValue &value, Transform &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { parseUnprocessedTransform(context, value, result); } else { parseProcessedTransform(context, value, result); @@ -1079,7 +1079,7 @@ parseUnprocessedTransformOrigin(const PropsParserContext &context, const RawValu inline void fromRawValue(const PropsParserContext &context, const RawValue &value, TransformOrigin &result) { - if (ReactNativeFeatureFlags::enableNativeCSSParsing()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing()) { parseUnprocessedTransformOrigin(context, value, result); } else { parseProcessedTransformOrigin(context, value, result); diff --git a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h index bf552e0e67e1..d608d1c84931 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +++ b/packages/react-native/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include #include @@ -56,7 +56,7 @@ class ConcreteComponentDescriptor : public ComponentDescriptor { // iterator-setter path and the runtime flag is on, `parse()` is never // called, so the O(n²) preparation here is wasted. Skip it. if constexpr (HasIteratorSetterCtor) { - if (!ReactNativeFeatureFlags::enableCppPropsIteratorSetter()) { + if (!ReactNativeFeatureFlags_DO_NOT_USE::enableCppPropsIteratorSetter()) { rawPropsParser_.prepare(); } } else { @@ -136,7 +136,8 @@ class ConcreteComponentDescriptor : public ComponentDescriptor { // and the only path when the flag is off): parse + per-field // `convertRawProp` via the 3-arg ctor. constexpr bool kSupportsIteratorSetter = HasIteratorSetterCtor; - const bool useIteratorSetter = kSupportsIteratorSetter && ReactNativeFeatureFlags::enableCppPropsIteratorSetter(); + const bool useIteratorSetter = + kSupportsIteratorSetter && ReactNativeFeatureFlags_DO_NOT_USE::enableCppPropsIteratorSetter(); std::shared_ptr shadowNodeProps; if constexpr (kSupportsIteratorSetter) { @@ -151,11 +152,11 @@ class ConcreteComponentDescriptor : public ComponentDescriptor { #ifdef RN_SERIALIZABLE_STATE bool fallbackToDynamicRawPropsAccumulation = true; - if (ReactNativeFeatureFlags::enableExclusivePropsUpdateAndroid() && - ReactNativeFeatureFlags::enableAccumulatedUpdatesInRawPropsAndroid()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableExclusivePropsUpdateAndroid() && + ReactNativeFeatureFlags_DO_NOT_USE::enableAccumulatedUpdatesInRawPropsAndroid()) { // When exclusive props update is enabled, we only apply Props 1.5 processing // (raw props merging) when Props 2.0 is not available. - if (ReactNativeFeatureFlags::enablePropsUpdateReconciliationAndroid()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enablePropsUpdateReconciliationAndroid()) { // Cast to base Props reference to safely call virtual method const auto &baseProps = static_cast(*shadowNodeProps); if (strcmp(ShadowNodeT::Name(), baseProps.getDiffPropsImplementationTarget()) == 0) { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h b/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h index 91d73c080751..3cae3f91df6e 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -28,7 +28,7 @@ inline void fromRawValueShared( { ColorComponents colorComponents = {0, 0, 0, 0}; - if (ReactNativeFeatureFlags::enableNativeCSSParsing() && value.hasType()) { + if (ReactNativeFeatureFlags_DO_NOT_USE::enableNativeCSSParsing() && value.hasType()) { auto cssColor = parseCSSProperty((std::string)value); if (std::holds_alternative(cssColor)) { auto c = std::get(cssColor); diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp index a258ab9043eb..8f08f6480679 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/ShadowTree.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp index 42421a23729b..f23afca4237d 100644 --- a/packages/react-native/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp @@ -9,6 +9,7 @@ #include +#include #include #include #include