xref: /aosp_15_r20/external/leakcanary2/shark/src/main/java/shark/internal/ReferencePathNode.kt (revision d9e8da70d8c9df9a41d7848ae506fb3115cae6e6)
1 package shark.internal
2 
3 import shark.GcRoot
4 import shark.LibraryLeakReferenceMatcher
5 import shark.internal.Reference.LazyDetails
6 
7 internal sealed class ReferencePathNode {
8   abstract val objectId: Long
9 
10   sealed class RootNode : ReferencePathNode() {
11     abstract val gcRoot: GcRoot
12     override val objectId: Long
13       get() = gcRoot.id
14 
15     class LibraryLeakRootNode(
16       override val gcRoot: GcRoot,
17       val matcher: LibraryLeakReferenceMatcher
18     ) : RootNode()
19 
20     class NormalRootNode(
21       override val gcRoot: GcRoot
22     ) : RootNode()
23   }
24 
25   class ChildNode(
26     override val objectId: Long,
27     /**
28      * The reference from the parent to this node
29      */
30     val parent: ReferencePathNode,
31     val lazyDetailsResolver: LazyDetails.Resolver,
32   ) : ReferencePathNode()
33 }
34