| annotation class ValueContainer |
| |
| abstract class AbstractStringProperty(protected var v: String) { |
| fun get(): String { |
| return v |
| } |
| } |
| |
| @ValueContainer |
| class StringProperty(v: String) : AbstractStringProperty(v) { |
| fun assign(v: String) { |
| this.v = v |
| } |
| |
| fun assign(v: StringProperty) { |
| this.v = v.get() |
| } |
| } |
| |
| @ValueContainer |
| class StringPropertyWithPlus(v: String) : AbstractStringProperty(v) { |
| fun assign(v: String) { |
| this.v = v |
| } |
| |
| fun assign(o: StringPropertyWithPlus) { |
| this.v = o.get() |
| } |
| |
| operator fun plus(v: String) = |
| StringPropertyWithPlus(this.v + v) |
| } |
| |
| @ValueContainer |
| class StringPropertyWithPlusAssign(v: String) : AbstractStringProperty(v) { |
| fun assign(v: String) { |
| this.v = v |
| } |
| |
| fun assign(o: StringPropertyWithPlusAssign) { |
| this.v = o.get() |
| } |
| |
| operator fun plusAssign(v: String) { |
| this.v += v |
| } |
| } |
| |
| @ValueContainer |
| class StringPropertyWithPlusAndPlusAssign(v: String) : AbstractStringProperty(v) { |
| fun assign(v: String) { |
| this.v = v |
| } |
| |
| fun assign(o: StringPropertyWithPlusAndPlusAssign) { |
| this.v = o.get() |
| } |
| |
| operator fun plus(v: String) = |
| StringPropertyWithPlusAndPlusAssign(this.v + v) |
| |
| operator fun plusAssign(v: String) { |
| this.v += v |
| } |
| } |
| |
| data class Task( |
| val valInput: StringProperty, |
| var varInput: StringProperty, |
| |
| val valInputWithPlus: StringPropertyWithPlus, |
| var varInputWithPlus: StringPropertyWithPlus, |
| |
| val valInputWithPlusAssign: StringPropertyWithPlusAssign, |
| var varInputWithPlusAssign: StringPropertyWithPlusAssign, |
| |
| val valInputWithPlusAndPlusAssign: StringPropertyWithPlusAndPlusAssign, |
| var varInputWithPlusAndPlusAssign: StringPropertyWithPlusAndPlusAssign, |
| ) |
| |
| fun box(): String { |
| val task = Task( |
| StringProperty("O"), |
| StringProperty("O"), |
| |
| StringPropertyWithPlus("O"), |
| StringPropertyWithPlus("O"), |
| |
| StringPropertyWithPlusAssign("O"), |
| StringPropertyWithPlusAssign("O"), |
| |
| StringPropertyWithPlusAndPlusAssign("O"), |
| StringPropertyWithPlusAndPlusAssign("O") |
| ) |
| |
| task.varInputWithPlus += "K" |
| if (task.varInputWithPlus.get() != "OK") return task.varInputWithPlus.get() |
| |
| task.valInputWithPlusAssign += "K" |
| if (task.valInputWithPlusAssign.get() != "OK") return task.valInputWithPlusAssign.get() |
| task.varInputWithPlusAssign += "K" |
| if (task.varInputWithPlusAssign.get() != "OK") return task.varInputWithPlusAssign.get() |
| |
| task.valInputWithPlusAndPlusAssign += "K" |
| if (task.valInputWithPlusAndPlusAssign.get() != "OK") return task.valInputWithPlusAndPlusAssign.get() |
| |
| return "OK" |
| } |