annotation class ValueContainer @ValueContainer data class StringProperty(var v: String) { fun assign(v: String): String { this.v = v return "" } fun assign(v: StringProperty): String { this.v = v.get() return "" } fun get(): String = v } fun StringProperty.assign(v: Int): String { this.v = "OK" return "" } data class Task(val input: StringProperty) fun `should report an error for assign method return type on assignment for annotated class`() { val task = Task(StringProperty("Fail")) task.input = "42" task.input = 42 } fun `should not report an error for assign return type for unannotated class`() { data class IntProperty(var v: Int) fun IntProperty.assign(v: Int): String = "OK" data class IntTask(val input: IntProperty) val task = IntTask(IntProperty(42)) task.input = 42 }