/** * 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 which is used to mark methods that are exposed to React Native. * * This applies to derived classes of {@link 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(RUNTIME) public @interface 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 * {@link ReactMethod}, and the hook can only be void or return JSON values (e.g. bool, * number, String, {@link WritableMap}, or {@link WritableArray}). Calling these * methods when running under the websocket executor is currently not supported. */ boolean isBlockingSynchronousMethod() default false; }