diff --git a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/LithoDescriptors.kt b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/LithoDescriptors.kt index 22fb2b027..490f00270 100644 --- a/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/LithoDescriptors.kt +++ b/android/plugins/litho/src/main/java/com/facebook/flipper/plugins/uidebugger/litho/LithoDescriptors.kt @@ -8,52 +8,56 @@ package com.facebook.flipper.plugins.uidebugger.litho import com.facebook.flipper.plugins.uidebugger.common.InspectableObject -import com.facebook.flipper.plugins.uidebugger.descriptors.Descriptor +import com.facebook.flipper.plugins.uidebugger.descriptors.NodeDescriptor import com.facebook.litho.DebugComponent import com.facebook.litho.LithoView -object LithoViewDescriptor : Descriptor() { +object LithoViewDescriptor : NodeDescriptor { override fun getId(node: LithoView): String = System.identityHashCode(node).toString() override fun getName(node: LithoView): String = "LithoView" - override fun getChildren(node: LithoView, children: MutableList) { + override fun getChildren(node: LithoView): List { + val result = mutableListOf() val debugComponent = DebugComponent.getRootInstance(node) if (debugComponent != null) { - children.add(debugComponent) + result.add(debugComponent) } + return result } override fun getActiveChild(node: LithoView): Any? = null - override fun getData(node: LithoView, builder: MutableMap) {} + override fun getData(node: LithoView) = mapOf() } -object DebugComponentDescriptor : Descriptor() { +object DebugComponentDescriptor : NodeDescriptor { override fun getId(node: DebugComponent): String = System.identityHashCode(node).toString() override fun getName(node: DebugComponent): String { return node.component.simpleName } - // TODO the mutable list thing doesnt make sense for non chained descriptors, should just return - override fun getChildren(node: DebugComponent, children: MutableList) { + override fun getChildren(node: DebugComponent): List { + val result = mutableListOf() + val mountedView = node.mountedView val mountedDrawable = node.mountedDrawable if (mountedView != null) { - children.add(mountedView) + result.add(mountedView) } else if (mountedDrawable != null) { - children.add(mountedDrawable) + result.add(mountedDrawable) } else { for (child in node.childComponents) { - children.add(child) + result.add(child) } } + + return result } override fun getActiveChild(node: DebugComponent): Any? = null - // todo same here - override fun getData(node: DebugComponent, builder: MutableMap) {} + override fun getData(node: DebugComponent) = mapOf() } diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/LayoutTraversal.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/LayoutTraversal.kt index e90f4f58a..5f0edac20 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/LayoutTraversal.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/LayoutTraversal.kt @@ -9,9 +9,8 @@ package com.facebook.flipper.plugins.uidebugger.core import android.util.Log import com.facebook.flipper.plugins.uidebugger.LogTag -import com.facebook.flipper.plugins.uidebugger.common.InspectableObject -import com.facebook.flipper.plugins.uidebugger.descriptors.Descriptor import com.facebook.flipper.plugins.uidebugger.descriptors.DescriptorRegister +import com.facebook.flipper.plugins.uidebugger.descriptors.NodeDescriptor import com.facebook.flipper.plugins.uidebugger.model.Node class LayoutTraversal( @@ -19,7 +18,7 @@ class LayoutTraversal( val root: ApplicationRef ) { - internal inline fun Descriptor<*>.asAny(): Descriptor = this as Descriptor + internal inline fun NodeDescriptor<*>.asAny(): NodeDescriptor = this as NodeDescriptor /** Traverses the native android hierarchy */ fun traverse(): List { @@ -36,8 +35,7 @@ class LayoutTraversal( val descriptor = descriptorRegister.descriptorForClassUnsafe(node::class.java).asAny() - val children = mutableListOf() - descriptor.getChildren(node, children) + val children = descriptor.getChildren(node) val childrenIds = mutableListOf() @@ -61,8 +59,7 @@ class LayoutTraversal( descriptorRegister.descriptorForClassUnsafe(activeChild.javaClass).getId(activeChild) } - val attributes = mutableMapOf() - descriptor.getData(node, attributes) + val attributes = descriptor.getData(node) result.add( Node( diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/RootViewResolver.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/RootViewResolver.kt index d985a776c..f85408a04 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/RootViewResolver.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/RootViewResolver.kt @@ -34,7 +34,7 @@ class RootViewResolver { private var viewsField: Field? = null private var paramsField: Field? = null - class RootView(val view: View, val param: WindowManager.LayoutParams) + class RootView(val view: View, val param: WindowManager.LayoutParams?) interface Listener { fun onRootViewAdded(rootView: View) fun onRootViewRemoved(rootView: View) @@ -153,9 +153,9 @@ class RootViewResolver { for (i in views.indices) { val view = views[i] // TODO FIX, len(param) is not always the same as len(views) For now just use first - val param = params[0] + // params - roots.add(RootView(view, param)) + roots.add(RootView(view, null)) } } } diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/AbstractChainedDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/AbstractChainedDescriptor.kt deleted file mode 100644 index cd3eccf8c..000000000 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/AbstractChainedDescriptor.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.flipper.plugins.uidebugger.descriptors - -import com.facebook.flipper.plugins.uidebugger.common.InspectableObject - -/** - * This class derives from Descriptor and provides a canonical implementation of ChainedDescriptor}. - */ -abstract class AbstractChainedDescriptor : Descriptor(), ChainedDescriptor { - private var mSuper: Descriptor? = null - - final override fun setSuper(superDescriptor: Descriptor) { - if (superDescriptor !== mSuper) { - check(mSuper == null) - mSuper = superDescriptor - } - } - - fun getSuper(): Descriptor? { - return mSuper - } - - final override fun getActiveChild(node: T): Any? { - // ask each descriptor in the chain for an active child, if none available look up the chain - // until no more super descriptors - return onGetActiveChild(node) ?: mSuper?.getActiveChild(node) - } - - /** - * A globally unique ID used to identify a node in a hierarchy. If your node does not have a - * globally unique ID it is fine to rely on [System.identityHashCode]. - */ - final override fun getId(node: T): String { - return onGetId(node) - } - - abstract fun onGetId(node: T): String - - /** - * The name used to identify this node in the inspector. Does not need to be unique. A good - * default is to use the class name of the node. - */ - final override fun getName(node: T): String { - return onGetName(node) - } - - open fun onGetActiveChild(node: T): Any? = null - - abstract fun onGetName(node: T): String - - /** The children this node exposes in the inspector. */ - final override fun getChildren(node: T, children: MutableList) { - mSuper?.getChildren(node, children) - onGetChildren(node, children) - } - - open fun onGetChildren(node: T, children: MutableList) {} - - final override fun getData(node: T, builder: MutableMap) { - mSuper?.getData(node, builder) - onGetData(node, builder) - } - - /** - * Get the data to show for this node in the sidebar of the inspector. Each key will be a have its - * own section - */ - open fun onGetData(node: T, attributeSections: MutableMap) {} -} diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ActivityDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ActivityDescriptor.kt index cdd28bd8f..dbf801fae 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ActivityDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ActivityDescriptor.kt @@ -11,7 +11,7 @@ import android.app.Activity import com.facebook.flipper.plugins.uidebugger.common.InspectableObject import com.facebook.flipper.plugins.uidebugger.stetho.FragmentCompat -object ActivityDescriptor : AbstractChainedDescriptor() { +object ActivityDescriptor : ChainedDescriptor() { override fun onGetId(node: Activity): String { return System.identityHashCode(node).toString() diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt index 7476f0ea1..b3a9d8c77 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ApplicationRefDescriptor.kt @@ -13,7 +13,7 @@ import com.facebook.flipper.plugins.uidebugger.LogTag import com.facebook.flipper.plugins.uidebugger.core.ApplicationRef import com.facebook.flipper.plugins.uidebugger.core.RootViewResolver -object ApplicationRefDescriptor : AbstractChainedDescriptor() { +object ApplicationRefDescriptor : ChainedDescriptor() { val rootsLocal = RootViewResolver() override fun onGetActiveChild(node: ApplicationRef): Any? { diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ButtonDescriptor.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ButtonDescriptor.kt index 9e5fb6b8c..995bcd0e2 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ButtonDescriptor.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/descriptors/ButtonDescriptor.kt @@ -10,7 +10,7 @@ package com.facebook.flipper.plugins.uidebugger.descriptors import android.widget.Button import com.facebook.flipper.plugins.uidebugger.common.InspectableObject -object ButtonDescriptor : AbstractChainedDescriptor