All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kshark.internal.ReferencePathNode.kt Maven / Gradle / Ivy

package kshark.internal

import kshark.GcRoot
import kshark.LibraryLeakReferenceMatcher
import kshark.LeakTraceReference

internal sealed class ReferencePathNode {
  abstract val objectId: Long

  interface LibraryLeakNode {
    val matcher: LibraryLeakReferenceMatcher
  }

  sealed class RootNode : ReferencePathNode() {
    abstract val gcRoot: GcRoot

    class LibraryLeakRootNode(
      override val objectId: Long,
      override val gcRoot: GcRoot,
      override val matcher: LibraryLeakReferenceMatcher
    ) : RootNode(), LibraryLeakNode

    class NormalRootNode(
      override val objectId: Long,
      override val gcRoot: GcRoot
    ) : RootNode()
  }

  sealed class ChildNode : ReferencePathNode() {

    abstract val parent: ReferencePathNode

    /**
     * The reference from the parent to this node
     */
    abstract val refFromParentType: LeakTraceReference.ReferenceType
    abstract val refFromParentName: String

    /**
     * If this node is an instance, then this is the id of the class that actually
     * declares the node.
     */
    abstract val owningClassId: Long

    class LibraryLeakChildNode(
      override val objectId: Long,
      override val parent: ReferencePathNode,
      override val refFromParentType: LeakTraceReference.ReferenceType,
      override val refFromParentName: String,
      override val matcher: LibraryLeakReferenceMatcher,
      override val owningClassId: Long = 0
    ) : ChildNode(), LibraryLeakNode

    class NormalNode(
      override val objectId: Long,
      override val parent: ReferencePathNode,
      override val refFromParentType: LeakTraceReference.ReferenceType,
      override val refFromParentName: String,
      override val owningClassId: Long = 0
    ) : ChildNode()
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy