| annotation class ValueContainer |
| |
| @ValueContainer |
| data class StringProperty(var v: String) { |
| fun assign(v: String) { |
| this.v = v |
| } |
| fun assign(v: StringProperty) { |
| this.v = v.get() |
| } |
| fun get() = v |
| } |
| |
| data class Task(var input: StringProperty) |
| |
| fun `test local var reference and value`(): String { |
| var property = StringProperty("OK") |
| var originalProperty = property |
| property = StringProperty("Fail") |
| |
| return when { |
| originalProperty.get() != "OK" -> "Fail: ${originalProperty.get()}" |
| originalProperty == property -> "Fail: originalProperty == property" |
| else -> "OK" |
| } |
| } |
| |
| fun `test class property var reference and value`(): String { |
| val task = Task(StringProperty("OK")) |
| val originalProperty = task.input |
| task.input = StringProperty("Fail") |
| |
| return when { |
| originalProperty.get() != "OK" -> "Fail: ${originalProperty.get()}" |
| originalProperty == task.input -> "Fail: originalProperty == task.input" |
| else -> "OK" |
| } |
| } |
| |
| fun `test class property var reference and value with apply`(): String { |
| val task = Task(StringProperty("OK")) |
| val originalProperty = task.input |
| task.apply { |
| input = StringProperty("Fail") |
| } |
| |
| return when { |
| originalProperty.get() != "OK" -> "Fail: ${originalProperty.get()}" |
| originalProperty == task.input -> "Fail: originalProperty == task.input" |
| else -> "OK" |
| } |
| } |
| |
| fun box(): String { |
| var result = `test local var reference and value`() |
| if (result != "OK") return result |
| |
| result = `test class property var reference and value`() |
| if (result != "OK") return result |
| |
| result = `test class property var reference and value with apply`() |
| if (result != "OK") return result |
| |
| return "OK" |
| } |