From b70152cdefcc6f8e9e519ffac591ab26f49dedc8 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 15 Oct 2020 11:46:33 -0700 Subject: [PATCH] Fix NativeLinking split Summary: In D24324247 (https://github.com/facebook/react-native/commit/56c363e39af6488904cbfd2046314c45babeb0f4), I split NativeLinking into NativeLinkingManager and NativeIntentAndroid. There was this line in NativeLinking.js, that I didn't migrate correctly: ``` export default ((Platform.OS === 'android' ? TurboModuleRegistry.getEnforcing('IntentAndroid') : TurboModuleRegistry.getEnforcing('LinkingManager')): Spec); ``` I separated this conditional statement into two others: ``` export default TurboModuleRegistry.getEnforcing('IntentAndroid'); export default TurboModuleRegistry.getEnforcing('LinkingManager'); ``` The problem here is that now on iOS, we're hard requiring IntentAndroid, and on Android, we're hard requiring LinkingManager. Understandably, this started throwing errors in our e2e infra. This diff fixes this problem by: 1. Changing the relevant `getEnforcing` calls into `get` calls. 2. Wrapping all usages of NativeIntentAndroid, and NativeLinkingManager, which are already guarded by `Platform.OS` checks, by a nullthrows. This should satisfy flow. **Note:** NativeIntentAndroid is only used on Android, where it must be available. Similarly, NativeLinkingManager is only used on iOS, where it must be available. Changelog: [Internal] build-break overriding_review_checks_triggers_an_audit_and_retroactive_review Oncall Short Name: fbandroid_sheriff Differential Revision: D24338558 fbshipit-source-id: b0d22cba77e67837834269deaa317dc73d2457dc --- Libraries/Linking/Linking.js | 21 +++++++++++---------- Libraries/Linking/NativeIntentAndroid.js | 2 +- Libraries/Linking/NativeLinkingManager.js | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Libraries/Linking/Linking.js b/Libraries/Linking/Linking.js index 00f737ae48a..27998010171 100644 --- a/Libraries/Linking/Linking.js +++ b/Libraries/Linking/Linking.js @@ -16,6 +16,7 @@ import Platform from '../Utilities/Platform'; import NativeLinkingManager from './NativeLinkingManager'; import NativeIntentAndroid from './NativeIntentAndroid'; import invariant from 'invariant'; +import nullthrows from 'nullthrows'; /** * `Linking` gives you a general interface to interact with both incoming @@ -25,7 +26,7 @@ import invariant from 'invariant'; */ class Linking extends NativeEventEmitter { constructor() { - super(Platform.OS === 'ios' ? NativeLinkingManager : undefined); + super(Platform.OS === 'ios' ? nullthrows(NativeLinkingManager) : undefined); } /** @@ -55,9 +56,9 @@ class Linking extends NativeEventEmitter { openURL(url: string): Promise { this._validateURL(url); if (Platform.OS === 'android') { - return NativeIntentAndroid.openURL(url); + return nullthrows(NativeIntentAndroid).openURL(url); } else { - return NativeLinkingManager.openURL(url); + return nullthrows(NativeLinkingManager).openURL(url); } } @@ -69,9 +70,9 @@ class Linking extends NativeEventEmitter { canOpenURL(url: string): Promise { this._validateURL(url); if (Platform.OS === 'android') { - return NativeIntentAndroid.canOpenURL(url); + return nullthrows(NativeIntentAndroid).canOpenURL(url); } else { - return NativeLinkingManager.canOpenURL(url); + return nullthrows(NativeLinkingManager).canOpenURL(url); } } @@ -82,9 +83,9 @@ class Linking extends NativeEventEmitter { */ openSettings(): Promise { if (Platform.OS === 'android') { - return NativeIntentAndroid.openSettings(); + return nullthrows(NativeIntentAndroid).openSettings(); } else { - return NativeLinkingManager.openSettings(); + return nullthrows(NativeLinkingManager).openSettings(); } } @@ -97,9 +98,9 @@ class Linking extends NativeEventEmitter { getInitialURL(): Promise { return Platform.OS === 'android' ? InteractionManager.runAfterInteractions().then(() => - NativeIntentAndroid.getInitialURL(), + nullthrows(NativeIntentAndroid).getInitialURL(), ) - : NativeLinkingManager.getInitialURL(); + : nullthrows(NativeLinkingManager).getInitialURL(); } /* @@ -118,7 +119,7 @@ class Linking extends NativeEventEmitter { }>, ): Promise { if (Platform.OS === 'android') { - return NativeIntentAndroid.sendIntent(action, extras); + return nullthrows(NativeIntentAndroid).sendIntent(action, extras); } else { return new Promise((resolve, reject) => reject(new Error('Unsupported'))); } diff --git a/Libraries/Linking/NativeIntentAndroid.js b/Libraries/Linking/NativeIntentAndroid.js index 807c999ef9c..b5d61e975d4 100644 --- a/Libraries/Linking/NativeIntentAndroid.js +++ b/Libraries/Linking/NativeIntentAndroid.js @@ -28,4 +28,4 @@ export interface Spec extends TurboModule { ) => Promise; } -export default (TurboModuleRegistry.getEnforcing('IntentAndroid'): Spec); +export default (TurboModuleRegistry.get('IntentAndroid'): ?Spec); diff --git a/Libraries/Linking/NativeLinkingManager.js b/Libraries/Linking/NativeLinkingManager.js index 7e744b8bf6e..95a93817c32 100644 --- a/Libraries/Linking/NativeLinkingManager.js +++ b/Libraries/Linking/NativeLinkingManager.js @@ -25,4 +25,4 @@ export interface Spec extends TurboModule { +removeListeners: (count: number) => void; } -export default (TurboModuleRegistry.getEnforcing('LinkingManager'): Spec); +export default (TurboModuleRegistry.get('LinkingManager'): ?Spec);