diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistration.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistration.java index 5e20f0970..27d3f435c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistration.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaScriptModuleRegistration.java @@ -66,7 +66,9 @@ class JavaScriptModuleRegistration { public int getMethodId(Method method) { final Integer id = mMethodsToIds.get(method); - Assertions.assertNotNull(id, "Unknown method: " + method.getName()); + if (id == null) { + Assertions.assertUnreachable("Unknown method: " + method.getName()); + } return id.intValue(); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java index f5d1f7a47..4b0396e0c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java @@ -19,6 +19,15 @@ import javax.annotation.Nullable; */ public class SoftAssertions { + /** + * Throw {@link AssertionException} with a given message. Use this method surrounded with + * {@code if} block with assert condition in case you plan to do string concatenation to produce + * the message. + */ + public static void assertUnreachable(String message) { + throw new AssertionException(message); + } + /** * Asserts the given condition, throwing an {@link AssertionException} if the condition doesn't * hold. diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java index 035560322..a41b7f726 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java @@ -27,13 +27,11 @@ import com.facebook.react.animation.AnimationListener; import com.facebook.react.animation.AnimationRegistry; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; -import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.SoftAssertions; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.touch.JSResponderHandler; -import com.facebook.react.uimanager.events.EventDispatcher; /** * Delegate of {@link UIManagerModule} that owns the native view hierarchy and mapping between @@ -420,9 +418,10 @@ import com.facebook.react.uimanager.events.EventDispatcher; public void removeRootView(int rootViewTag) { UiThreadUtil.assertOnUiThread(); - SoftAssertions.assertCondition( - mRootTags.get(rootViewTag), - "View with tag " + rootViewTag + " is not registered as a root view"); + if (!mRootTags.get(rootViewTag)) { + SoftAssertions.assertUnreachable( + "View with tag " + rootViewTag + " is not registered as a root view"); + } View rootView = mTagsToViews.get(rootViewTag); dropView(rootView); mRootTags.delete(rootViewTag); @@ -455,9 +454,10 @@ import com.facebook.react.uimanager.events.EventDispatcher; } public void setJSResponder(int reactTag, boolean blockNativeResponder) { - SoftAssertions.assertCondition( - !mRootTags.get(reactTag), - "Cannot block native responder on " + reactTag + " that is a root view"); + if (mRootTags.get(reactTag)) { + SoftAssertions.assertUnreachable( + "Cannot block native responder on " + reactTag + " that is a root view"); + } ViewParent viewParent = blockNativeResponder ? mTagsToViews.get(reactTag).getParent() : null; mJSResponderHandler.setJSResponder(reactTag, viewParent); }