// WITH_RUNTIME // WITH_REFLECT import kotlin.properties.ReadWriteProperty import kotlin.reflect.KClass import kotlin.reflect.KProperty class SettingType( val type : KClass ) class SettingReference>( var t : T var v : V ) class IdeWizard { var projectTemplate by setting(SettingReference(SettingType(42::class), 42)) private fun > setting(reference: SettingReference) = object : ReadWriteProperty { override fun setValue(thisRef: Any?, property: KProperty<*>, value: V?) { if (value == null) return reference.t = SettingType(value::class) as T reference.v = value } override fun getValue(thisRef: Any?, property: KProperty<*>): V? { return reference.v } } }