dev.morphia.mapping.conventions.KotlinDelegatedPropertiesDiscovery.kt Maven / Gradle / Ivy
package dev.morphia.mapping.conventions
import dev.morphia.mapping.Mapper
import dev.morphia.mapping.codec.pojo.EntityModelBuilder
import kotlin.reflect.KMutableProperty
import kotlin.reflect.KProperty
class KotlinDelegatedPropertiesDiscovery : MorphiaConvention {
@Suppress("UNCHECKED_CAST")
override fun apply(mapper: Mapper, builder: EntityModelBuilder) {
val field =
builder.type().declaredFields.firstOrNull { it.name == "\$\$delegatedProperties" }
if (field != null) {
field.trySetAccessible()
for (kProperty in field.get(builder.type()) as Array>) {
builder
.propertyModelByName("${kProperty.name}\$delegate")
.name(kProperty.name)
.discoverMappedName()
.accessor(ReadWritePropertyAccessor(kProperty as KMutableProperty<*>))
}
}
}
}