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 035bcc698..127ae86f8 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 @@ -10,7 +10,7 @@ package com.facebook.flipper.plugins.uidebugger.litho.descriptors import android.graphics.Bitmap import com.facebook.flipper.plugins.uidebugger.descriptors.* import com.facebook.flipper.plugins.uidebugger.litho.LithoTag -import com.facebook.flipper.plugins.uidebugger.litho.descriptors.props.ComponentPropExtractor +import com.facebook.flipper.plugins.uidebugger.litho.descriptors.props.ComponentDataExtractor import com.facebook.flipper.plugins.uidebugger.litho.descriptors.props.LayoutPropExtractor import com.facebook.flipper.plugins.uidebugger.model.Bounds import com.facebook.flipper.plugins.uidebugger.model.InspectableObject @@ -69,6 +69,9 @@ class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescripto private val UserPropsId = MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "Litho Props") + private val StateId = + MetadataRegister.register(MetadataRegister.TYPE_ATTRIBUTE, NAMESPACE, "Litho State") + override fun getData(node: DebugComponent): MaybeDeferred> { return Deferred { val attributeSections = mutableMapOf() @@ -77,7 +80,14 @@ class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescripto attributeSections[LayoutId] = InspectableObject(layoutProps.toMap()) if (!node.canResolve()) { - val props = ComponentPropExtractor.getProps(node.component) + val stateContainer = node.stateContainer + if (stateContainer != null) { + attributeSections[StateId] = + ComponentDataExtractor.getState(stateContainer, node.component.simpleName) + } + + val props = ComponentDataExtractor.getProps(node.component) + attributeSections[UserPropsId] = InspectableObject(props.toMap()) } diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentPropExtractor.kt b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentDataExtractor.kt similarity index 86% rename from android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentPropExtractor.kt rename to android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentDataExtractor.kt index cc4abd47c..1920f3d58 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentPropExtractor.kt +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/props/ComponentDataExtractor.kt @@ -13,8 +13,10 @@ import com.facebook.flipper.plugins.uidebugger.descriptors.MetadataRegister import com.facebook.flipper.plugins.uidebugger.model.* import com.facebook.litho.Component import com.facebook.litho.SpecGeneratedComponent +import com.facebook.litho.StateContainer import com.facebook.litho.annotations.Prop import com.facebook.litho.annotations.ResType +import com.facebook.litho.annotations.State import com.facebook.litho.editor.EditorRegistry import com.facebook.litho.editor.model.EditorArray import com.facebook.litho.editor.model.EditorBool @@ -25,10 +27,8 @@ import com.facebook.litho.editor.model.EditorShape import com.facebook.litho.editor.model.EditorString import com.facebook.litho.editor.model.EditorValue import com.facebook.litho.editor.model.EditorValue.EditorVisitor -import com.facebook.yoga.* -object ComponentPropExtractor { - private const val NAMESPACE = "ComponentPropExtractor" +object ComponentDataExtractor { fun getProps(component: Component): Map { val props = mutableMapOf() @@ -79,6 +79,25 @@ object ComponentPropExtractor { return props } + fun getState(stateContainer: StateContainer, componentName: String): InspectableObject { + + val stateFields = mutableMapOf() + for (field in stateContainer.javaClass.declaredFields) { + field.isAccessible = true + val stateAnnotation = field.getAnnotation(State::class.java) + val isKStateField = field.name == "mStates" + if (stateAnnotation != null || isKStateField) { + val id = getMetadataId(componentName, field.name) + val editorValue: EditorValue? = EditorRegistry.read(field.type, field, stateContainer) + if (editorValue != null) { + stateFields[id] = toInspectable(field.name, editorValue) + } + } + } + + return InspectableObject(stateFields) + } + private fun getMetadataId( namespace: String, key: String,