[Assign plugin] Add a compiler plugin for overloading assign ('=') operator
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
6052962f50
commit
09d6dfc8bf
@@ -0,0 +1,105 @@
|
||||
annotation class ValueContainer
|
||||
|
||||
@ValueContainer
|
||||
class StringProperty(var v: String) {
|
||||
fun assign(v: String) {
|
||||
this.v = v
|
||||
}
|
||||
fun assign(v: StringProperty) {
|
||||
this.v = v.get()
|
||||
}
|
||||
fun get(): String {
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
data class Task(val input: StringProperty)
|
||||
|
||||
var result = "Fail"
|
||||
operator fun StringProperty.plusAssign(v: String) {
|
||||
result = v
|
||||
}
|
||||
operator fun StringProperty.plusAssign(v: StringProperty) {
|
||||
result = v.get()
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, v: String) {
|
||||
result = v
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, v: StringProperty) {
|
||||
result = v.get()
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, j: Int, v: String) {
|
||||
result = v
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, j: Int, v: StringProperty) {
|
||||
result = v.get()
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, j: Int, k: Int, v: String) {
|
||||
result = v
|
||||
}
|
||||
operator fun StringProperty.set(i: Int, j: Int, k: Int, v: StringProperty) {
|
||||
result = v.get()
|
||||
}
|
||||
operator fun StringProperty.compareTo(v: String): Int {
|
||||
result = v
|
||||
return 0
|
||||
}
|
||||
operator fun StringProperty.compareTo(v: StringProperty): Int {
|
||||
result = v.get()
|
||||
return 0
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val task = Task(StringProperty("Fail"))
|
||||
|
||||
// Double check that assign is correctly setup
|
||||
task.input = "OK"
|
||||
if (task.input.get() != "OK") return task.input.get()
|
||||
|
||||
task?.input = "OK"
|
||||
if (task.input.get() != "OK") return task.input.get()
|
||||
|
||||
result = "Fail"
|
||||
task.input += "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input += StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
result = "Fail"
|
||||
task.input >= "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input >= StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
result = "Fail"
|
||||
task.input <= "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input <= StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
result = "Fail"
|
||||
task.input[0] = "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input[0] = StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
result = "Fail"
|
||||
task.input[0, 0] = "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input[0, 0] = StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
result = "Fail"
|
||||
task.input[0, 0, 0] = "OK"
|
||||
if (result != "OK") return result
|
||||
result = "Fail"
|
||||
task.input[0, 0, 0] = StringProperty("OK")
|
||||
if (result != "OK") return result
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user