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
This commit is contained in:
Ramanpreet Nara 2020-12-29 13:01:55 -08:00 коммит произвёл Facebook GitHub Bot
Родитель c776f09e5f
Коммит 6740b22ab0
3 изменённых файлов: 37 добавлений и 1 удалений

Просмотреть файл

@ -103,6 +103,8 @@ public final class FunctionResolvedType extends ResolvedType<FunctionType> {
// React methods need special `@ReactMethod` annotation for now.
methodBuilder.addAnnotation(annotationBuilder.build());
// TODO(T82242829) Add @DoNotStrip annotation
return methodBuilder.build();
}

Просмотреть файл

@ -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,

Просмотреть файл

@ -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();
}
",