Skip to content

Commit d331ae2

Browse files
committed
Add configuration for classloader rendering
1 parent fc67fc9 commit d331ae2

File tree

1 file changed

+34
-10
lines changed
  • jupyter-lib/lib-ext/src/main/kotlin/org/jetbrains/kotlinx/jupyter/ext/graph/wrappers

1 file changed

+34
-10
lines changed

jupyter-lib/lib-ext/src/main/kotlin/org/jetbrains/kotlinx/jupyter/ext/graph/wrappers/ClassLoaderNode.kt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,44 @@ import org.jetbrains.kotlinx.jupyter.api.graphs.labels.TextLabel
66
import java.net.URLClassLoader
77
import kotlin.reflect.KClass
88

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) {
1033
override val inNodes by lazy {
11-
node.parent?.let { listOf(ClassLoaderNode(it)) } ?: emptyList()
34+
node.parent?.let { listOf(ClassLoaderNode(it, conf)) } ?: emptyList()
1235
}
1336
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)
2038
)
2139
}
2240

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)
2549
inline fun <reified T> GraphNode.Companion.fromClassLoader() = fromClassLoader(T::class)

0 commit comments

Comments
 (0)