7a6f80606b
According to KT-21354, this should be a warning in 1.2 and before, and no warning (with changed semantics) in 1.3 and later. NB there are some false positives in this check. #KT-21354 In Progress #KT-21321 In Progress
103 lines
2.0 KiB
Kotlin
Vendored
103 lines
2.0 KiB
Kotlin
Vendored
// !LANGUAGE: -ProperForInArrayLoopRangeVariableAssignmentSemantic
|
|
// !DIAGNOSTICS: -UNUSED_VALUE
|
|
// SKIP_TXT
|
|
|
|
fun testArrayCapturedInLocalFun() {
|
|
var xs = arrayOf("a", "b", "c")
|
|
|
|
fun updateXs() {
|
|
xs = arrayOf("d", "e", "f")
|
|
}
|
|
|
|
for (x in xs) {
|
|
println(x)
|
|
updateXs()
|
|
}
|
|
}
|
|
|
|
fun testArrayCapturedInLabmda() {
|
|
var xs = arrayOf("a", "b", "c")
|
|
|
|
val updateXs = { xs = arrayOf("d", "e", "f") }
|
|
|
|
for (x in xs) {
|
|
println(x)
|
|
updateXs()
|
|
}
|
|
}
|
|
|
|
fun testArrayCapturedInInlineLambda() {
|
|
var xs = arrayOf("a", "b", "c")
|
|
|
|
for (x in xs) {
|
|
println(x)
|
|
run {
|
|
xs = arrayOf("d", "e", "f")
|
|
}
|
|
}
|
|
}
|
|
|
|
fun testArrayCapturedInLocalObject() {
|
|
var xs = arrayOf("a", "b", "c")
|
|
|
|
val updateXs = object : () -> Unit {
|
|
override fun invoke() {
|
|
xs = arrayOf("d", "e", "f")
|
|
}
|
|
}
|
|
|
|
for (x in xs) {
|
|
println(x)
|
|
updateXs()
|
|
}
|
|
}
|
|
|
|
fun testArrayCapturedInLocalClass() {
|
|
var xs = arrayOf("a", "b", "c")
|
|
|
|
class LocalClass {
|
|
fun updateXs() {
|
|
xs = arrayOf("d", "e", "f")
|
|
}
|
|
}
|
|
|
|
val updater = LocalClass()
|
|
|
|
for (x in xs) {
|
|
println(x)
|
|
updater.updateXs()
|
|
}
|
|
}
|
|
|
|
fun testCapturedInLambdaAfterLoop() {
|
|
// NB false positive
|
|
var xs = intArrayOf(1, 2, 3)
|
|
for (x in xs) {
|
|
println(x)
|
|
<!ASSIGNMENT_TO_ARRAY_LOOP_VARIABLE!>xs<!> = intArrayOf(4, 5, 6)
|
|
}
|
|
val lambda = { xs = intArrayOf() }
|
|
lambda()
|
|
}
|
|
|
|
fun testCapturedInLambdaInLoopAfterAssignment() {
|
|
// NB false positive
|
|
var xs = intArrayOf(1, 2, 3)
|
|
for (x in xs) {
|
|
println(x)
|
|
<!ASSIGNMENT_TO_ARRAY_LOOP_VARIABLE!>xs<!> = intArrayOf(4, 5, 6)
|
|
val lambda = { xs = intArrayOf() }
|
|
lambda()
|
|
}
|
|
}
|
|
|
|
fun testCapturedInNonChangingClosure() {
|
|
// NB false positive
|
|
var xs = intArrayOf(1, 2, 3)
|
|
val lambda = { println(xs) }
|
|
for (x in xs) {
|
|
println(x)
|
|
<!ASSIGNMENT_TO_ARRAY_LOOP_VARIABLE!>xs<!> = intArrayOf(4, 5, 6)
|
|
lambda()
|
|
}
|
|
} |