@@ -16,6 +16,8 @@ import org.jetbrains.kotlinx.jupyter.api.libraries.LibraryDefinition
16
16
import org.jetbrains.kotlinx.jupyter.config.errorForUser
17
17
import org.jetbrains.kotlinx.jupyter.config.getLogger
18
18
import org.jetbrains.kotlinx.jupyter.exceptions.ReplException
19
+ import org.jetbrains.kotlinx.jupyter.util.AcceptanceRule
20
+ import org.jetbrains.kotlinx.jupyter.util.accepts
19
21
20
22
class LibrariesScanner (val notebook : Notebook ) {
21
23
private val processedFQNs = mutableSetOf<TypeName >()
@@ -37,15 +39,15 @@ class LibrariesScanner(val notebook: Notebook) {
37
39
}
38
40
}
39
41
40
- fun addLibrariesFromClassLoader (classLoader : ClassLoader , host : KotlinKernelHost ) {
41
- val scanResult = scanForLibraries(classLoader, host)
42
+ fun addLibrariesFromClassLoader (classLoader : ClassLoader , host : KotlinKernelHost , integrationTypeNameRules : List < AcceptanceRule < TypeName >> = listOf() ) {
43
+ val scanResult = scanForLibraries(classLoader, host, integrationTypeNameRules )
42
44
log.debug(" Scanning for libraries is done. Detected FQNs: ${Json .encodeToString(scanResult)} " )
43
45
val libraries = instantiateLibraries(classLoader, scanResult, notebook)
44
46
log.debug(" Number of detected definitions: ${libraries.size} " )
45
47
host.addLibraries(libraries)
46
48
}
47
49
48
- private fun scanForLibraries (classLoader : ClassLoader , host : KotlinKernelHost ): LibrariesScanResult {
50
+ private fun scanForLibraries (classLoader : ClassLoader , host : KotlinKernelHost , integrationTypeNameRules : List < AcceptanceRule < TypeName >> = listOf() ): LibrariesScanResult {
49
51
val results = classLoader.getResources(" $KOTLIN_JUPYTER_RESOURCES_PATH /$KOTLIN_JUPYTER_LIBRARIES_FILE_NAME " ).toList().map { url ->
50
52
val contents = url.readText()
51
53
Json .decodeFromString<LibrariesScanResult >(contents)
@@ -55,8 +57,15 @@ class LibrariesScanner(val notebook: Notebook) {
55
57
val producers = mutableListOf<LibrariesProducerDeclaration >()
56
58
57
59
for (result in results) {
58
- definitions.addAll(result.definitions)
59
- producers.addAll(result.producers)
60
+ for (definition in result.definitions) {
61
+ if (integrationTypeNameRules.accepts(definition.fqn) != false )
62
+ definitions + = definition
63
+ }
64
+
65
+ for (producer in result.producers) {
66
+ if (integrationTypeNameRules.accepts(producer.fqn) != false )
67
+ producers + = producer
68
+ }
60
69
}
61
70
62
71
return LibrariesScanResult (
0 commit comments