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
This commit is contained in:
Lorenzo Blasa
2022-11-11 03:22:39 -08:00
committed by Facebook GitHub Bot
parent 51ca3a6cd7
commit f33e3fc78b
9 changed files with 32 additions and 4 deletions

View File

@@ -18,9 +18,10 @@ import com.facebook.litho.DebugComponent
class DebugComponentDescriptor(val register: DescriptorRegister) : NodeDescriptor<DebugComponent> {
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<Any> {
val result = mutableListOf<Any>()

View File

@@ -34,6 +34,9 @@ object MountedObjectDescriptor : NodeDescriptor<MountedObject> {
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<Any> = node.descriptor.getChildren(node.obj)
override fun getActiveChild(node: MountedObject): Any? = node.descriptor.getActiveChild(node.obj)

View File

@@ -49,6 +49,13 @@ abstract class ChainedDescriptor<T> : NodeDescriptor<T> {
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<String> {
val tags = onGetTags(node) ?: mSuper?.getTags(node)
return tags ?: setOf()

View File

@@ -42,6 +42,12 @@ interface NodeDescriptor<T> {
*/
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<Any>

View File

@@ -20,6 +20,10 @@ object ObjectDescriptor : NodeDescriptor<Any> {
return node.javaClass.simpleName
}
override fun getQualifiedName(node: Any): String {
return node::class.qualifiedName ?: ""
}
override fun getChildren(node: Any) = listOf<Any>()
override fun getData(node: Any) = mutableMapOf<MetadataId, InspectableObject>()

View File

@@ -31,6 +31,9 @@ object OffsetChildDescriptor : NodeDescriptor<OffsetChild> {
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<Any> = node.descriptor.getChildren(node.child)
override fun getActiveChild(node: OffsetChild): Any? = node.descriptor.getActiveChild(node.child)

View File

@@ -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<MetadataId, InspectableObject>,
val bounds: Bounds?,

View File

@@ -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,