diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java index 6328a81075..3bdce77ef3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java @@ -128,8 +128,8 @@ public class UIImplementation { return mShadowNodeRegistry.getNode(reactTag); } - protected final ViewManager resolveViewManager(String className) { - return mViewManagers.get(className); + protected final @Nullable ViewManager resolveViewManager(String className) { + return mViewManagers.getViewManagerIfExists(className); } /*package*/ UIViewOperationQueue getUIViewOperationQueue() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java index debd5ecef2..73c37c10f1 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java @@ -42,19 +42,49 @@ public final class ViewManagerRegistry { mViewManagerResolver = null; } + /** + * @param className {@link String} that identifies the {@link ViewManager} inside the {@link + * ViewManagerRegistry}. This methods {@throws IllegalViewOperationException} if there is no + * view manager registered for the className received as a parameter. + * @return the {@link ViewManager} registered to the className received as a parameter + */ public ViewManager get(String className) { ViewManager viewManager = mViewManagers.get(className); if (viewManager != null) { return viewManager; } if (mViewManagerResolver != null) { - viewManager = mViewManagerResolver.getViewManager(className); - if (viewManager != null) { - mViewManagers.put(className, viewManager); - return viewManager; - } + viewManager = getViewManagerFromResolver(className); + if (viewManager != null) return viewManager; throw new IllegalViewOperationException("ViewManagerResolver returned null for " + className); } throw new IllegalViewOperationException("No ViewManager found for class " + className); } + + private @Nullable ViewManager getViewManagerFromResolver(String className) { + @Nullable ViewManager viewManager; + viewManager = mViewManagerResolver.getViewManager(className); + if (viewManager != null) { + mViewManagers.put(className, viewManager); + } + return viewManager; + } + + /** + * @param className {@link String} that identifies the {@link ViewManager} inside the {@link + * ViewManagerRegistry}. + * @return the {@link ViewManager} registered to the className received as a parameter or null if + * there is no ViewManager associated to the className received as a parameter. + */ + @Nullable + ViewManager getViewManagerIfExists(String className) { + ViewManager viewManager = mViewManagers.get(className); + if (viewManager != null) { + return viewManager; + } + if (mViewManagerResolver != null) { + return getViewManagerFromResolver(className); + } + return null; + } }