@@ -6,20 +6,44 @@ import org.jetbrains.kotlinx.jupyter.api.graphs.labels.TextLabel
6
6
import java.net.URLClassLoader
7
7
import kotlin.reflect.KClass
8
8
9
- class ClassLoaderNode (node : ClassLoader ) : NodeWrapper<ClassLoader>(node) {
9
+ class ClassLoaderRenderingConfiguration (
10
+ val withUrlDependencies : Boolean = true ,
11
+ val renderer : ClassLoaderNodeRenderer = DefaultClassLoaderNodeRenderer ,
12
+ ) {
13
+ companion object {
14
+ val DEFAULT = ClassLoaderRenderingConfiguration ()
15
+ }
16
+ }
17
+
18
+ typealias ClassLoaderNodeRenderer = ClassLoaderRenderingConfiguration .(ClassLoader ) -> String
19
+
20
+ val DefaultClassLoaderNodeRenderer : ClassLoaderNodeRenderer = { node ->
21
+ when {
22
+ node is URLClassLoader && withUrlDependencies -> node.urLs.joinToString(" \\ n" , " URL ClassLoader:\\ n" ) {
23
+ it.toString()
24
+ }
25
+ else -> node.toString()
26
+ }
27
+ }
28
+
29
+ class ClassLoaderNode (
30
+ node : ClassLoader ,
31
+ conf : ClassLoaderRenderingConfiguration
32
+ ) : NodeWrapper<ClassLoader>(node) {
10
33
override val inNodes by lazy {
11
- node.parent?.let { listOf (ClassLoaderNode (it)) } ? : emptyList()
34
+ node.parent?.let { listOf (ClassLoaderNode (it, conf )) } ? : emptyList()
12
35
}
13
36
override val label = TextLabel (
14
- when (node) {
15
- is URLClassLoader -> node.urLs.joinToString(" \\ n" , " URL ClassLoader:\\ n" ) {
16
- it.toString()
17
- }
18
- else -> node.toString()
19
- }
37
+ conf.renderer(conf, node)
20
38
)
21
39
}
22
40
23
- fun GraphNode.Companion.fromClassLoader (classLoader : ClassLoader ) = ClassLoaderNode (classLoader)
24
- fun GraphNode.Companion.fromClassLoader (kClass : KClass <* >) = fromClassLoader(kClass.java.classLoader)
41
+ fun GraphNode.Companion.fromClassLoader (
42
+ classLoader : ClassLoader ,
43
+ conf : ClassLoaderRenderingConfiguration = ClassLoaderRenderingConfiguration .DEFAULT ,
44
+ ) = ClassLoaderNode (classLoader, conf)
45
+ fun GraphNode.Companion.fromClassLoader (
46
+ kClass : KClass <* >,
47
+ conf : ClassLoaderRenderingConfiguration = ClassLoaderRenderingConfiguration .DEFAULT ,
48
+ ) = fromClassLoader(kClass.java.classLoader, conf)
25
49
inline fun <reified T > GraphNode.Companion.fromClassLoader () = fromClassLoader(T ::class )
0 commit comments