Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ internal class CoreModulesPackage(
reactModule.needsEagerInit,
reactModule.isCxxModule,
ReactModuleInfo.classIsTurboModule(moduleClass),
moduleClass,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage
true,
reactModule.isCxxModule,
ReactModuleInfo.classIsTurboModule(moduleClass),
moduleClass,
)
else
ReactModuleInfo(
Expand All @@ -114,6 +115,7 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage
true,
CxxModuleWrapper::class.java.isAssignableFrom(moduleClass),
ReactModuleInfo.classIsTurboModule(moduleClass),
moduleClass,
)

reactModuleInfoMap[moduleName] = moduleInfo
Expand Down Expand Up @@ -153,6 +155,23 @@ public abstract class ReactPackageTurboModuleManagerDelegate : TurboModuleManage
return resolvedModule as TurboModule
}

override fun <TInterface> getModulesConformingToInterface(
clazz: Class<TInterface>
): List<TurboModule?> {
val modules = mutableListOf<TurboModule?>()

for (moduleProvider in moduleProviders) {
val moduleInfos = packageModuleInfos[moduleProvider]?.values ?: continue
for (moduleInfo in moduleInfos) {
if (clazz.isAssignableFrom(moduleInfo.moduleClass) && moduleInfo.isTurboModule) {
modules.add(moduleProvider.getModule(moduleInfo.name) as TurboModule)
}
}
}

return modules
}

override fun unstable_isModuleRegistered(moduleName: String): Boolean {
for (moduleProvider in moduleProviders) {
val moduleInfo: ReactModuleInfo? = packageModuleInfos[moduleProvider]?.get(moduleName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public class ModuleHolder {
true,
CxxModuleWrapper::class.java.isAssignableFrom(nativeModule.javaClass),
ReactModuleInfo.classIsTurboModule(nativeModule.javaClass),
nativeModule.javaClass,
)

internalModule = nativeModule
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,12 @@ public class TurboModuleManager(
return module
}

public fun <TInterface> getModulesConformingToInterface(
clazz: Class<TInterface>
): List<TurboModule?> {
return delegate?.getModulesConformingToInterface(clazz) ?: emptyList()
}

/**
* Given a ModuleHolder, and the TurboModule's moduleName, return the TurboModule instance.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public abstract class TurboModuleManagerDelegate {
*/
public abstract fun getModule(moduleName: String): TurboModule?

public abstract fun <TInterface> getModulesConformingToInterface(
clazz: Class<TInterface>
): List<TurboModule?>

public abstract fun unstable_isModuleRegistered(moduleName: String): Boolean

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,39 @@ public class ReactModuleInfo(
@get:JvmName("needsEagerInit") public val needsEagerInit: Boolean,
public val isCxxModule: Boolean,
public val isTurboModule: Boolean,
public val moduleClass: Class<*>
) {

@Deprecated(
"This constructor is deprecated and will be removed in the future. Use ReactModuleInfo(String, String, boolean, boolean, boolean, boolean)]",
"This constructor is deprecated and will be removed in the future. Use ReactModuleInfo(String, String, boolean, boolean, boolean, boolean, Class<*>)]",
replaceWith =
ReplaceWith(
expression =
"ReactModuleInfo(name, className, canOverrideExistingModule, needsEagerInit, isCxxModule, isTurboModule)"),
"ReactModuleInfo(name, className, canOverrideExistingModule, needsEagerInit, isCxxModule, isTurboModule, moduleClass)"),
level = DeprecationLevel.WARNING,
)
public constructor(
name: String,
className: String,
canOverrideExistingModule: Boolean,
needsEagerInit: Boolean,
isCxxModule: Boolean,
isTurboModule: Boolean
) : this(
name,
className,
canOverrideExistingModule,
needsEagerInit,
isCxxModule,
isTurboModule,
ReactModuleInfo::class.java /* placeholder */)

@Deprecated(
"This constructor is deprecated and will be removed in the future. Use ReactModuleInfo(String, String, boolean, boolean, boolean, boolean, Class<*>)]",
replaceWith =
ReplaceWith(
expression =
"ReactModuleInfo(name, className, canOverrideExistingModule, needsEagerInit, isCxxModule, isTurboModule, moduleClass)"),
level = DeprecationLevel.WARNING,
)
public constructor(
Expand All @@ -37,8 +62,15 @@ public class ReactModuleInfo(
needsEagerInit: Boolean,
@Suppress("UNUSED_PARAMETER") hasConstants: Boolean,
isCxxModule: Boolean,
isTurboModule: Boolean,
) : this(name, className, canOverrideExistingModule, needsEagerInit, isCxxModule, isTurboModule)
isTurboModule: Boolean
) : this(
name,
className,
canOverrideExistingModule,
needsEagerInit,
isCxxModule,
isTurboModule,
ReactModuleInfo::class.java /* placeholder */)

public companion object {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ internal class CoreReactPackage(
reactModule.needsEagerInit,
reactModule.isCxxModule,
ReactModuleInfo.classIsTurboModule(moduleClass),
moduleClass,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ constructor(private val config: MainPackageConfig? = null) :
reactModule.needsEagerInit,
reactModule.isCxxModule,
classIsTurboModule(moduleClass),
moduleClass,
)
}
return ReactModuleInfoProvider { moduleMap }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ class ReactModuleInfoTest {
/* needsEagerInit = */ false,
/* isCxxModule = */ false,
/* isTurboModule = */ false,
/* moduleClass = */ ReactModuleInfoTest::class.java,
)
assertThat(reactModuleInfo.name).isEqualTo("name")
assertThat(reactModuleInfo.canOverrideExistingModule).isFalse()
assertThat(reactModuleInfo.needsEagerInit).isFalse()
assertThat(reactModuleInfo.isCxxModule).isFalse()
assertThat(reactModuleInfo.isTurboModule).isFalse()
assertThat(reactModuleInfo.moduleClass).isEqualTo(ReactModuleInfoTest::class.java)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ internal class RNTesterApplication : Application(), ReactApplication {
needsEagerInit = false,
isCxxModule = false,
isTurboModule = true,
SampleTurboModule::class.java,
),
SampleLegacyModule.NAME to
ReactModuleInfo(
Expand All @@ -84,6 +85,7 @@ internal class RNTesterApplication : Application(), ReactApplication {
needsEagerInit = false,
isCxxModule = false,
isTurboModule = false,
SampleTurboModule::class.java,
),
)
}
Expand Down
Loading