/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.bridge;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Annotation for a method in a {@link NativeModule} that can be called from JS synchronously **on
* the JS thread**, possibly returning a result.
*
* 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 {@link ReactMethod}, and the hook can
* only be void or return JSON values (e.g. bool, number, String, {@link WritableMap}, or
* {@link WritableArray}).
*
* In the vast majority of cases, you should use {@link ReactMethod} 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.
*/
@Retention(RUNTIME)
public @interface ReactSyncHook {
}