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