From 6740b22ab081bd0cd9204b9127c7a68666e13cc0 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Tue, 29 Dec 2020 13:01:55 -0800 Subject: [PATCH] Add @DoNotStrip to exported methods in NativeModule specs Summary: NativeModule methods are meant to be called from JavaScript. As such, they may not necessarily have call-sites in Java. This means that they're succeptible to being stripped by proguard. This diff annotates all exported NativeModule methods with DoNotStrip, so that proguard doesn't strip them. We already do this in the legacy codegen. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D25723801 fbshipit-source-id: a7c8701e0a5d03a970f5f19cc6ae6b320a2e99a1 --- .../resolver/FunctionResolvedType.java | 2 ++ .../modules/GenerateModuleJavaSpec.js | 3 +- .../GenerateModuleJavaSpec-test.js.snap | 33 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/resolver/FunctionResolvedType.java b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/resolver/FunctionResolvedType.java index 2a7468ce11e..7896494eebb 100644 --- a/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/resolver/FunctionResolvedType.java +++ b/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/src/main/java/com/facebook/react/codegen/generator/resolver/FunctionResolvedType.java @@ -103,6 +103,8 @@ public final class FunctionResolvedType extends ResolvedType { // React methods need special `@ReactMethod` annotation for now. methodBuilder.addAnnotation(annotationBuilder.build()); + // TODO(T82242829) Add @DoNotStrip annotation + return methodBuilder.build(); } diff --git a/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js b/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js index b8238cf4786..34334426418 100644 --- a/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js +++ b/packages/react-native-codegen/src/generators/modules/GenerateModuleJavaSpec.js @@ -395,6 +395,7 @@ module.exports = { 'com.facebook.react.bridge.ReactMethod', 'com.facebook.react.bridge.ReactModuleWithSpec', 'com.facebook.react.turbomodule.core.interfaces.TurboModule', + 'com.facebook.proguard.annotations.DoNotStrip', ]); const methods = properties.map(method => { @@ -443,7 +444,7 @@ module.exports = { const methodJavaAnnotation = `@ReactMethod${ isSyncMethod ? '(isBlockingSynchronousMethod = true)' : '' - }`; + }\n @DoNotStrip`; const methodBody = method.optional ? getFalsyReturnStatementFromReturnType( methodTypeAnnotation.returnTypeAnnotation, diff --git a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleJavaSpec-test.js.snap b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleJavaSpec-test.js.snap index a5564d2fbaa..5e314758e47 100644 --- a/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleJavaSpec-test.js.snap +++ b/packages/react-native-codegen/src/generators/modules/__tests__/__snapshots__/GenerateModuleJavaSpec-test.js.snap @@ -16,6 +16,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; @@ -32,15 +33,19 @@ public abstract class NativeSampleTurboModuleSpec extends ReactContextBaseJavaMo } @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract WritableMap difficult(ReadableMap A); @ReactMethod + @DoNotStrip public abstract void optionals(ReadableMap A); @ReactMethod + @DoNotStrip public void optionalMethod(ReadableMap options, Callback callback, ReadableArray extras) {} @ReactMethod + @DoNotStrip public abstract void getArrays(ReadableMap options); } ", @@ -63,6 +68,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -96,6 +102,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -109,6 +116,7 @@ public abstract class AliasTurboModuleSpec extends ReactContextBaseJavaModule im } @ReactMethod + @DoNotStrip public abstract void cropImage(ReadableMap cropData); } ", @@ -131,6 +139,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; @@ -146,12 +155,15 @@ public abstract class NativeCameraRollManagerSpec extends ReactContextBaseJavaMo } @ReactMethod + @DoNotStrip public abstract void getPhotos(ReadableMap params, Promise promise); @ReactMethod + @DoNotStrip public abstract void saveToCameraRoll(String uri, String type, Promise promise); @ReactMethod + @DoNotStrip public abstract void deletePhotos(ReadableArray assets, Promise promise); } ", @@ -169,6 +181,7 @@ public abstract class NativeCameraRollManagerSpec extends ReactContextBaseJavaMo package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -183,18 +196,23 @@ public abstract class NativeExceptionsManagerSpec extends ReactContextBaseJavaMo } @ReactMethod + @DoNotStrip public abstract void reportFatalException(String message, ReadableArray stack, double exceptionId); @ReactMethod + @DoNotStrip public abstract void reportSoftException(String message, ReadableArray stack, double exceptionId); @ReactMethod + @DoNotStrip public void reportException(ReadableMap data) {} @ReactMethod + @DoNotStrip public abstract void updateExceptionMessage(String message, ReadableArray stack, double exceptionId); @ReactMethod + @DoNotStrip public void dismissRedbox() {} } ", @@ -217,6 +235,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -268,33 +287,43 @@ public abstract class NativeSampleTurboModuleSpec extends ReactContextBaseJavaMo } @ReactMethod + @DoNotStrip public abstract void voidFunc(); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract boolean getBool(boolean arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract double getNumber(double arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract String getString(String arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract WritableArray getArray(ReadableArray arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract WritableMap getObject(ReadableMap arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract double getRootTag(double arg); @ReactMethod(isBlockingSynchronousMethod = true) + @DoNotStrip public abstract WritableMap getValue(double x, String y, ReadableMap z); @ReactMethod + @DoNotStrip public abstract void getValueWithCallback(Callback callback); @ReactMethod + @DoNotStrip public abstract void getValueWithPromise(boolean error, Promise promise); } ", @@ -317,6 +346,7 @@ Map { package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -329,6 +359,7 @@ public abstract class NativeSampleTurboModuleSpec extends ReactContextBaseJavaMo } @ReactMethod + @DoNotStrip public abstract void voidFunc(); } ", @@ -346,6 +377,7 @@ public abstract class NativeSampleTurboModuleSpec extends ReactContextBaseJavaMo package com.facebook.fbreact.specs; +import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -358,6 +390,7 @@ public abstract class NativeSampleTurboModule2Spec extends ReactContextBaseJavaM } @ReactMethod + @DoNotStrip public abstract void voidFunc(); } ",