From 620b41b691e281321e627a723e579b0b996c4bbf Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Wed, 1 Nov 2023 06:41:55 -0700 Subject: [PATCH] Fix npe crash in visibility check Summary: https://fb.workplace.com/groups/443457641253219/permalink/1716178925529425/ we had this stack trace which i belive is because we are accessing the litho view after its been unmounted, this is possible as the attributes fetching is async. To fix we move this part to be sync on the main thread ui-debugger] Client error during traversal: {\n \"nodeName\": \"DeferredProcessing\",\n \"errorType\": \"NullPointerException\",\n \"errorMessage\": \"Attempt to invoke virtual method 'com.facebook.rendercore.extensions.ExtensionState com.facebook.litho.LithoHostListenerCoordinator.getVisibilityExtensionState()' on a null object reference\",\n \"stack\": \"java.lang.NullPointerException: Attempt to invoke virtual method 'com.facebook.rendercore.extensions.ExtensionState com.facebook.litho.LithoHostListenerCoordinator.getVisibilityExtensionState()' on a null object reference\\n\\tat com.facebook.litho.LithoView.getVisibilityExtensionState(LithoView.java:710)\\n\\tat com.facebook.litho.DebugComponent$Companion.isVisible(DebugComponent.kt:406)\\n\\tat com.facebook.flipper.plugins.uidebugger.litho.descriptors.DebugComponentDescriptor.getMountingData(DebugComponentDescriptor.kt:182)\\n\\tat com.facebook.flipper.plugins.uidebugger.litho.descriptors.DebugComponentDescriptor.access$getMountingData(DebugComponentDescriptor.kt:32)\\n\\tat com.facebook.flipper.plugins.uidebugger.litho.descriptors.Debug Reviewed By: adityasharat Differential Revision: D50843793 fbshipit-source-id: 8c1df8b291371fd379cb819df33ed933f36026a6 --- .../litho/descriptors/DebugComponentDescriptor.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/DebugComponentDescriptor.kt b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/DebugComponentDescriptor.kt index 6de5e232d..75b114d74 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/DebugComponentDescriptor.kt +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/DebugComponentDescriptor.kt @@ -7,7 +7,6 @@ package com.facebook.flipper.plugins.uidebugger.litho.descriptors -import android.graphics.Bitmap import com.facebook.flipper.plugins.uidebugger.descriptors.DescriptorRegister import com.facebook.flipper.plugins.uidebugger.descriptors.Id import com.facebook.flipper.plugins.uidebugger.descriptors.MetadataRegister @@ -102,10 +101,13 @@ class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescripto override fun getAttributes( node: DebugComponent ): MaybeDeferred> { + + // this accesses the litho view so do this on the main thread + val mountingData = getMountingData(node) + return Deferred { val attributeSections = mutableMapOf() - val mountingData = getMountingData(node) attributeSections[MountingDataId] = InspectableObject(mountingData) val layoutProps = LayoutPropExtractor.getProps(node) @@ -138,9 +140,7 @@ class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescripto } return tags } - - override fun getSnapshot(node: DebugComponent, bitmap: Bitmap?): Bitmap? = null - + override fun getInlineAttributes(node: DebugComponent): Map { val attributes = mutableMapOf() val key = node.key