diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK b/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK index 759d28915d8..eaa8ab4df53 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/BUCK @@ -1,4 +1,4 @@ -load("//tools/build_defs/oss:rn_defs.bzl", "IS_OSS_BUILD", "react_native_dep", "react_native_target", "rn_android_library") +load("//tools/build_defs/oss:rn_defs.bzl", "IS_OSS_BUILD", "react_native_dep", "react_native_target", "react_native_tests_target", "rn_android_library") INTERFACES = [ "Dynamic.java", @@ -30,6 +30,9 @@ rn_android_library( react_native_dep("third-party/android/androidx:legacy-support-core-utils"), ], required_for_source_only_abi = True, + tests = [ + react_native_tests_target("java/com/facebook/react/bridge:bridge"), + ], visibility = [ "PUBLIC", ], diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistry.java index 4247f8a6ca5..4998395a21f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistry.java @@ -71,17 +71,8 @@ public final class JavaScriptModuleRegistry { private String getJSModuleName() { if (mName == null) { - // With proguard obfuscation turned on, proguard apparently (poorly) emulates inner - // classes or something because Class#getSimpleName() no longer strips the outer - // class name. We manually strip it here if necessary. - String name = mModuleInterface.getSimpleName(); - int dollarSignIndex = name.lastIndexOf('$'); - if (dollarSignIndex != -1) { - name = name.substring(dollarSignIndex + 1); - } - - // getting the class name every call is expensive, so cache it - mName = name; + // Getting the class name every call is expensive, so cache it + mName = JavaScriptModuleRegistry.getJSModuleName(mModuleInterface); } return mName; } @@ -94,4 +85,16 @@ public final class JavaScriptModuleRegistry { return null; } } + + public static String getJSModuleName(Class jsModuleInterface) { + // With proguard obfuscation turned on, proguard apparently (poorly) emulates inner + // classes or something because Class#getSimpleName() no longer strips the outer + // class name. We manually strip it here if necessary. + String name = jsModuleInterface.getSimpleName(); + int dollarSignIndex = name.lastIndexOf('$'); + if (dollarSignIndex != -1) { + name = name.substring(dollarSignIndex + 1); + } + return name; + } } diff --git a/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK b/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK index 62f5bd2dfa0..1f5f3672866 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK +++ b/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK @@ -25,8 +25,7 @@ rn_android_library( rn_robolectric_test( name = "bridge", srcs = glob(STANDARD_TEST_SRCS), - # Please change the contact to the oncall of your team - contacts = ["oncall+fbandroid_sheriff@xmail.facebook.com"], + contacts = ["oncall+react_native@xmail.facebook.com"], visibility = [ "PUBLIC", ], diff --git a/ReactAndroid/src/test/java/com/facebook/react/bridge/JavaScriptModuleRegistryTest.java b/ReactAndroid/src/test/java/com/facebook/react/bridge/JavaScriptModuleRegistryTest.java new file mode 100644 index 00000000000..47b8614c309 --- /dev/null +++ b/ReactAndroid/src/test/java/com/facebook/react/bridge/JavaScriptModuleRegistryTest.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) Facebook, Inc. and its 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.bridge; + +import org.junit.Assert; +import org.junit.Test; + +/** Tests for {@link JavaScriptModuleRegistry} */ +public class JavaScriptModuleRegistryTest { + + private interface TestJavaScriptModule extends JavaScriptModule { + void doSomething(); + } + + private interface OuterClass$NestedInnerClass extends JavaScriptModule { + void doSomething(); + } + + @Test + public void testGetJSModuleName() { + String name = JavaScriptModuleRegistry.getJSModuleName(TestJavaScriptModule.class); + Assert.assertEquals("TestJavaScriptModule", name); + } + + @Test + public void testGetJSModuleName_stripOuterClass() { + String name = JavaScriptModuleRegistry.getJSModuleName(OuterClass$NestedInnerClass.class); + Assert.assertEquals("NestedInnerClass", name); + } +}