Skip to content

Commit 436bdda

Browse files
mateoguzmanafacebook-github-bot
authored andcommitted
Migrate ModuleSpec to Kotlin (facebook#51240)
Summary: Migrate com.facebook.react.bridge.ModuleSpec to Kotlin. ## Changelog: [INTERNAL] - Migrate com.facebook.react.bridge.ModuleSpec to Kotlin Pull Request resolved: facebook#51240 Test Plan: ```bash yarn test-android yarn android ``` Reviewed By: cortinico Differential Revision: D74568550 Pulled By: rshest fbshipit-source-id: 15cedc9e97f95aa2582ce12c9086336c12564371
1 parent 9b4be02 commit 436bdda

File tree

3 files changed

+75
-81
lines changed

3 files changed

+75
-81
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -959,12 +959,22 @@ public class com/facebook/react/bridge/ModuleHolder {
959959
public fun isTurboModule ()Z
960960
}
961961

962-
public class com/facebook/react/bridge/ModuleSpec {
963-
public fun getName ()Ljava/lang/String;
964-
public fun getProvider ()Ljavax/inject/Provider;
965-
public static fun nativeModuleSpec (Ljava/lang/Class;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
966-
public static fun nativeModuleSpec (Ljava/lang/String;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
967-
public static fun viewManagerSpec (Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
962+
public final class com/facebook/react/bridge/ModuleSpec {
963+
public static final field Companion Lcom/facebook/react/bridge/ModuleSpec$Companion;
964+
public synthetic fun <init> (Ljavax/inject/Provider;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
965+
public final fun getName ()Ljava/lang/String;
966+
public final fun getProvider ()Ljavax/inject/Provider;
967+
public final fun moduleName ()Ljava/lang/String;
968+
public static final fun nativeModuleSpec (Ljava/lang/Class;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
969+
public static final fun nativeModuleSpec (Ljava/lang/String;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
970+
public final fun provider ()Ljavax/inject/Provider;
971+
public static final fun viewManagerSpec (Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
972+
}
973+
974+
public final class com/facebook/react/bridge/ModuleSpec$Companion {
975+
public final fun nativeModuleSpec (Ljava/lang/Class;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
976+
public final fun nativeModuleSpec (Ljava/lang/String;Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
977+
public final fun viewManagerSpec (Ljavax/inject/Provider;)Lcom/facebook/react/bridge/ModuleSpec;
968978
}
969979

970980
public abstract class com/facebook/react/bridge/NativeArray : com/facebook/jni/HybridClassBase, com/facebook/react/bridge/NativeArrayInterface {

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleSpec.java

Lines changed: 0 additions & 75 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
package com.facebook.react.bridge
9+
10+
import com.facebook.common.logging.FLog
11+
import com.facebook.react.module.annotations.ReactModule
12+
import javax.inject.Provider
13+
14+
/**
15+
* A specification for a native module. This exists so that we don't have to pay the cost for
16+
* creation until/if the module is used.
17+
*/
18+
public class ModuleSpec
19+
private constructor(
20+
@get:JvmName("provider") public val provider: Provider<out NativeModule>,
21+
@get:JvmName("moduleName") public val name: String? = null
22+
) {
23+
public fun getProvider(): Provider<out NativeModule> = provider
24+
25+
public fun getName(): String? = name
26+
27+
public companion object {
28+
private const val TAG: String = "ModuleSpec"
29+
30+
@JvmStatic
31+
public fun viewManagerSpec(provider: Provider<out NativeModule>): ModuleSpec =
32+
ModuleSpec(provider)
33+
34+
@JvmStatic
35+
public fun nativeModuleSpec(
36+
type: Class<out NativeModule>,
37+
provider: Provider<out NativeModule>
38+
): ModuleSpec {
39+
val annotation: ReactModule? = type.getAnnotation(ReactModule::class.java)
40+
41+
return if (annotation == null) {
42+
FLog.w(
43+
TAG,
44+
"Could not find @ReactModule annotation on ${type.name}. " +
45+
"Creating the module eagerly to get the name. Consider adding the annotation.")
46+
val nativeModule: NativeModule = provider.get()
47+
ModuleSpec(provider, nativeModule.name)
48+
} else {
49+
ModuleSpec(provider, annotation.name)
50+
}
51+
}
52+
53+
@JvmStatic
54+
public fun nativeModuleSpec(
55+
className: String,
56+
provider: Provider<out NativeModule>
57+
): ModuleSpec = ModuleSpec(provider, className)
58+
}
59+
}

0 commit comments

Comments
 (0)