[FIR] Introduce different implementations of ArrayMapOwner

- ComponentArrayOwner for services
- AttributeArrayOwner for attributes like userdata or type attributes
This commit is contained in:
Dmitriy Novozhilov
2020-05-07 13:39:05 +03:00
parent edd7d5b0b0
commit b348ae689a
8 changed files with 202 additions and 78 deletions
@@ -38,7 +38,7 @@ class FirRegisteredExtension<P : FirExtension>(
class FirExtensionsService(
val session: FirSession
) : ComponentArrayOwner<FirExtension, FirRegisteredExtension<*>>(), FirSessionComponent {
companion object : ComponentTypeRegistry<FirExtension, FirRegisteredExtension<*>>() {
companion object : TypeRegistry<FirExtension, FirRegisteredExtension<*>>() {
inline fun <reified P : FirExtension, V : FirRegisteredExtension<P>> registeredExtensions(): ReadOnlyProperty<FirExtensionsService, ExtensionsAccessor<P>> {
val accessor = generateAccessor<V, P>(P::class)
return object : ReadOnlyProperty<FirExtensionsService, ExtensionsAccessor<P>> {
@@ -51,7 +51,7 @@ class FirExtensionsService(
private fun <K, V> createMultimap(): Multimap<K, V> = LinkedHashMultimap.create()
}
override val typeRegistry: ComponentTypeRegistry<FirExtension, FirRegisteredExtension<*>>
override val typeRegistry: TypeRegistry<FirExtension, FirRegisteredExtension<*>>
get() = Companion
fun <P : FirExtension> registerExtensions(extensionClass: KClass<P>, extensionFactories: List<FirExtension.Factory<P>>) {