Skip to content

Add stable public CallInvoker C++ entry point (#58049) - #58049

Open
coado wants to merge 4 commits into
react:mainfrom
coado:export-D116921026
Open

Add stable public CallInvoker C++ entry point (#58049)#58049
coado wants to merge 4 commits into
react:mainfrom
coado:export-D116921026

Conversation

@coado

@coado coado commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

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:
[Internal]

Differential Revision: D116921026

Dawid Małecki added 3 commits August 21, 2026 01:21
Summary:
Add `<React/MapBuffer.h>` as the canonical public C++ entry point for MapBuffer and MapBufferBuilder. 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.

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

Differential Revision: D116632721
Summary:
Rolls the umbrella-header + include-guard mechanism across the
`react/renderer/uimanager` module, classifying the target as public.

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

React Native's own sources keep using the fine-grained
`<react/renderer/uimanager/...>` includes; only outside consumers use the
umbrella.

Changelog: [Internal]

Differential Revision: D116763079
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
@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 D116921026.

Summary:
Pull Request resolved: react#58049

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:
[Internal]

Differential Revision: D116921026
@meta-codesync meta-codesync Bot changed the title Add stable public CallInvoker C++ entry point Add stable public CallInvoker C++ entry point (#58049) Aug 21, 2026
@coado
coado force-pushed the export-D116921026 branch from 3dc536b to 422915d Compare August 21, 2026 10:32
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