From 288934398b0bdbb6b6fff130f8d5351e5b473b84 Mon Sep 17 00:00:00 2001 From: Aaron Chiu Date: Tue, 23 Aug 2016 18:57:08 -0700 Subject: [PATCH] remove all @ReactModule runtime annotation processing Summary: Runtime annotation processing uses reflection which is slow. We'll use build time annotation processing instead and create at build time static ModuleInfo classes which have "name", "canOverrideExistingModule", "supportsWebWorkers", "needsEagerInit". Reviewed By: lexs Differential Revision: D3752243 fbshipit-source-id: 3518c6f38087d8799a61410864007041389c0e15 --- .../facebook/react/bridge/BaseJavaModule.java | 28 ++++--------------- .../facebook/react/bridge/ModuleSpecTest.java | 24 +++++++++++----- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java index 2b7561d6ef6a9b..8ac10972f7adf3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java @@ -9,13 +9,6 @@ package com.facebook.react.bridge; -import com.facebook.common.logging.FLog; -import com.facebook.infer.annotation.Assertions; -import com.facebook.react.bridge.annotations.ReactModule; -import com.facebook.react.common.ReactConstants; -import com.facebook.systrace.Systrace; -import com.facebook.systrace.SystraceMessage; - import javax.annotation.Nullable; import java.io.IOException; @@ -24,6 +17,10 @@ import java.util.HashMap; import java.util.Map; +import com.facebook.infer.annotation.Assertions; +import com.facebook.systrace.Systrace; +import com.facebook.systrace.SystraceMessage; + import static com.facebook.infer.annotation.Assertions.assertNotNull; import static com.facebook.systrace.Systrace.TRACE_TAG_REACT_JAVA_BRIDGE; @@ -465,17 +462,6 @@ public final void writeConstantsField(JsonWriter writer, String fieldName) throw writer.endObject(); } - @Override - public String getName() { - ReactModule module = getClass().getAnnotation(ReactModule.class); - if (module == null) { - throw new IllegalStateException( - getClass().getSimpleName() + - "module must have @ReactModule annotation or override getName()"); - } - return module.name(); - } - @Override public void initialize() { // do nothing @@ -499,11 +485,7 @@ public void onCatalystInstanceDestroy() { @Override public boolean supportsWebWorkers() { - ReactModule module = getClass().getAnnotation(ReactModule.class); - if (module == null) { - return false; - } - return module.supportsWebWorkers(); + return false; } private static char paramTypeToChar(Class paramClass) { diff --git a/ReactAndroid/src/test/java/com/facebook/react/bridge/ModuleSpecTest.java b/ReactAndroid/src/test/java/com/facebook/react/bridge/ModuleSpecTest.java index a96a0b18da7753..772e506d68f765 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/bridge/ModuleSpecTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/bridge/ModuleSpecTest.java @@ -9,9 +9,11 @@ package com.facebook.react.bridge; +import com.facebook.react.common.build.ReactBuildConfig; + import org.junit.Rule; -import org.junit.runner.RunWith; import org.junit.Test; +import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; @@ -19,9 +21,6 @@ import org.powermock.reflect.Whitebox; import org.robolectric.RobolectricTestRunner; -import com.facebook.react.bridge.annotations.ReactModule; -import com.facebook.react.common.build.ReactBuildConfig; - import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -77,20 +76,31 @@ public void testSimpleContextConstructor() { assertThat(contextModule.getReactApplicationContext()).isSameAs(context); } - @ReactModule(name = "ComplexModule") public static class ComplexModule extends BaseJavaModule { + public ComplexModule(int a, int b) { } + + public String getName() { + return "ComplexModule"; + } } - @ReactModule(name = "SimpleModule") public static class SimpleModule extends BaseJavaModule { + + public String getName() { + return "SimpleModule"; + } } - @ReactModule(name = "SimpleContextModule") public static class SimpleContextModule extends ReactContextBaseJavaModule { + public SimpleContextModule(ReactApplicationContext context) { super(context); } + + public String getName() { + return "SimpleContextModule"; + } } }