explicitly report errors in MainThreadFlipperReceiver
Summary: Use responder rather than allowing exception to propagate. Reviewed By: jknoxville Differential Revision: D14538883 fbshipit-source-id: 2774a2adfcee356e1853fa3bf3c01aa113181262
This commit is contained in:
committed by
Facebook Github Bot
parent
b2d1506f15
commit
de46240272
@@ -9,32 +9,47 @@ package com.facebook.flipper.plugins.common;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import com.facebook.flipper.core.ErrorReportingRunnable;
|
||||
import com.facebook.flipper.core.FlipperConnection;
|
||||
import com.facebook.flipper.core.FlipperObject;
|
||||
import com.facebook.flipper.core.FlipperReceiver;
|
||||
import com.facebook.flipper.core.FlipperResponder;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
|
||||
public abstract class MainThreadFlipperReceiver implements FlipperReceiver {
|
||||
|
||||
public MainThreadFlipperReceiver(FlipperConnection connection) {
|
||||
this.mConnection = connection;
|
||||
// TODO(T41065412): remove unused constructor argument.
|
||||
}
|
||||
|
||||
private final FlipperConnection mConnection;
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
@Override
|
||||
public final void onReceive(final FlipperObject params, final FlipperResponder responder) {
|
||||
mHandler.post(
|
||||
new ErrorReportingRunnable(mConnection) {
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void runOrThrow() throws Exception {
|
||||
onReceiveOnMainThread(params, responder);
|
||||
public void run() {
|
||||
try {
|
||||
onReceiveOnMainThread(params, responder);
|
||||
} catch (Exception ex) {
|
||||
responder.error(
|
||||
new FlipperObject.Builder()
|
||||
.put("name", ex.getClass().getCanonicalName())
|
||||
.put("message", ex.getMessage())
|
||||
.put("stacktrace", getStackTraceString(ex))
|
||||
.build());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static String getStackTraceString(Throwable th) {
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
th.printStackTrace(new PrintWriter(stringWriter));
|
||||
return stringWriter.toString();
|
||||
}
|
||||
|
||||
public abstract void onReceiveOnMainThread(FlipperObject params, FlipperResponder responder)
|
||||
throws Exception;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user