From b15d438498fbca9545b35e8bbe3d4c4929f78aa6 Mon Sep 17 00:00:00 2001 From: Ruslan Shestopalyuk Date: Fri, 12 Apr 2024 09:40:31 -0700 Subject: [PATCH] Convert interfaces inside devsupport/interfaces to Kotlin (#44055) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44055 ## Changelog: [Internal] - Was looking into how devsupport is exactly implemented on different platforms (in the context of doing it for a new platform) and figured I may just well convert this to Koltin in the process (helped to understand inner working details as well). Reviewed By: christophpurrer Differential Revision: D56052137 fbshipit-source-id: 25280a57f46bec95dc1437ea6eb2eef08332797f --- ...oadCallback.java => BundleLoadCallback.kt} | 6 +-- ...ener.java => DevBundleDownloadListener.kt} | 10 ++--- ...wManager.java => DevLoadingViewManager.kt} | 12 ++---- .../interfaces/DevOptionHandler.java | 22 ---------- .../devsupport/interfaces/DevOptionHandler.kt | 21 ++++++++++ ...allback.java => DevSplitBundleCallback.kt} | 7 ++-- .../interfaces/ErrorCustomizer.java | 20 ---------- .../devsupport/interfaces/ErrorCustomizer.kt | 21 ++++++++++ ...allback.java => PackagerStatusCallback.kt} | 6 +-- .../devsupport/interfaces/RedBoxHandler.java | 40 ------------------- .../devsupport/interfaces/RedBoxHandler.kt | 40 +++++++++++++++++++ .../{StackFrame.java => StackFrame.kt} | 28 ++++++------- 12 files changed, 113 insertions(+), 120 deletions(-) rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{BundleLoadCallback.java => BundleLoadCallback.kt} (62%) rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{DevBundleDownloadListener.java => DevBundleDownloadListener.kt} (50%) rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{DevLoadingViewManager.java => DevLoadingViewManager.kt} (53%) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.kt rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{DevSplitBundleCallback.java => DevSplitBundleCallback.kt} (77%) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.kt rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{PackagerStatusCallback.java => PackagerStatusCallback.kt} (54%) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.kt rename packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/{StackFrame.java => StackFrame.kt} (56%) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.kt similarity index 62% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.kt index 4fd1cbf5054ae1..188dd61f26a5b2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/BundleLoadCallback.kt @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; +package com.facebook.react.devsupport.interfaces -public interface BundleLoadCallback { - void onSuccess(); +public fun interface BundleLoadCallback { + public fun onSuccess() } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.kt similarity index 50% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.kt index 0cd5ff8391b043..95f6c642b7b0bf 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.kt @@ -5,14 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; - -import androidx.annotation.Nullable; +package com.facebook.react.devsupport.interfaces public interface DevBundleDownloadListener { - void onSuccess(); + public fun onSuccess() - void onProgress(@Nullable String status, @Nullable Integer done, @Nullable Integer total); + public fun onProgress(status: String?, done: Int?, total: Int?) - void onFailure(Exception cause); + public fun onFailure(cause: Exception?) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt similarity index 53% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt index 5b51c4f89258a3..08d4757a4c5b96 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt @@ -5,17 +5,13 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; - -import androidx.annotation.Nullable; +package com.facebook.react.devsupport.interfaces /** Interface to display loading messages on top of the screen. */ public interface DevLoadingViewManager { + public fun showMessage(message: String) - void showMessage(final String message); - - void updateProgress( - final @Nullable String status, final @Nullable Integer done, final @Nullable Integer total); + public fun updateProgress(status: String?, done: Int?, total: Int?) - void hide(); + public fun hide() } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.java deleted file mode 100644 index c3056ef8a52874..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.devsupport.interfaces; - -/** - * Callback class for custom options that may appear in {@link DevSupportManager} developer options - * menu. In case when option registered for this handler is selected from the menu, the instance - * method {@link #onOptionSelected} will be triggered. - */ -public interface DevOptionHandler { - - /** - * Triggered in case when user select custom developer option from the developers options menu - * displayed with {@link DevSupportManager}. - */ - void onOptionSelected(); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.kt new file mode 100644 index 00000000000000..e139f8a173a7ae --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevOptionHandler.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.devsupport.interfaces + +/** + * Callback class for custom options that may appear in [DevSupportManager] developer options menu. + * In case when option registered for this handler is selected from the menu, the instance method + * [.onOptionSelected] will be triggered. + */ +public fun interface DevOptionHandler { + /** + * Triggered in case when user select custom developer option from the developers options menu + * displayed with [DevSupportManager]. + */ + public fun onOptionSelected() +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.kt similarity index 77% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.kt index 24e9437211de02..f0a7bac89f8ff8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSplitBundleCallback.kt @@ -5,13 +5,12 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; +package com.facebook.react.devsupport.interfaces /** Callback class for loading split JS bundles from Metro in development. */ public interface DevSplitBundleCallback { /** Called when the split JS bundle has been downloaded and evaluated. */ - void onSuccess(); - + public fun onSuccess() /** Called when the split JS bundle failed to load. */ - void onError(String url, Throwable cause); + public fun onError(url: String?, cause: Throwable?) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.java deleted file mode 100644 index 41686902547262..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.devsupport.interfaces; - -import android.util.Pair; - -/** Interface that lets parts of the app process the errors before showing the redbox */ -public interface ErrorCustomizer { - - /** - * The function that need to be registered using {@link DevSupportManager}.registerErrorCustomizer - * and is called before passing the error to the RedBox. - */ - Pair customizeErrorInfo(Pair errorInfo); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.kt new file mode 100644 index 00000000000000..bd36a6e45f8820 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorCustomizer.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.devsupport.interfaces + +import android.util.Pair + +/** Interface that lets parts of the app process the errors before showing the redbox */ +public fun interface ErrorCustomizer { + /** + * The function that need to be registered using [DevSupportManager].registerErrorCustomizer and + * is called before passing the error to the RedBox. + */ + public fun customizeErrorInfo( + errorInfo: Pair> + ): Pair> +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.kt similarity index 54% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.kt index 92af512e948a91..ba92316fb51b61 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/PackagerStatusCallback.kt @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; +package com.facebook.react.devsupport.interfaces -public interface PackagerStatusCallback { - void onPackagerStatusFetched(boolean packagerIsRunning); +public fun interface PackagerStatusCallback { + public fun onPackagerStatusFetched(packagerIsRunning: Boolean) } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.java deleted file mode 100644 index a8f15b5c8bda4c..00000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.devsupport.interfaces; - -import android.content.Context; -import android.text.SpannedString; -import androidx.annotation.Nullable; - -/** - * Interface used by {@link BridgeDevSupportManager} to allow interception on any redboxes during - * development and handling the information from the redbox. The implementation should be passed by - * setRedBoxHandler in ReactInstanceManager. - */ -public interface RedBoxHandler { - /** Callback interface for {@link #reportRedbox}. */ - interface ReportCompletedListener { - void onReportSuccess(SpannedString spannedString); - - void onReportError(SpannedString spannedString); - } - - /** Handle the information from the redbox. */ - void handleRedbox(@Nullable String title, StackFrame[] stack, ErrorType errorType); - - /** Whether the report feature is enabled. */ - boolean isReportEnabled(); - - /** Report the information from the redbox and set up a callback listener. */ - void reportRedbox( - Context context, - String title, - StackFrame[] stack, - String sourceUrl, - ReportCompletedListener reportCompletedListener); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.kt new file mode 100644 index 00000000000000..63404fa75f6303 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/RedBoxHandler.kt @@ -0,0 +1,40 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.devsupport.interfaces + +import android.content.Context +import android.text.SpannedString + +/** + * Interface used by [BridgeDevSupportManager] to allow interception on any redboxes during + * development and handling the information from the redbox. The implementation should be passed by + * setRedBoxHandler in ReactInstanceManager. + */ +public interface RedBoxHandler { + /** Callback interface for [.reportRedbox]. */ + public interface ReportCompletedListener { + public fun onReportSuccess(spannedString: SpannedString?) + + public fun onReportError(spannedString: SpannedString?) + } + + /** Handle the information from the redbox. */ + public fun handleRedbox(title: String?, stack: Array, errorType: ErrorType) + + /** Whether the report feature is enabled. */ + public fun isReportEnabled(): Boolean + + /** Report the information from the redbox and set up a callback listener. */ + public fun reportRedbox( + context: Context, + title: String, + stack: Array, + sourceUrl: String, + reportCompletedListener: ReportCompletedListener + ) +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.kt similarity index 56% rename from packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.java rename to packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.kt index 1f5207c6564fdf..47f32567879a0f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/StackFrame.kt @@ -5,40 +5,40 @@ * LICENSE file in the root directory of this source tree. */ -package com.facebook.react.devsupport.interfaces; +package com.facebook.react.devsupport.interfaces -import org.json.JSONObject; +import org.json.JSONObject /** Represents a generic entry in a stack trace, be it originally from JS or Java. */ public interface StackFrame { /** * Get the file this stack frame points to. * - *

JS traces return the full path to the file here, while Java traces only return the file name + * JS traces return the full path to the file here, while Java traces only return the file name * (the path is not known). */ - public String getFile(); + public val file: String? /** Get the name of the method this frame points to. */ - public String getMethod(); + public val method: String? - /** Get the line number this frame points to in the file returned by {@link #getFile()}. */ - public int getLine(); + /** Get the line number this frame points to in the file returned by [.getFile]. */ + public val line: Int - /** Get the column this frame points to in the file returned by {@link #getFile()}. */ - public int getColumn(); + /** Get the column this frame points to in the file returned by [.getFile]. */ + public val column: Int /** * Get just the name of the file this frame points to. * - *

For JS traces this is different from {@link #getFile()} in that it only returns the file - * name, not the full path. For Java traces there is no difference. + * For JS traces this is different from [.getFile] in that it only returns the file name, not the + * full path. For Java traces there is no difference. */ - public String getFileName(); + public val fileName: String? /** Whether this frame is collapsed. */ - public boolean isCollapsed(); + public val isCollapsed: Boolean /** Convert the stack frame to a JSON representation. */ - public JSONObject toJSON(); + public fun toJSON(): JSONObject? }