From 1c7b56159acb30880a711e3c2bd56793d158f1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 13 Mar 2020 12:38:15 +0100 Subject: [PATCH] Revoke ability to multiple loading the same module --- .../main/kotlin/io/smnp/ext/ModuleRegistry.kt | 2 +- .../io/smnp/environment/DefaultEnvironment.kt | 25 ++++++++++--------- .../io/smnp/ext/DefaultModuleRegistry.kt | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/api/src/main/kotlin/io/smnp/ext/ModuleRegistry.kt b/api/src/main/kotlin/io/smnp/ext/ModuleRegistry.kt index 4d44473..5113ec2 100644 --- a/api/src/main/kotlin/io/smnp/ext/ModuleRegistry.kt +++ b/api/src/main/kotlin/io/smnp/ext/ModuleRegistry.kt @@ -1,6 +1,6 @@ package io.smnp.ext interface ModuleRegistry { - fun requestModulesForPath(path: String): ModuleProvider? + fun requestModuleProviderForPath(path: String): ModuleProvider? fun registeredModules(): List } \ No newline at end of file diff --git a/app/src/main/kotlin/io/smnp/environment/DefaultEnvironment.kt b/app/src/main/kotlin/io/smnp/environment/DefaultEnvironment.kt index e4f2d86..8ebeb2a 100644 --- a/app/src/main/kotlin/io/smnp/environment/DefaultEnvironment.kt +++ b/app/src/main/kotlin/io/smnp/environment/DefaultEnvironment.kt @@ -3,7 +3,7 @@ package io.smnp.environment import io.smnp.callable.function.Function import io.smnp.callable.method.Method import io.smnp.callable.signature.ActualSignatureFormatter.format -import io.smnp.ext.DefaultModuleRegistry.requestModulesForPath +import io.smnp.ext.DefaultModuleRegistry.requestModuleProviderForPath import io.smnp.ext.ModuleProvider import io.smnp.interpreter.LanguageModuleInterpreter import io.smnp.runtime.model.CallStack @@ -19,23 +19,24 @@ class DefaultEnvironment(private val rootModule: Module = Module.create("" } override fun loadModule(path: String) { - requestModulesForPath(path).let { - loadModule(it) - loadDependencies(it) + requestModuleProviderForPath(path).let { + loadModule(it) + loadDependencies(it) } } - private fun loadModule(moduleProvider: ModuleProvider) { - rootModule.addSubmodule(moduleProvider.provideModule(LanguageModuleInterpreter())) - loadedModules.add(moduleProvider.path) + private fun loadModule(moduleProvider: ModuleProvider, consumer: (ModuleProvider) -> Unit = {}) { + if (!loadedModules.contains(moduleProvider.path)) { + rootModule.addSubmodule(moduleProvider.provideModule(LanguageModuleInterpreter())) + loadedModules.add(moduleProvider.path) + consumer(moduleProvider) + } } private fun loadDependencies(moduleProvider: ModuleProvider) { - moduleProvider.dependencies().forEach { dependencyPath -> - if (!loadedModules.contains(dependencyPath)) { - val dependency = requestModulesForPath(dependencyPath) - loadModule(dependency) - loadDependencies(dependency) + moduleProvider.dependencies().forEach { dependency -> + loadModule(requestModuleProviderForPath(dependency)) { + loadDependencies(it) } } } diff --git a/app/src/main/kotlin/io/smnp/ext/DefaultModuleRegistry.kt b/app/src/main/kotlin/io/smnp/ext/DefaultModuleRegistry.kt index d17f031..945d1a4 100644 --- a/app/src/main/kotlin/io/smnp/ext/DefaultModuleRegistry.kt +++ b/app/src/main/kotlin/io/smnp/ext/DefaultModuleRegistry.kt @@ -14,7 +14,7 @@ object DefaultModuleRegistry : ModuleRegistry { } } - override fun requestModulesForPath(path: String): ModuleProvider { + override fun requestModuleProviderForPath(path: String): ModuleProvider { return modules[path] ?: throw RuntimeException("Module $path not found") }