Skip to content

Commit

Permalink
simplify MultibindingIterateKey, using multibindingQualifier to ident…
Browse files Browse the repository at this point in the history
…ify the corresponding elements
  • Loading branch information
luozejiaqun committed Dec 23, 2024
1 parent 777c217 commit ba35efc
Showing 1 changed file with 9 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ private fun <K> multibindingIterateKeyQualifier(
): Qualifier =
StringQualifier("${multibindingQualifier.value}_iterate_$key")

private class MultibindingIterateKey<T>(val key: T, val elementQualifier: Qualifier)
private class MultibindingIterateKey<T>(val elementKey: T, val multibindingQualifier: Qualifier)

class MapMultibindingElementDefinition<K : Any, E : Any> @PublishedApi internal constructor(
private val multibindingQualifier: Qualifier,
Expand All @@ -61,12 +61,12 @@ class MapMultibindingElementDefinition<K : Any, E : Any> @PublishedApi internal
private val isRootScope = scopeQualifier == rootScopeQualifier

fun intoMap(key: K, definition: Definition<E>) {
val elementQualifier = declareElement(key, definition)
declareIterateKey(key, elementQualifier)
declareElement(key, definition)
declareIterateKey(key)
}

@OptIn(KoinInternalApi::class)
private fun declareElement(key: K, definition: Definition<E>): Qualifier {
private fun declareElement(key: K, definition: Definition<E>) {
val elementQualifier = multibindingElementQualifier(multibindingQualifier, key)
val elementFactory = if (isRootScope) {
SingleInstanceFactory(
Expand All @@ -90,19 +90,18 @@ class MapMultibindingElementDefinition<K : Any, E : Any> @PublishedApi internal
)
}
declareModule.indexPrimaryType(elementFactory)
return elementQualifier
}

@OptIn(KoinInternalApi::class)
private fun declareIterateKey(key: K, elementQualifier: Qualifier) {
private fun declareIterateKey(key: K) {
val iterateKeyQualifier = multibindingIterateKeyQualifier(multibindingQualifier, key)
val iterateKeyFactory = if (isRootScope) {
SingleInstanceFactory(
BeanDefinition(
scopeQualifier,
MultibindingIterateKey::class,
iterateKeyQualifier,
{ MultibindingIterateKey(key, elementQualifier) },
{ MultibindingIterateKey(key, multibindingQualifier) },
Kind.Singleton,
)
)
Expand All @@ -112,7 +111,7 @@ class MapMultibindingElementDefinition<K : Any, E : Any> @PublishedApi internal
scopeQualifier,
MultibindingIterateKey::class,
iterateKeyQualifier,
{ MultibindingIterateKey(key, elementQualifier) },
{ MultibindingIterateKey(key, multibindingQualifier) },
Kind.Scoped,
)
)
Expand Down Expand Up @@ -141,8 +140,8 @@ internal class MapMultibinding<K : Any, V>(
val multibindingKeys = mutableSetOf<K>()
scope.getAll<MultibindingIterateKey<*>>()
.mapNotNullTo(multibindingKeys) { multibindingIterateKey ->
if (multibindingIterateKey.elementQualifier.value.startsWith(qualifier.value)) {
multibindingIterateKey.key as? K
if (multibindingIterateKey.multibindingQualifier == qualifier) {
multibindingIterateKey.elementKey as? K
} else {
null
}
Expand Down

0 comments on commit ba35efc

Please sign in to comment.