Skip to content

Move renderer color parsing out of headers - #58521

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

Move renderer color parsing out of headers#58521
coado wants to merge 3 commits into
react:mainfrom
coado:export-D119500849

Conversation

@coado

@coado coado commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Summary:
Move shared and platform-specific Graphics color-parsing implementations from exported headers into owned source files across generic C++, Android, Apple, and Windows targets. Preserve the existing public entry points and parsing behavior.

Update Buck source selection so default configurations link the generic C++ parser, and keep the React Native macOS and Windows mirrors synchronized.

Changelog: [Internal]

Differential Revision: D119500849

Dawid Małecki and others added 3 commits September 14, 2026 08:10
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:
Declare direct CSS dependencies for renderer targets that consume CSS headers instead of relying on View or Graphics to expose them transitively. Cover Buck, CMake, CocoaPods, and SwiftPM without changing header visibility or runtime behavior.

Changelog: [Internal]

Differential Revision: D119489856
Summary:
Move shared and platform-specific Graphics color-parsing implementations from exported headers into owned source files across generic C++, Android, Apple, and Windows targets. Preserve the existing public entry points and parsing behavior.

Update Buck source selection so default configurations link the generic C++ parser, and keep the React Native macOS and Windows mirrors synchronized.

Changelog: [Internal]

Differential Revision: D119500849
@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 Sep 14, 2026
@facebook-github-tools facebook-github-tools Bot added p: Software Mansion Partner: Software Mansion Partner p: Facebook Partner: Facebook labels Sep 14, 2026
@meta-codesync

meta-codesync Bot commented Sep 14, 2026

Copy link
Copy Markdown

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

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