Skip to content

Migrate JSPointerDispatcher to Kotlin#56910

Closed
cortinico wants to merge 1 commit into
facebook:mainfrom
cortinico:export-D105847417
Closed

Migrate JSPointerDispatcher to Kotlin#56910
cortinico wants to merge 1 commit into
facebook:mainfrom
cortinico:export-D105847417

Conversation

@cortinico
Copy link
Copy Markdown
Contributor

Summary:
Convert JSPointerDispatcher from Java to Kotlin as part of the ongoing React Native Android migration to 100% Kotlin. This follows the same pattern as the recent JSTouchDispatcher migration; the class becomes final in the API surface (Kotlin default), which is intentional since the class is not part of the supported public API.

Adjacent changes required by the migration:

  • Remove JSPointerDispatcher.java from the ReactNoNewJavaDetector allow-list.
  • Regenerate ReactAndroid.api to reflect the final modifier added to the class and its methods.
  • Fix one internal caller (EmbeddedReactView) whose eventDispatcher was being passed without a null-check; the call is now wrapped in the same eventDispatcher?.let { ... } pattern that already guards jsTouchDispatcher immediately above it.

Changelog: [Internal]

Differential Revision: D105847417

@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 May 20, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented May 20, 2026

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

Summary:
Convert `JSPointerDispatcher` from Java to Kotlin as part of the ongoing React Native Android migration to 100% Kotlin. This follows the same pattern as the recent `JSTouchDispatcher` migration; the class becomes `final` in the API surface (Kotlin default), which is intentional since the class is not part of the supported public API.

Adjacent changes required by the migration:
- Remove `JSPointerDispatcher.java` from the `ReactNoNewJavaDetector` allow-list.
- Regenerate `ReactAndroid.api` to reflect the `final` modifier added to the class and its methods.
- Fix one internal caller (`EmbeddedReactView`) whose `eventDispatcher` was being passed without a null-check; the call is now wrapped in the same `eventDispatcher?.let { ... }` pattern that already guards `jsTouchDispatcher` immediately above it.

Changelog: [Internal]

Differential Revision: D105847417
@cortinico cortinico force-pushed the export-D105847417 branch from aa85224 to 434ee14 Compare May 21, 2026 10:21
@meta-codesync meta-codesync Bot closed this in f1cd007 May 21, 2026
@facebook-github-tools facebook-github-tools Bot added the Merged This PR has been merged. label May 21, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented May 21, 2026

This pull request has been merged in f1cd007.

@react-native-bot
Copy link
Copy Markdown
Collaborator

This pull request was successfully merged by @cortinico in f1cd007

When will my fix make it into a release? | How to file a pick request?

kirillzyusko pushed a commit to kirillzyusko/react-native-keyboard-controller that referenced this pull request Jun 1, 2026
## 📜 Description

JSPointerDispatcher became a final Kotlin class in React Native 0.87+
(after the Java-to-Kotlin migration in
facebook/react-native#56910), so
JSPointerDispatcherCompat can no longer extend it.

While I'm restoring it in:
- facebook/react-native#57022

Ideally we would want to reduce the API surface of RN apis. 

So here I'm switching from inheritance to composition by holding an
internal
JSPointerDispatcher delegate and forwarding calls to it.

## 🤔 How Has This Been Tested?

Looking for guidance on how to test this.

<!-- Please describe in detail how you tested your changes. -->
<!-- Include details of your testing environment, and the tests you ran
to -->
<!-- see how your change affects other areas of the code, etc. -->

## 📸 Screenshots (if appropriate):

N/A

<!-- Add screenshots/video if needed -->
<!-- That would be highly appreciated if you can add how it looked
before and after your changes -->

## 📝 Checklist

- [ ] CI successfully passed
- [ ] I added new mocks and corresponding unit-tests if library API was
changed
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. fb-exported Merged This PR has been merged. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants