Skip to content

Commit

Permalink
Migrate NativeModuleRegistryBuilder to Kotlin (#47508)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #47508

Changelog: [Internal]

Reviewed By: tdn120

Differential Revision: D60037204

fbshipit-source-id: 2b405e492520e075b83a075009d25fb7b7fa8925
  • Loading branch information
javache authored and facebook-github-bot committed Nov 8, 2024
1 parent 2ec547a commit e3c3a0c
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 73 deletions.
7 changes: 4 additions & 3 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,11 @@ public class com/facebook/react/MemoryPressureRouter : android/content/Component
public fun removeMemoryPressureListener (Lcom/facebook/react/bridge/MemoryPressureListener;)V
}

public class com/facebook/react/NativeModuleRegistryBuilder {
public final class com/facebook/react/NativeModuleRegistryBuilder {
public fun <init> (Lcom/facebook/react/bridge/ReactApplicationContext;)V
public fun <init> (Lcom/facebook/react/bridge/ReactApplicationContext;Lcom/facebook/react/ReactInstanceManager;)V
public fun build ()Lcom/facebook/react/bridge/NativeModuleRegistry;
public fun processPackage (Lcom/facebook/react/ReactPackage;)V
public final fun build ()Lcom/facebook/react/bridge/NativeModuleRegistry;
public final fun processPackage (Lcom/facebook/react/ReactPackage;)V
}

public abstract class com/facebook/react/ReactActivity : androidx/appcompat/app/AppCompatActivity, com/facebook/react/modules/core/DefaultHardwareBackBtnHandler, com/facebook/react/modules/core/PermissionAwareActivity {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

package com.facebook.react

import com.facebook.react.bridge.ModuleHolder
import com.facebook.react.bridge.NativeModuleRegistry
import com.facebook.react.bridge.ReactApplicationContext

/** Helper class to build NativeModuleRegistry. */
public class NativeModuleRegistryBuilder(
private val reactApplicationContext: ReactApplicationContext,
) {

private val modules = HashMap<String, ModuleHolder>()

@Deprecated(
"ReactInstanceManager is not used",
ReplaceWith("NativeModuleRegistryBuilder(reactApplicationContext)"))
public constructor(
reactApplicationContext: ReactApplicationContext,
@Suppress("UNUSED_PARAMETER") reactInstanceManager: ReactInstanceManager
) : this(reactApplicationContext) {}

public fun processPackage(reactPackage: ReactPackage) {
// We use an iterable instead of an iterator here to ensure thread safety, and that this list
// cannot be modified
val moduleHolders =
@Suppress("DEPRECATION")
if (reactPackage is LazyReactPackage) {
reactPackage.getNativeModuleIterator(reactApplicationContext)
} else if (reactPackage is BaseReactPackage) {
reactPackage.getNativeModuleIterator(reactApplicationContext)
} else {
ReactPackageHelper.getNativeModuleIterator(reactPackage, reactApplicationContext)
}
for (moduleHolder in moduleHolders) {
val name = moduleHolder.name
val existingNativeModule = modules[name]
if (existingNativeModule != null) {
check(moduleHolder.canOverrideExistingModule) {
"""
Native module $name tried to override ${existingNativeModule.className}.
Check the getPackages() method in MainApplication.java, it might be that module is being created twice.
If this was your intention, set canOverrideExistingModule=true. This error may also be present if the
package is present only once in getPackages() but is also automatically added later during build time
by autolinking. Try removing the existing entry and rebuild.
"""
}
}
modules[name] = moduleHolder
}
}

public fun build(): NativeModuleRegistry = NativeModuleRegistry(reactApplicationContext, modules)
}
Original file line number Diff line number Diff line change
Expand Up @@ -1536,7 +1536,7 @@ private ReactApplicationContext createReactContext(
private NativeModuleRegistry processPackages(
ReactApplicationContext reactContext, List<ReactPackage> packages) {
NativeModuleRegistryBuilder nativeModuleRegistryBuilder =
new NativeModuleRegistryBuilder(reactContext, this);
new NativeModuleRegistryBuilder(reactContext);

ReactMarker.logMarker(PROCESS_PACKAGES_START);

Expand Down

0 comments on commit e3c3a0c

Please sign in to comment.