/
ReferencePathNode.kt
53 lines (40 loc) · 1.29 KB
/
ReferencePathNode.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package shark.internal
import shark.GcRoot
import shark.LeakReference
import shark.LibraryLeakReferenceMatcher
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 referenceFromParent: LeakReference
class LibraryLeakChildNode(
override val objectId: Long,
override val parent: ReferencePathNode,
override val referenceFromParent: LeakReference,
override val matcher: LibraryLeakReferenceMatcher
) : ChildNode(), LibraryLeakNode
class NormalNode(
override val objectId: Long,
override val parent: ReferencePathNode,
override val referenceFromParent: LeakReference
) : ChildNode()
}
}