Skip to content

Commit 8c3f941

Browse files
committed
Use map for instanced adapters
1 parent eb98479 commit 8c3f941

File tree

6 files changed

+19
-17
lines changed

6 files changed

+19
-17
lines changed

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/Configuration.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public interface Configuration {
239239
protected var initialDataCallback: InitialDataCallback? = null
240240
protected var inMemory: Boolean = false
241241
protected var initialRealmFileConfiguration: InitialRealmFileConfiguration? = null
242-
protected var typeAdapters: List<RealmTypeAdapter<*, *>> = listOf()
242+
protected var typeAdapters: Map<KClass<*>, RealmTypeAdapter<*, *>> = mapOf()
243243

244244
/**
245245
* Sets the filename of the realm file.

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/RealmConfiguration.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ public interface RealmConfiguration : Configuration {
9292

9393
// TODO misplaced, move around
9494
public class TypeAdapterBuilder {
95-
internal val adapters: MutableList<RealmTypeAdapter<*, *>> = mutableListOf()
95+
internal val adapters: MutableMap<KClass<*>, RealmTypeAdapter<*, *>> = mutableMapOf()
9696
public fun add(adapter: RealmTypeAdapter<*,*>) {
97-
adapters.add(adapter)
97+
adapters[adapter::class] = adapter
9898
}
9999
}
100100

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/ConfigurationImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public open class ConfigurationImpl(
6969
inMemory: Boolean,
7070
initialRealmFileConfiguration: InitialRealmFileConfiguration?,
7171
logger: ContextLogger,
72-
override val adapters: List<RealmTypeAdapter<*, *>>,
72+
override val adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>,
7373
) : InternalConfiguration {
7474

7575
override val path: String

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/Converters.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -262,26 +262,30 @@ public inline fun longToInt(value: Long?): Int? = value?.toInt()
262262

263263
public inline fun toRealm(
264264
obj: RealmObjectReference<out BaseRealmObject>,
265-
converterClass: KClass<RealmTypeAdapter<Any, Any>>,
266-
userValue: Any,
267-
): Any {
265+
adapterClass: KClass<*>,
266+
userValue: Any?,
267+
): Any? {
268268
val adapter = obj.owner.owner
269269
.configuration
270-
.adapters
271-
.first { it::class == converterClass } as RealmTypeAdapter<Any, Any>
270+
.adapters.let { adapters ->
271+
require(adapters.contains(adapterClass)) {"User provided adaptes don't contains adapter ${adapterClass.simpleName}"}
272+
adapters[adapterClass] as RealmTypeAdapter<Any?, Any?>
273+
}
272274

273275
return adapter.toRealm(userValue)
274276
}
275277

276278
public inline fun fromRealm(
277279
obj: RealmObjectReference<out BaseRealmObject>,
278-
converterClass: KClass<RealmTypeAdapter<*, *>>,
280+
adapterClass: KClass<*>,
279281
realmValue: Any,
280-
): Any {
282+
): Any? {
281283
val adapter = obj.owner.owner
282284
.configuration
283-
.adapters
284-
.first { it::class == converterClass } as RealmTypeAdapter<Any, Any>
285+
.adapters.let { adapters ->
286+
require(adapters.contains(adapterClass)) {"User provided adaptes don't contains adapter ${adapterClass.simpleName}"}
287+
adapters[adapterClass] as RealmTypeAdapter<Any?, Any?>
288+
}
285289

286290
return adapter.fromRealm(realmValue)
287291
}

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/InternalConfiguration.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ public interface InternalConfiguration : Configuration {
3737
public val writeDispatcherFactory: CoroutineDispatcherFactory
3838
public val schemaMode: SchemaMode
3939
public val logger: ContextLogger
40-
// TODO make it a map
41-
// public val adapters: Map<KClass<RealmTypeAdapter<*, *>>, RealmTypeAdapter<*, *>>
42-
public val adapters: List<RealmTypeAdapter<*, *>>
40+
public val adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>
4341

4442
// Temporary work-around for https://github.com/realm/realm-kotlin/issues/724
4543
public val isFlexibleSyncConfiguration: Boolean

packages/library-base/src/commonMain/kotlin/io/realm/kotlin/internal/RealmConfigurationImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal class RealmConfigurationImpl(
4949
inMemory: Boolean,
5050
override val initialRealmFileConfiguration: InitialRealmFileConfiguration?,
5151
logger: ContextLogger,
52-
adapters: List<RealmTypeAdapter<*, *>>
52+
adapters: Map<KClass<*>, RealmTypeAdapter<*, *>>
5353
) : ConfigurationImpl(
5454
directory,
5555
name,

0 commit comments

Comments
 (0)