Skip to content

Commit

Permalink
make Qualifier inline value class, remove the runtime overhead of Qua…
Browse files Browse the repository at this point in the history
…lifier
  • Loading branch information
luozejiaqun committed Dec 31, 2024
1 parent c815cc6 commit 3401c88
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@
*/
package org.koin.core.qualifier

import kotlin.jvm.JvmInline

/**
* Help qualify a component
*/
interface Qualifier {
@JvmInline
value class Qualifier(
val value: QualifierValue
}
)

typealias QualifierValue = String

Expand All @@ -34,6 +37,7 @@ fun <E : Enum<E>> named(enum: Enum<E>) = enum.qualifier
fun qualifier(name: String) = StringQualifier(name)
fun <E : Enum<E>> qualifier(enum: Enum<E>) = enum.qualifier

@Suppress("FunctionName")
fun _q(name: String) = StringQualifier(name)

/**
Expand All @@ -49,6 +53,7 @@ inline fun <reified T> qualifier() = TypeQualifier(T::class)
/**
* Give a Type based qualifier
*/
@Suppress("FunctionName")
inline fun <reified T> _q() = TypeQualifier(T::class)

val <E : Enum<E>> Enum<E>.qualifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,5 @@
*/
package org.koin.core.qualifier

data class StringQualifier(override val value: QualifierValue) : Qualifier {
override fun toString(): String {
return value
}
}
@Suppress("FunctionName")
fun StringQualifier(value: QualifierValue) : Qualifier = Qualifier(value)
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,5 @@ package org.koin.core.qualifier
import org.koin.ext.getFullName
import kotlin.reflect.KClass

class TypeQualifier(val type: KClass<*>) : Qualifier {
override val value: QualifierValue = type.getFullName()

override fun toString(): String {
return value
}

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || this::class != other::class) return false

other as TypeQualifier

if (value != other.value) return false

return true
}

override fun hashCode(): Int {
return value.hashCode()
}
}
@Suppress("FunctionName")
fun TypeQualifier(type: KClass<*>) : Qualifier = Qualifier(type.getFullName())

0 comments on commit 3401c88

Please sign in to comment.