class SettingType { constructor(type: KClass) /* primary */ { super/*Any*/() /* () */ } val type: KClass field = type get } class SettingReference> { constructor(t: T, v: V) /* primary */ { super/*Any*/() /* () */ } var t: T field = t get set var v: V field = v get set } class IdeWizard { constructor() /* primary */ { super/*Any*/() /* () */ } var projectTemplate: Int? /* by */ field = .setting>(reference = SettingReference>(t = SettingType(type = 42::class), v = 42)) get(): Int? { return .#projectTemplate$delegate.getValue(thisRef = , property = IdeWizard::projectTemplate) } set(: Int?) { return .#projectTemplate$delegate.setValue(thisRef = , property = IdeWizard::projectTemplate, value = ) } private fun > setting(reference: SettingReference): { return { // BLOCK local class : ReadWriteProperty { constructor() /* primary */ { super/*Any*/() /* () */ } override operator fun setValue(thisRef: Any?, property: KProperty<*>, value: V?) { when { EQEQ(arg0 = value, arg1 = null) -> return Unit } reference.( = SettingType(type = value::class) as T) reference.( = value) } override operator fun getValue(thisRef: Any?, property: KProperty<*>): V? { return reference.() } } () } } }