FIR: make transformInplace to be thread safe if no transformation was done
^KT-50822 fixed
This commit is contained in:
@@ -17,8 +17,10 @@ fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirTransfor
|
|||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
val next = iterator.next() as FirPureAbstractElement
|
val next = iterator.next() as FirPureAbstractElement
|
||||||
val result = next.transform<T, D>(transformer, data)
|
val result = next.transform<T, D>(transformer, data)
|
||||||
|
if (result !== next) {
|
||||||
iterator.set(result)
|
iterator.set(result)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class TransformData<out D> {
|
sealed class TransformData<out D> {
|
||||||
@@ -36,8 +38,10 @@ inline fun <T : FirElement, D> MutableList<T>.transformInplace(transformer: FirT
|
|||||||
TransformData.Nothing -> continue
|
TransformData.Nothing -> continue
|
||||||
}
|
}
|
||||||
val result = next.transform<T, D>(transformer, data)
|
val result = next.transform<T, D>(transformer, data)
|
||||||
|
if (result !== next) {
|
||||||
iterator.set(result)
|
iterator.set(result)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <R, D> List<FirElement>.acceptAllElements(visitor: FirVisitor<R, D>, data: D) {
|
fun <R, D> List<FirElement>.acceptAllElements(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
|||||||
Reference in New Issue
Block a user