Skip to content

Add stable public Debug C++ entry point - #58053

Open
coado wants to merge 3 commits into
react:mainfrom
coado:export-D116930195
Open

Add stable public Debug C++ entry point#58053
coado wants to merge 3 commits into
react:mainfrom
coado:export-D116930195

Conversation

@coado

@coado coado commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary:
Add <React/Debug.h> as the canonical public C++ entry point for React Native's debug assertion macros: react_native_assert, react_native_expect, and the REACT_NATIVE_DEBUG / REACT_NATIVE_PRODUCTION flags. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths.

Classify the redbox/ headers as private instead. They live in namespace unstable_redbox, have no consumers outside React Native, and are reachable only from three dev-menu .mm files, so they are fenced off with the private guard and deliberately left out of the umbrella.

Changelog:
[Internal]

Differential Revision: D116930195

Dawid Małecki and others added 3 commits August 21, 2026 03:15
Summary:
Rolls the umbrella-header + include-guard mechanism across the
`react/renderer/graphics` module, classifying the target as public.

- Adds `<React/Graphics.h>`, re-exporting the module's public interface headers.
- Adds `<react/cxxstableapi/UmbrellaGuard.h>` to 24 root headers and all 18
  platform headers.
- Wires the umbrella header directory into the Buck, CMake, CocoaPods, Gradle,
  and iOS prebuild header configurations.

`conversions.h` and `Geometry.h` are deliberately left unguarded. Both are
deprecation shims whose only content is a `#warning` redirecting to their
replacements; guarding them would bury that migration hint under a hard error,
and their enforcement is inherited from the headers they forward to.

`RCTPlatformColorUtils.h` is guarded but intentionally absent from the umbrella.
It is an Objective-C++ header (`UIColor` / `RCTUIColor`, `#import <UIKit/UIKit.h>`),
so including it would make the umbrella uncompilable from a plain C++ translation
unit on Apple platforms. By contrast
`configurePlatformColorCacheInvalidationHook.h` is plain C++ but exists only on
Android, so it is included behind `#ifdef ANDROID`, following the pattern already
used by `<React/View.h>`.

`PlatformColorParser.h` and `fromRawValueShared.h` include
`react/renderer/core/RawValue.h`, which was only reachable on Apple platforms
because `react/renderer/core:rawValue` was restricted to `platforms = APPLE`.
No source inside the graphics target included those headers off-Apple, so the
breakage was latent and invisible; reaching them through the umbrella surfaces
it. This change therefore widens `:rawValue` to all platforms and gives graphics
an unconditional dependency on it. That target exists specifically to break the
core/graphics dependency cycle, so no new cycle is introduced.

Also adds `tests/UmbrellaCompileTest.cpp`, which does nothing but include the
umbrella. No target compiled any umbrella header before this, so a
non-compiling umbrella could previously only be discovered by downstream
consumers.

Changelog:
[General][Added] - Add `<React/Graphics.h>` umbrella header for the graphics C++ module
[Android][Fixed] - Fix `react/renderer/graphics` failing to compile `PlatformColorParser.h` on Android

Differential Revision: D116779866
Summary:
Add `<React/CallInvoker.h>` as the canonical public C++ entry point for `CallInvoker`, `NativeMethodCallInvoker`, and `SchedulerPriority`. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths.

Export and stage the umbrella consistently through Buck, CMake, Android Prefab, CocoaPods, and the Apple prebuilt-header inventory. SwiftPM needs no change, since its header mapping for this module already preserves the directory structure.

The `ios-prebuild` header configuration needs an explicit entry here: the generic podspec parser only reads the first `header_dir`, so it would have flattened the umbrella into `ReactCommon/` and collided with the existing leaf header of the same basename.

Changelog:
[General][Added] - Add `<React/CallInvoker.h>` as the stable public C++ entry point for CallInvoker

Differential Revision: D116921026
Summary:
Add `<React/Debug.h>` as the canonical public C++ entry point for React Native's debug assertion macros: `react_native_assert`, `react_native_expect`, and the `REACT_NATIVE_DEBUG` / `REACT_NATIVE_PRODUCTION` flags. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths.

Classify the `redbox/` headers as private instead. They live in namespace `unstable_redbox`, have no consumers outside React Native, and are reachable only from three dev-menu `.mm` files, so they are fenced off with the private guard and deliberately left out of the umbrella.

Changelog:
[Internal]

Differential Revision: D116930195
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 21, 2026
@facebook-github-tools facebook-github-tools Bot added p: Software Mansion Partner: Software Mansion Partner p: Facebook Partner: Facebook labels Aug 21, 2026
@meta-codesync

meta-codesync Bot commented Aug 21, 2026

Copy link
Copy Markdown

@coado has exported this pull request. If you are a Meta employee, you can view the originating Diff in D116930195.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported p: Facebook Partner: Facebook p: Software Mansion Partner: Software Mansion Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant