diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK b/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK index c147933c5e8..68c1e25fcd9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK @@ -11,6 +11,7 @@ INTERFACES = [ "ReadableArray.java", "ReadableType.java", "NativeArrayInterface.java", + "LifecycleEventListener.java", ] rn_android_library( diff --git a/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java b/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java index 99d9c760d12..373c78cc354 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java +++ b/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java @@ -15,7 +15,6 @@ 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; @@ -152,6 +151,16 @@ public class ReactModuleSpecProcessor extends AbstractProcessor { } else { builder.addStatement("$T map = new $T()", MAP_TYPE, INSTANTIATED_MAP_TYPE); + String turboModuleInterfaceCanonicalName = + "com.facebook.react.turbomodule.core.interfaces.TurboModule"; + TypeMirror turboModuleInterface = + mElements.getTypeElement(turboModuleInterfaceCanonicalName).asType(); + + if (turboModuleInterface == null) { + throw new RuntimeException( + "com.facebook.react.turbomodule.core.interfaces.TurboModule interface not found."); + } + for (String nativeModule : nativeModules) { String keyString = nativeModule; @@ -171,12 +180,15 @@ 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())); + boolean isTurboModule; + try { + isTurboModule = mTypes.isAssignable(typeElement.asType(), turboModuleInterface); + } catch (Exception ex) { + throw new RuntimeException( + "Failed to check if " + + nativeModule + + " is type-assignable to " + + turboModuleInterfaceCanonicalName); } List elements = typeElement.getEnclosedElements(); @@ -222,18 +234,6 @@ 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; diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/BUCK b/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/BUCK index 0cad1b2e00a..23de9ad34e3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/BUCK @@ -30,7 +30,10 @@ rn_android_library( react_native_target("java/com/facebook/react/bridge:bridge"), react_native_target("java/com/facebook/react/common:common"), react_native_target("java/com/facebook/react/module/annotations:annotations"), - react_native_target("java/com/facebook/react/modules/common:common"), react_native_target("java/com/facebook/react/modules/network:network"), ], + exported_deps = [ + react_native_target("java/com/facebook/react/modules/common:common"), + react_native_target("java/com/facebook/react/bridge:interfaces"), + ], )