// !DIAGNOSTICS: -UNUSED_PARAMETER import kotlin.reflect.KProperty class CustomDelegate { operator fun get(thisRef: Any?, prop: KProperty<*>): String = prop.name operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {} } class OkDelegate { operator fun getValue(thisRef: Any?, prop: KProperty<*>): String = prop.name operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: String) {} } class CustomDelegate2 { operator fun get(thisRef: Any?, prop: KProperty<*>): String = prop.name operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {} operator fun getValue(thisRef: Any?, prop: KProperty<*>): Int = 5 operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: Int) {} } class CustomDelegate3 { operator fun get(thisRef: Any?, prop: KProperty<*>): String = prop.name operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {} } operator fun OkDelegate.get(thisRef: Any?, prop: KProperty<*>): Int = 4 operator fun OkDelegate.set(thisRef: Any?, prop: KProperty<*>, value: Int) {} operator fun CustomDelegate3.getValue(thisRef: Any?, prop: KProperty<*>): Int = 4 operator fun CustomDelegate3.setValue(thisRef: Any?, prop: KProperty<*>, value: Int) {} class Example { var a by CustomDelegate() val aval by CustomDelegate() var b by OkDelegate() var c by CustomDelegate2() var d by CustomDelegate3() fun test() { requireString(a) requireString(aval) requireString(b) requireInt(c) requireInt(d) } fun requireString(s: String) {} fun requireInt(n: Int) {} }