mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Implement ReactContext.getNativeModule support
Summary: `ReactContext.getNativeModule` can be used to access NativeModules. With these changes, it can also be used to instantiate (if necessary) and retrieve a TurboModule. Reviewed By: mdvacca Differential Revision: D15167631 fbshipit-source-id: 3cb0d9a4be16cbadebbf6648c3f1481ba26513c3
This commit is contained in:
committed by
Facebook Github Bot
parent
db0ec66341
commit
12c0ec85f7
@@ -25,10 +25,10 @@ import com.facebook.react.common.ReactConstants;
|
||||
import com.facebook.react.common.annotations.VisibleForTesting;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.turbomodule.core.JSCallInvokerHolderImpl;
|
||||
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
||||
import com.facebook.react.turbomodule.core.interfaces.TurboModuleRegistry;
|
||||
import com.facebook.systrace.Systrace;
|
||||
import com.facebook.systrace.TraceListener;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.annotation.Native;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -96,6 +96,7 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
private @Nullable String mSourceURL;
|
||||
|
||||
private JavaScriptContextHolder mJavaScriptContextHolder;
|
||||
private @Nullable TurboModuleRegistry mTurboModuleRegistry = null;
|
||||
|
||||
// C++ parts
|
||||
private final HybridData mHybridData;
|
||||
@@ -421,16 +422,25 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
|
||||
@Override
|
||||
public <T extends NativeModule> boolean hasNativeModule(Class<T> nativeModuleInterface) {
|
||||
return mNativeModuleRegistry.hasModule(getNameFromAnnotation(nativeModuleInterface));
|
||||
String moduleName = getNameFromAnnotation(nativeModuleInterface);
|
||||
return mTurboModuleRegistry != null && mTurboModuleRegistry.hasModule(moduleName) ? true : mNativeModuleRegistry.hasModule(moduleName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends NativeModule> T getNativeModule(Class<T> nativeModuleInterface) {
|
||||
return (T) mNativeModuleRegistry.getModule(getNameFromAnnotation(nativeModuleInterface));
|
||||
return (T) getNativeModule(getNameFromAnnotation(nativeModuleInterface));
|
||||
}
|
||||
|
||||
@Override
|
||||
public NativeModule getNativeModule(String moduleName) {
|
||||
if (mTurboModuleRegistry != null) {
|
||||
TurboModule turboModule = mTurboModuleRegistry.getModule(moduleName);
|
||||
|
||||
if (turboModule != null) {
|
||||
return (NativeModule)turboModule;
|
||||
}
|
||||
}
|
||||
|
||||
return mNativeModuleRegistry.getModule(moduleName);
|
||||
}
|
||||
|
||||
@@ -445,7 +455,16 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
// This is only used by com.facebook.react.modules.common.ModuleDataCleaner
|
||||
@Override
|
||||
public Collection<NativeModule> getNativeModules() {
|
||||
return mNativeModuleRegistry.getAllModules();
|
||||
Collection<NativeModule> nativeModules = new ArrayList<>();
|
||||
nativeModules.addAll(mNativeModuleRegistry.getAllModules());
|
||||
|
||||
if (mTurboModuleRegistry != null) {
|
||||
for (TurboModule turboModule : mTurboModuleRegistry.getModules()) {
|
||||
nativeModules.add((NativeModule) turboModule);
|
||||
}
|
||||
}
|
||||
|
||||
return nativeModules;
|
||||
}
|
||||
|
||||
private native void jniHandleMemoryPressure(int level);
|
||||
@@ -517,6 +536,10 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
}
|
||||
}
|
||||
|
||||
public void setTurboModuleRegistry(TurboModuleRegistry getter) {
|
||||
mTurboModuleRegistry = getter;
|
||||
}
|
||||
|
||||
private void decrementPendingJSCalls() {
|
||||
int newPendingCalls = mPendingJSCalls.decrementAndGet();
|
||||
// TODO(9604406): handle case of web workers injecting messages to main thread
|
||||
|
||||
Reference in New Issue
Block a user