mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add a way to selectively enable TurboModules
Summary: Added a flag that checks if TurboModules are enabled, don't expose them to JS via the old module system. All TurboModules needs to implement TurboModule interface. Reviewed By: mdvacca Differential Revision: D13648332 fbshipit-source-id: f22506fe029ac82d56075f5b6962ff2df2e7eaa4
This commit is contained in:
committed by
Facebook Github Bot
parent
c93edb5ffd
commit
aa19fa02e9
@@ -17,6 +17,7 @@ public class ReactModuleInfo {
|
||||
private final boolean mHasConstants;
|
||||
private final boolean mIsCxxModule;
|
||||
private String mClassName;
|
||||
private final boolean mIsTurboModule;
|
||||
|
||||
public ReactModuleInfo(
|
||||
String name,
|
||||
@@ -24,13 +25,15 @@ public class ReactModuleInfo {
|
||||
boolean canOverrideExistingModule,
|
||||
boolean needsEagerInit,
|
||||
boolean hasConstants,
|
||||
boolean isCxxModule) {
|
||||
boolean isCxxModule,
|
||||
boolean isTurboModule) {
|
||||
mName = name;
|
||||
mClassName = className;
|
||||
mCanOverrideExistingModule = canOverrideExistingModule;
|
||||
mNeedsEagerInit = needsEagerInit;
|
||||
mHasConstants = hasConstants;
|
||||
mIsCxxModule = isCxxModule;
|
||||
mIsTurboModule = isTurboModule;
|
||||
}
|
||||
|
||||
public String name() {
|
||||
@@ -53,4 +56,6 @@ public class ReactModuleInfo {
|
||||
|
||||
public boolean isCxxModule() {return mIsCxxModule; }
|
||||
|
||||
public boolean isTurboModule() {return mIsTurboModule; }
|
||||
|
||||
}
|
||||
|
||||
@@ -23,5 +23,6 @@ rn_java_library(
|
||||
react_native_dep("third-party/java/jsr-305:jsr-305"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
react_native_target("java/com/facebook/react/module/model:model"),
|
||||
react_native_target("java/com/facebook/react/turbomodule/core/interfaces:interfaces"),
|
||||
],
|
||||
)
|
||||
|
||||
+22
-2
@@ -13,6 +13,7 @@ import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.module.annotations.ReactModuleList;
|
||||
import com.facebook.react.module.model.ReactModuleInfo;
|
||||
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
||||
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.CodeBlock;
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
@@ -26,6 +27,7 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import javax.annotation.processing.AbstractProcessor;
|
||||
import javax.annotation.processing.Filer;
|
||||
@@ -147,7 +149,7 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
|
||||
private CodeBlock getCodeBlockForReactModuleInfos(List<String> nativeModules)
|
||||
throws ReactModuleSpecException {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
final CodeBlock.Builder builder = CodeBlock.builder();
|
||||
if (nativeModules == null || nativeModules.isEmpty()) {
|
||||
builder.addStatement("return $T.emptyMap()", COLLECTIONS_TYPE);
|
||||
} else {
|
||||
@@ -170,6 +172,12 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
"Did you forget to add the @ReactModule annotation to the native module?");
|
||||
}
|
||||
|
||||
boolean isTurboModule = isTurboModuleTypeElement(typeElement);
|
||||
if (!isTurboModule) {
|
||||
TypeMirror nativeModuleSpecTypeMirror = typeElement.getSuperclass();
|
||||
isTurboModule = isTurboModuleTypeElement(mElements.getTypeElement(nativeModuleSpecTypeMirror.toString()));
|
||||
}
|
||||
|
||||
List<? extends Element> elements = typeElement.getEnclosedElements();
|
||||
boolean hasConstants = false;
|
||||
if (elements != null) {
|
||||
@@ -189,7 +197,8 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
.append(reactModule.canOverrideExistingModule()).append(", ")
|
||||
.append(reactModule.needsEagerInit()).append(", ")
|
||||
.append(hasConstants).append(", ")
|
||||
.append(reactModule.isCxxModule())
|
||||
.append(reactModule.isCxxModule()).append(", ")
|
||||
.append(isTurboModule)
|
||||
.append(")")
|
||||
.toString();
|
||||
|
||||
@@ -200,6 +209,17 @@ public class ReactModuleSpecProcessor extends AbstractProcessor {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* A Module is a Turbo Module if it either implements TurboModule or its super class,
|
||||
* typically NativeModuleSpec implements TurboMobile
|
||||
*/
|
||||
private boolean isTurboModuleTypeElement(TypeElement typeElement) {
|
||||
if (typeElement == null) {
|
||||
return false;
|
||||
}
|
||||
return typeElement.getInterfaces().stream().anyMatch(el -> el.toString().equals(TurboModule.class.getName()));
|
||||
}
|
||||
|
||||
private static class ReactModuleSpecException extends Exception {
|
||||
|
||||
public final String mMessage;
|
||||
|
||||
Reference in New Issue
Block a user