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 b6083ea15..05995895a 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 parent: Id?, val qualifiedName: String, val name: String, val attributes: Map, 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 b86e21cab..bd9a81b80 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 @@ -36,13 +36,14 @@ class PartialLayoutTraversal( val visited = mutableListOf>() val observableRoots = mutableListOf() - val stack = mutableListOf() - stack.add(root) + // cur and parent Id + val stack = mutableListOf>() + stack.add(Pair(root, null)) val shallow = mutableSetOf() while (stack.isNotEmpty()) { - val node = stack.removeLast() + val (node, parentId) = stack.removeLast() try { // If we encounter a node that has it own observer, don't traverse @@ -53,11 +54,13 @@ class PartialLayoutTraversal( val descriptor = descriptorRegister.descriptorForClassUnsafe(node::class.java).asAny() + val curId = descriptor.getId(node) if (shallow.contains(node)) { visited.add( Immediate( Node( - descriptor.getId(node), + curId, + parentId, descriptor.getQualifiedName(node), descriptor.getName(node), emptyMap(), @@ -86,7 +89,7 @@ class PartialLayoutTraversal( children.forEach { child -> val childDescriptor = descriptorRegister.descriptorForClassUnsafe(child.javaClass) childrenIds.add(childDescriptor.getId(child)) - stack.add(child) + stack.add(Pair(child, curId)) // If there is an active child then don't traverse it if (activeChild != null && activeChild != child) { shallow.add(child) @@ -99,7 +102,8 @@ class PartialLayoutTraversal( visited.add( attributes.map { attrs -> Node( - descriptor.getId(node), + curId, + parentId, descriptor.getQualifiedName(node), descriptor.getName(node), attrs,