From 3aee544f021f8d56bf0e7c3a1d991128d1f124ec Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 26 Mar 2018 20:21:12 +0200 Subject: [PATCH] Throw more descriptive exception when service isn't found --- .../src/org/jetbrains/kotlin/container/Container.kt | 4 +++- compiler/container/src/org/jetbrains/kotlin/container/Dsl.kt | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/container/src/org/jetbrains/kotlin/container/Container.kt b/compiler/container/src/org/jetbrains/kotlin/container/Container.kt index f71176e272b..a3b50827a17 100644 --- a/compiler/container/src/org/jetbrains/kotlin/container/Container.kt +++ b/compiler/container/src/org/jetbrains/kotlin/container/Container.kt @@ -38,7 +38,7 @@ object DynamicComponentDescriptor : ValueDescriptor { override fun toString(): String = "Dynamic" } -class StorageComponentContainer(id: String, parent: StorageComponentContainer? = null) : ComponentContainer, ComponentProvider, Closeable { +class StorageComponentContainer(private val id: String, parent: StorageComponentContainer? = null) : ComponentContainer, ComponentProvider, Closeable { val unknownContext: ComponentResolveContext by lazy { val parentContext = parent?.let { ComponentResolveContext(it, DynamicComponentDescriptor) } ComponentResolveContext(this, DynamicComponentDescriptor, parentContext) @@ -104,6 +104,8 @@ class StorageComponentContainer(id: String, parent: StorageComponentContainer? = val args = constructorBinding.argumentDescriptors.map { it.getValue() }.toTypedArray() return constructorBinding.constructor.newInstance(*args) as T } + + override fun toString() = "Container $id" } fun StorageComponentContainer.registerSingleton(klass: Class<*>): StorageComponentContainer { diff --git a/compiler/container/src/org/jetbrains/kotlin/container/Dsl.kt b/compiler/container/src/org/jetbrains/kotlin/container/Dsl.kt index fbafb01efac..c4c8db2407f 100644 --- a/compiler/container/src/org/jetbrains/kotlin/container/Dsl.kt +++ b/compiler/container/src/org/jetbrains/kotlin/container/Dsl.kt @@ -39,7 +39,7 @@ fun ComponentProvider.tryGetService(request: Class): T? { } fun ComponentProvider.getService(request: Class): T { - return tryGetService(request) ?: throw IllegalArgumentException("Unresolved service: $request") + return tryGetService(request) ?: throw UnresolvedServiceException(this, request) } fun StorageComponentContainer.useInstance(instance: Any) { @@ -49,3 +49,6 @@ fun StorageComponentContainer.useInstance(instance: Any) { inline operator fun ComponentProvider.getValue(thisRef: Any?, desc: KProperty<*>): T { return getService(T::class.java) } + +class UnresolvedServiceException(container: ComponentProvider, request: Class<*>) : + IllegalArgumentException("Unresolved service: $request in $container") \ No newline at end of file