From f33e3fc78be58f3bec3afec3f5d217aefe848bf4 Mon Sep 17 00:00:00 2001 From: Lorenzo Blasa Date: Fri, 11 Nov 2022 03:22:39 -0800 Subject: [PATCH] Add qualified name to Node Summary: Our descriptors currently have a method to return the name as it will be displayed on the elements hierarchy. However, it doesn't provide enough context if the name is to be used to discover the type in our code base. This change adds a qualified name method that can provide a more complete name which can indeed be used by the Open In IDE functionality, for example. Reviewed By: passy Differential Revision: D40936785 fbshipit-source-id: 790ae02b9ebf37501765c52a24307fcaaaf9c14d --- .../litho/descriptors/DebugComponentDescriptor.kt | 7 ++++--- .../plugins/uidebugger/litho/descriptors/MountedDawable.kt | 3 +++ .../plugins/uidebugger/descriptors/ChainedDescriptor.kt | 7 +++++++ .../plugins/uidebugger/descriptors/NodeDescriptor.kt | 6 ++++++ .../plugins/uidebugger/descriptors/ObjectDescriptor.kt | 4 ++++ .../uidebugger/descriptors/OffsetChildDescriptor.kt | 3 +++ .../com/facebook/flipper/plugins/uidebugger/model/Node.kt | 1 + .../plugins/uidebugger/traversal/PartialLayoutTraversal.kt | 2 ++ desktop/plugins/public/ui-debugger/types.tsx | 3 ++- 9 files changed, 32 insertions(+), 4 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 dc4bff5e5..a37bc858c 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 @@ -18,9 +18,10 @@ import com.facebook.litho.DebugComponent class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescriptor { private val NAMESPACE = "DebugComponent" - override fun getName(node: DebugComponent): String { - return node.component.simpleName - } + override fun getName(node: DebugComponent): String = node.component.simpleName + + override fun getQualifiedName(node: com.facebook.litho.DebugComponent): String = + node.component::class.qualifiedName ?: "" override fun getChildren(node: DebugComponent): List { val result = mutableListOf() diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/MountedDawable.kt b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/MountedDawable.kt index a1b10b7ff..e66895dcf 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/MountedDawable.kt +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/descriptors/MountedDawable.kt @@ -34,6 +34,9 @@ object MountedObjectDescriptor : NodeDescriptor { override fun getName(node: MountedObject): String = node.descriptor.getName(node.obj) + override fun getQualifiedName(node: MountedObject): String = + node.descriptor.getQualifiedName(node.obj) + override fun getChildren(node: MountedObject): List = node.descriptor.getChildren(node.obj) override fun getActiveChild(node: MountedObject): Any? = node.descriptor.getActiveChild(node.obj) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ChainedDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ChainedDescriptor.kt index 89626f800..6243759e6 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ChainedDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ChainedDescriptor.kt @@ -49,6 +49,13 @@ abstract class ChainedDescriptor : NodeDescriptor { return onGetName(node) } + final override fun getQualifiedName(node: T): String { + node?.let { n -> + return n::class.qualifiedName ?: "" + } + return "" + } + final override fun getTags(node: T): Set { val tags = onGetTags(node) ?: mSuper?.getTags(node) return tags ?: setOf() diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt index 35247fbb3..26514b68f 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/NodeDescriptor.kt @@ -42,6 +42,12 @@ interface NodeDescriptor { */ fun getName(node: T): String + /** + * The qualified name used to identify this node in the inspector. Does not need to be unique. A + * good default is to use the class qualified name of the node. + */ + fun getQualifiedName(node: T): String + /** The children this node exposes in the inspector. */ fun getChildren(node: T): List diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ObjectDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ObjectDescriptor.kt index 9a03ce557..7dd61cf5f 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ObjectDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ObjectDescriptor.kt @@ -20,6 +20,10 @@ object ObjectDescriptor : NodeDescriptor { return node.javaClass.simpleName } + override fun getQualifiedName(node: Any): String { + return node::class.qualifiedName ?: "" + } + override fun getChildren(node: Any) = listOf() override fun getData(node: Any) = mutableMapOf() diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/OffsetChildDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/OffsetChildDescriptor.kt index 7d074f52d..ef7aeb5cd 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/OffsetChildDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/OffsetChildDescriptor.kt @@ -31,6 +31,9 @@ object OffsetChildDescriptor : NodeDescriptor { override fun getName(node: OffsetChild): String = node.descriptor.getName(node.child) + override fun getQualifiedName(node: OffsetChild): String = + node.descriptor.getQualifiedName(node.child) + override fun getChildren(node: OffsetChild): List = node.descriptor.getChildren(node.child) override fun getActiveChild(node: OffsetChild): Any? = node.descriptor.getActiveChild(node.child) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt index a067b4e2c..5530e83d5 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt @@ -12,6 +12,7 @@ import com.facebook.flipper.plugins.uidebugger.descriptors.Id @kotlinx.serialization.Serializable data class Node( val id: Id, + val qualifiedName: String, val name: String, val attributes: Map, val bounds: Bounds?, diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt index 6bf42a909..e8d84f3c0 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt @@ -56,6 +56,7 @@ class PartialLayoutTraversal( visited.add( Node( node.nodeId(), + descriptor.getQualifiedName(node), descriptor.getName(node), emptyMap(), null, @@ -91,6 +92,7 @@ class PartialLayoutTraversal( visited.add( Node( node.nodeId(), + descriptor.getQualifiedName(node), descriptor.getName(node), attributes, bounds, diff --git a/desktop/plugins/public/ui-debugger/types.tsx b/desktop/plugins/public/ui-debugger/types.tsx index 4da4ded6c..9ceffc060 100644 --- a/desktop/plugins/public/ui-debugger/types.tsx +++ b/desktop/plugins/public/ui-debugger/types.tsx @@ -52,6 +52,7 @@ export type UpdateMetadataEvent = { export type UINode = { id: Id; + qualifiedName: string; name: string; attributes: Record; children: Id[]; @@ -112,7 +113,7 @@ export type Id = number | TreeItemIndex; export type MetadataId = number; export type TreeState = {expandedNodes: Id[]}; -export type Tag = 'Native' | 'Declarative' | 'Android' | 'Litho '; +export type Tag = 'Native' | 'Declarative' | 'Android' | 'Litho'; export type Inspectable = | InspectableObject