mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
50d8d46733
Summary:
This only works for the new cxx bridge (hopefully open sourcing soon!).
This diff allows Java native modules to expose synchronous hooks to JS via the ReactSyncHook annotation. The methods will appear in JS on the native module object (e.g. you would do `require('UIManager').mySyncHook('foo');`) which allows us to enforce that required native modules are installed at build time. In order to support remote debugging, both the args and return type must be JSON serializable (so that we can go back across to the device to resolve synchronous hooks).
Follow ups will be integration tests, adding support for return types besides void, and adding support for remote debugging.
Reviewed By: mhorowitz
Differential Revision: D3218794
fb-gh-sync-id: 7e3366a8254276f5a55eb806287419287ca9182b
fbshipit-source-id: 7e3366a8254276f5a55eb806287419287ca9182b
32 lines
1.2 KiB
Java
32 lines
1.2 KiB
Java
/**
|
|
* 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 {
|
|
}
|