/*
 * 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.bridge
/**
 * Annotation which is used to mark methods that are exposed to React Native.
 *
 * This applies to derived classes of [BaseJavaModule], which will generate a list of exported
 * methods by searching for those which are annotated with this annotation and adding a JS callback
 * for each.
 */
@Retention(AnnotationRetention.RUNTIME)
public annotation class ReactMethod(
    /**
     * Whether the method can be called from JS synchronously **on the JS thread**, possibly
     * returning a result.
     *
     * WARNING: in the vast majority of cases, you should leave this to false which allows your
     * native module methods to be called asynchronously: calling methods synchronously can have
     * strong performance penalties and introduce threading-related bugs to your native modules.
     *
     * In order to support remote debugging, both the method args and return type must be
     * serializable to JSON: this means that we only support the same args as [ReactMethod], and the
     * hook can only be void or return JSON values (e.g. bool, number, String, [ ], or
     * [WritableArray]). Calling these methods when running under the websocket executor is
     * currently not supported.
     */
    public val isBlockingSynchronousMethod: Boolean = false
)
